Proton es una herramienta para usar con el cliente Steam que permite ejecutar juegos exclusivos de Windows en el sistema operativo Linux. Utiliza Wine para facilitar esto.
La mayoría de los usuarios deberían utilizar Proton proporcionado por el propio Cliente Steam. Consulta esta publicación de la comunidad Steam para obtener más detalles.
El código fuente se proporciona para permitir a los usuarios avanzados la capacidad de alterar Proton. Por ejemplo, es posible que algunos usuarios deseen utilizar una versión diferente de Wine con un título particular.
El registro de cambios está disponible en nuestra wiki.
Adquiera la fuente de Proton clonando https://github.com/ValveSoftware/Proton y verificando la rama que desea.
Puede clonar el último Proton en su sistema con este comando:
git clone --recurse-submodules https://github.com/ValveSoftware/Proton.git proton
Asegúrese de actualizar los submódulos al cambiar entre ramas:
git checkout experimental_6.3
git submodule update --init --recursive
Si deseas cambiar algún subcomponente, ahora es el momento de hacerlo. Por ejemplo, si desea realizar cambios en Wine, deberá aplicarlos al directorio wine/
.
La mayor parte de Proton se compila dentro del contenedor Proton SDK con muy pocas dependencias en el lado del host.
Necesita una configuración Docker o Podman. Recomendamos encarecidamente la configuración Podman sin raíz. Consulte la documentación de su distribución para obtener instrucciones de configuración (por ejemplo, Arch Podman/Docker, Debian Podman/Docker).
Proporcionamos un Makefile de nivel superior que ejecutará la mayoría de los comandos de compilación por usted.
Después de revisar el repositorio y actualizar sus submódulos, asumiendo que tiene una configuración de Docker o Podman funcional, puede compilar e instalar Proton con un simple:
make install
Si a su sistema de compilación le faltan dependencias, fallará rápidamente con un mensaje de error claro.
Una vez finalizada la compilación, es posible que tengas que reiniciar el cliente Steam para ver la nueva herramienta Proton. El nombre de la herramienta en el cliente Steam se basará en la rama de Proton actualmente desprotegida. Puede anular este nombre utilizando la variable build_name
.
Consulte make help
para conocer otros objetivos y opciones de compilación.
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
Al ejecutar configure.sh
se creará un Makefile
que le permitirá construir Proton. Los scripts verifican si los contenedores son funcionales y le avisan si falta alguna dependencia del lado del host. Debe ejecutar el comando desde un directorio creado específicamente para su compilación.
El script de configuración intenta descubrir una configuración de Docker o Podman que funcione para usar, pero puede forzar un motor compatible con --container-engine=<executable_name>
.
Puede habilitar ccache con el indicador --enable-cache
. Esto montará su $CCACHE_DIR
o $HOME/.ccache
dentro del contenedor.
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>
se puede utilizar para compilar con una versión personalizada de las imágenes del SDK de Proton.
Consulte --help
para conocer otras opciones de configuración.
NOTA: Si SELinux está en uso, es posible que el contenedor de compilación de Proton no pueda acceder a los archivos de su usuario. Esto se debe a las etiquetas del sistema de archivos de SELinux. Puede pasar el parámetro --relabel-volumes
para configurarlo y hacer que el motor del contenedor vuelva a etiquetar sus montajes de enlace y permita el acceso a esos archivos desde dentro del contenedor. Esto puede resultar peligroso cuando se utiliza con directorios del sistema. Proceda con precaución y consulte el manual del motor de su contenedor.
make
Objetivos importantes:
make install
: instale Proton en el directorio Steam de su usuario; consulte la sección de instalación de Proton localmente para obtener más detalles.
make redist
: crea una compilación de redistribución ( redist/
) que se puede copiar a ~/.steam/root/compatibilitytools.d/
.
make deploy
: crea una compilación de implementación ( deploy/
). Esto es lo que usamos para implementar Proton para los usuarios de Steam a través de Steamworks.
make module=<module> module
: compila versiones de 32 y 64 bits del módulo Wine especificado. Esto permite una iteración rápida en un módulo. Este objetivo sólo es útil después de construir Proton.
make dxvk
/ make vkd3d-proton
- reconstruir DXVK / vkd3d-proton.
Para evitar la eliminación de símbolos, agregue UNSTRIPPED_BUILD=1
a la invocación make
. Esto debe usarse sólo con un directorio de compilación limpio.
P.ej:
mkdir ../debug-proton-build && cd ../debug-proton-build
../proton/configure.sh --enable-ccache --build-name=debug_build
make UNSTRIPPED_BUILD=1 install
Steam se envía con varias versiones de Proton, que los juegos usarán de forma predeterminada o que puedes seleccionar en la página Steam Play de Configuración de Steam. Steam también admite la ejecución de juegos con versiones locales de Proton, que puedes instalar en tu máquina.
Para instalar una compilación local de Proton en Steam, cree un nuevo directorio en ~/.steam/root/compatibilitytools.d/
con el nombre de la herramienta que elija y coloque el directorio que contiene su compilación redistribuible en esa ruta.
El destino make install
realizará esta tarea por usted, instalando la compilación de Proton en la carpeta Steam para el usuario actual. Tendrás que reiniciar el cliente Steam para que pueda acceder a una nueva herramienta.
Una instalación correcta de una herramienta local debería ser similar a esta:
compatibilitytools.d/my_proton/
├── compatibilitytool.vdf
├── filelock.py
├── LICENSE
├── proton
├── proton_dist.tar
├── toolmanifest.vdf
├── user_settings.sample.py
└── version
Para habilitar su compilación local en Steam, vaya a la sección Steam Play de la ventana Configuración. Si la compilación se instaló correctamente, debería ver "proton-localbuild" en la lista desplegable de herramientas de compatibilidad.
Cada componente de este software se utiliza según los términos de sus licencias. Consulte los archivos LICENSE
aquí, así como los archivos LICENSE
, COPYING
, etc. en cada submódulo y directorio para obtener más detalles. Si distribuye una versión integrada de Proton a otros usuarios, debe cumplir con los términos de estas licencias.
Las compilaciones de protones tienen sus símbolos eliminados de forma predeterminada. Puede cambiar a la rama beta "depurar" en Steam (busque Proton en su biblioteca, Propiedades... -> BETAS -> seleccione "depurar") o compilar sin eliminar (consulte la sección Depurar compilaciones).
Los símbolos se proporcionan a través de los archivos .debug
adjuntos que pueden necesitar ser cargados explícitamente por las herramientas de depuración. Para GDB hay un script auxiliar wine/tools/gdbinit.py
(obténgalo) que proporciona el comando load-symbol-files
(o lsf
para abreviar) que carga los símbolos para todos los archivos mapeados.
Para obtener sugerencias sobre la depuración, consulte docs/DEBUGGING.md.
compile_commands.json
Para usar con el servidor clangd LSP y herramientas similares.
Los proyectos creados con cmake o meson (por ejemplo, vkd3d-proton) vienen automáticamente con compile_commands.json
. Para herramientas automáticas (por ejemplo, Wine), debe configurar la compilación con --enable-bear
que usa Bear para crear la base de datos de compilación. No está activado de forma predeterminada, ya que hace que la compilación sea un poco más lenta.
El sistema de compilación recopila todos los archivos compila_commands.json creados en un subdirectorio de compilación denominado compile_commands/
.
Las rutas se traducen para que apunten a la fuente real (es decir, no a la copia sincronizada). Sin embargo, aún puede depender del directorio de compilación para cosas como config.h
generado automáticamente y para Wine puede ser beneficioso ejecutar tools/make_requests
en sus directorios de origen, ya que esos cambios no se confirman.
Luego puedes configurar tu editor para usar ese archivo para clangd de varias maneras:
compile_commands.json
.clangd
, por ejemplo cd src/proton/wine/
cat > .clangd << EOF
CompileFlags:
CompilationDatabase: ../build/current-dev/compile_commands/wine64/
EOF
ln -s ../build/current-dev/compile_commands/wine64/compile_commands.json .
Proton se puede ajustar en tiempo de ejecución para ayudar a que se ejecuten ciertos juegos. El cliente Steam establece algunas opciones para juegos conocidos usando la variable STEAM_COMPAT_CONFIG
. Puede anular estas opciones utilizando las variables de entorno que se describen a continuación.
La mejor manera de configurar estas anulaciones de entorno para todos los juegos es cambiar el nombre user_settings.sample.py
a user_settings.py
y modificarlo adecuadamente. Este archivo se encuentra en el directorio de instalación de Proton en su biblioteca de Steam (a menudo ~/.steam/steam/steamapps/common/Proton #.#
).
Si desea cambiar la configuración de tiempo de ejecución para un juego específico, puede usar la configuración Set Launch Options
en el cuadro de diálogo Properties
del juego en el cliente Steam. Establezca la variable, seguida de %command%
. Por ejemplo, ingrese " PROTON_USE_WINED3D=1 %command%
" para usar el renderizador wined3d basado en OpenGL en lugar del renderizador DXVK basado en Vulkan.
Para habilitar una opción, establezca la variable en un valor distinto de 0
. Para deshabilitar una opción, establezca la variable en 0
. Para utilizar la configuración predeterminada de Steam, no especifique la variable en absoluto.
Todas las siguientes son opciones de tiempo de ejecución. No efectúan cambios permanentes en el prefijo Wine. Al eliminar la opción se volverá al comportamiento anterior.
Cadena de configuración de compatibilidad | Variable de entorno | Descripción |
---|---|---|
PROTON_LOG | Método conveniente para volcar un registro de depuración útil en $PROTON_LOG_DIR/steam-$APPID.log . Configúrelo en 1 para habilitar el registro predeterminado, o configúrelo en una cadena que se agregará a los canales WINEDEBUG predeterminados. | |
PROTON_LOG_DIR | Envíe los archivos de registro al directorio especificado. El valor predeterminado es su directorio de inicio. | |
PROTON_WAIT_ATTACH | Espere a que se conecte un depurador a steam.exe antes de iniciar el proceso del juego. Para conectarse al proceso del juego al inicio, los depuradores deben configurarse para seguir los procesos secundarios. | |
PROTON_CRASH_REPORT_DIR | Escriba registros de fallos en este directorio. No limpia los registros antiguos, por lo que eventualmente puede consumir todo el espacio en disco. | |
wined3d | PROTON_USE_WINED3D | Utilice wined3d basado en OpenGL en lugar de DXVK basado en Vulkan para d3d11, d3d10 y d3d9. |
nod3d11 | PROTON_NO_D3D11 | Desactive d3d11.dll , para juegos d3d11 que pueden recurrir y ejecutarse mejor con d3d9. |
nod3d10 | PROTON_NO_D3D10 | Desactive d3d10.dll y dxgi.dll , para juegos d3d10 que pueden recurrir a d3d9 y ejecutarse mejor con ellos. |
dxvkd3d8 | PROTON_DXVK_D3D8 | Utilice d3d8.dll de DXVK. |
noesync | PROTON_NO_ESYNC | No utilice primitivas de sincronización en proceso basadas en eventfd. |
nofsync | PROTON_NO_FSYNC | No utilice primitivas de sincronización en proceso basadas en futex. (Deshabilitado automáticamente en sistemas sin soporte FUTEX_WAIT_MULTIPLE ). |
noxim | PROTON_NO_XIM | Habilitado de forma predeterminada. No intente utilizar la compatibilidad con XIM (métodos de entrada X). Se sabe que la compatibilidad con XIM provoca fallos con libx11 anterior a la versión 1.7. |
disablenvapi | PROTON_DISABLE_NVAPI | Deshabilite la biblioteca de soporte de GPU NVAPI de NVIDIA. |
nativevulkanloader | Utilice el cargador Vulkan incluido con el juego en lugar del cargador Vulkan integrado de Proton. Esto interrumpe la compatibilidad con la realidad virtual, pero algunos juegos lo requieren. | |
forcelgadd | PROTON_FORCE_LARGE_ADDRESS_AWARE | Obligue a Wine a habilitar el indicador LARGE_ADDRESS_AWARE para todos los ejecutables. Habilitado de forma predeterminada. |
heapdelayfree | PROTON_HEAP_DELAY_FREE | Retrasar la liberación de algo de memoria para evitar errores de uso después de la liberación de la aplicación. |
gamedrive | PROTON_SET_GAME_DRIVE | Crea una unidad S: que apunte a la biblioteca de Steam que contiene el juego. |
noforcelgadd | Desactivar forcelgadd. Si se configuran tanto this como forcelgadd , enable gana. | |
oldglstr | PROTON_OLD_GL_STRING | Establezca algunas anulaciones de controladores para limitar la longitud de la cadena de extensión GL, para juegos antiguos que fallan en cadenas de extensión muy largas. |
vkd3dfl12 | Fuerce el nivel de característica de Direct3D 12 a 12, independientemente de la compatibilidad del controlador. | |
vkd3dbindlesstb | Coloque force_bindless_texel_buffer en VKD3D_CONFIG . | |
nomfdxgiman | WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER | Habilite el truco para solucionar problemas de video en algunos juegos debido a la compatibilidad incompleta con IMFDXGIDeviceManager. |
noopwr | WINE_DISABLE_VULKAN_OPWR | Habilite el truco para deshabilitar la representación de ventanas de otros procesos de Vulkan, lo que a veces causa problemas en Wayland debido a que blit está un cuadro por detrás. |
hidenvgpu | PROTON_HIDE_NVIDIA_GPU | Obligar a que las GPU de Nvidia se informen siempre como GPU de AMD. Algunos juegos requieren esto si dependen de la funcionalidad del controlador Nvidia solo para Windows. Consulte también la configuración nvapiHack de DXVK, que solo afecta los informes de Direct3D. |
WINE_FULLSCREEN_INTEGER_SCALING | Habilite el modo de escalado de números enteros para obtener píxeles nítidos al aumentar la escala. | |
cmdlineappend: | Agregue la cadena después de los dos puntos como argumento al comando del juego. Puede especificarse más de una vez. Escape de comas y barras invertidas con una barra invertida. | |
xalia | PROTON_USE_XALIA | Habilite Xalia, un programa que puede agregar una interfaz de usuario de gamepad para algunas interfaces de teclado/ratón. |
seccomp | PROTON_USE_SECCOMP | Nota: Obsoleto en Proton 5.13. En versiones anteriores, habilite el filtro seccomp-bpf para emular llamadas al sistema nativas, necesarias para que funcionen algunas protecciones DRM. |
d9vk | PROTON_USE_D9VK | Nota: Obsoleto en Proton 5.0. En versiones anteriores, utilice DXVK basado en Vulkan en lugar de wined3d basado en OpenGL para d3d9. |