Proton é uma ferramenta para uso com o cliente Steam que permite que jogos exclusivos do Windows rodem no sistema operacional Linux. Ele usa Wine para facilitar isso.
A maioria dos usuários deve usar o Proton fornecido pelo próprio cliente Steam. Veja esta postagem da comunidade Steam para mais detalhes.
O código-fonte é fornecido para permitir que usuários avançados alterem o Proton. Por exemplo, alguns usuários podem querer usar uma versão diferente do Wine com um título específico.
O changelog está disponível em nosso wiki.
Adquira a fonte do Proton clonando https://github.com/ValveSoftware/Proton e verificando o branch desejado.
Você pode clonar o Proton mais recente em seu sistema com este comando:
git clone --recurse-submodules https://github.com/ValveSoftware/Proton.git proton
Certifique-se de atualizar os submódulos ao alternar entre ramificações:
git checkout experimental_6.3
git submodule update --init --recursive
Se você quiser alterar algum subcomponente, agora é a hora de fazê-lo. Por exemplo, se você deseja fazer alterações no Wine, você deve aplicá-las no diretório wine/
.
A maior parte do Proton é construída dentro do contêiner Proton SDK com muito poucas dependências no lado do host.
Você precisa de uma configuração Docker ou Podman. É altamente recomendável a configuração do Podman sem root. Consulte a documentação da sua distribuição para obter instruções de configuração (por exemplo, Arch Podman/Docker, Debian Podman/Docker).
Fornecemos um Makefile de nível superior que executará a maioria dos comandos de construção para você.
Depois de verificar o repositório e atualizar seus submódulos, supondo que você tenha uma configuração Docker ou Podman funcional, você pode construir e instalar o Proton com um simples:
make install
Se o seu sistema de compilação não tiver dependências, ele falhará rapidamente com uma mensagem de erro clara.
Após a conclusão da compilação, pode ser necessário reiniciar o cliente Steam para ver a nova ferramenta Proton. O nome da ferramenta no cliente Steam será baseado no ramo do Proton atualmente verificado. Você pode substituir esse nome usando a variável build_name
.
Consulte make help
para outros alvos e opções de construção.
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
Executar configure.sh
criará um Makefile
permitindo que você construa o Proton. Os scripts verificam se os contêineres estão funcionais e avisam se alguma dependência do host estiver faltando. Você deve executar o comando em um diretório criado especificamente para sua construção.
O script de configuração tenta descobrir uma configuração funcional do Docker ou Podman para usar, mas você pode forçar um mecanismo compatível com --container-engine=<executable_name>
.
Você pode ativar o ccache com o sinalizador --enable-cache
. Isso montará seu $CCACHE_DIR
ou $HOME/.ccache
dentro do contêiner.
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>
pode ser usado para construir com uma versão personalizada das imagens Proton SDK.
Verifique --help
para outras opções de configuração.
NOTA: Se o SELinux estiver em uso, o contêiner de construção do Proton poderá falhar ao acessar os arquivos do seu usuário. Isso é causado pelos rótulos do sistema de arquivos do SELinux. Você pode passar a opção --relabel-volumes
para configurar para fazer com que o mecanismo do contêiner reetiquete suas montagens de ligação e permita o acesso a esses arquivos de dentro do contêiner. Isto pode ser perigoso quando usado com diretórios do sistema. Prossiga com cuidado e consulte o manual do seu mecanismo de contêiner.
make
Metas importantes:
make install
- instale o Proton no diretório Steam do seu usuário, consulte a seção instalar o Proton localmente para obter detalhes.
make redist
- cria uma compilação redistribuída ( redist/
) que pode ser copiada para ~/.steam/root/compatibilitytools.d/
.
make deploy
- cria uma compilação de implantação ( deploy/
). Isso é o que usamos para implantar o Proton para usuários do Steam por meio do Steamworks.
make module=<module> module
- cria versões de 32 e 64 bits do módulo wine especificado. Isso permite iteração rápida em um módulo. Este alvo só é útil após a construção do Proton.
make dxvk
/ make vkd3d-proton
- reconstruir DXVK / vkd3d-proton.
Para evitar a remoção de símbolos, adicione UNSTRIPPED_BUILD=1
à chamada make
. Isso deve ser usado apenas com um diretório de construção limpo.
Por exemplo:
mkdir ../debug-proton-build && cd ../debug-proton-build
../proton/configure.sh --enable-ccache --build-name=debug_build
make UNSTRIPPED_BUILD=1 install
O Steam vem com várias versões do Proton, que os jogos usarão por padrão ou que você pode selecionar na página Steam Play das configurações do Steam. O Steam também oferece suporte à execução de jogos com versões locais do Proton, que você pode instalar em sua máquina.
Para instalar uma versão local do Proton no Steam, crie um novo diretório em ~/.steam/root/compatibilitytools.d/
com um nome de ferramenta de sua escolha e coloque o diretório que contém sua versão redistribuível nesse caminho.
O destino make install
executará esta tarefa para você, instalando a compilação Proton na pasta Steam para o usuário atual. Você terá que reiniciar o cliente Steam para que ele possa usar uma nova ferramenta.
Uma instalação correta da ferramenta local deve ser semelhante a esta:
compatibilitytools.d/my_proton/
├── compatibilitytool.vdf
├── filelock.py
├── LICENSE
├── proton
├── proton_dist.tar
├── toolmanifest.vdf
├── user_settings.sample.py
└── version
Para habilitar sua versão local no Steam, vá para a seção Steam Play da janela Configurações. Se a compilação foi instalada corretamente, você deverá ver "proton-localbuild" na lista suspensa de ferramentas de compatibilidade.
Cada componente deste software é usado sob os termos de suas licenças. Veja os arquivos LICENSE
aqui, bem como os arquivos LICENSE
, COPYING
, etc. em cada submódulo e diretório para obter detalhes. Se você distribuir uma versão integrada do Proton para outros usuários, deverá aderir aos termos dessas licenças.
As compilações do Proton têm seus símbolos removidos por padrão. Você pode mudar para o branch beta "debug" no Steam (pesquise Proton em sua biblioteca, Propriedades... -> BETAS -> selecione "debug") ou construir sem remover (veja a seção Debug Builds).
Os símbolos são fornecidos através dos arquivos .debug
que podem precisar ser carregados explicitamente pelas ferramentas de depuração. Para GDB, há um script auxiliar wine/tools/gdbinit.py
(source it) que fornece o comando load-symbol-files
(ou lsf
para abreviar) que carrega os símbolos para todos os arquivos mapeados.
Para dicas sobre depuração, consulte docs/DEBUGGING.md.
compile_commands.json
Para uso com servidor clangd LSP e ferramentas semelhantes.
Projetos construídos usando cmake ou meson (por exemplo, vkd3d-proton) vêm automaticamente com compile_commands.json
. Para autotools (por exemplo, wine), você deve configurar a compilação com --enable-bear
que usa bear para criar o banco de dados de compilação. Não está ativado por padrão, pois torna a construção um pouco mais lenta.
O sistema de compilação coleta todos os arquivos compile_commands.json criados em um subdiretório de compilação denominado compile_commands/
.
Os caminhos são traduzidos para apontar para a fonte real (ou seja, não para a cópia sincronizada). Ainda pode depender do diretório de construção para coisas como config.h
gerado automaticamente e para o wine pode ser benéfico executar tools/make_requests
em seus diretórios de origem, pois essas alterações não são confirmadas.
Você pode então configurar seu editor para usar esse arquivo no clangd de algumas maneiras:
compile_commands.json
.clangd
, por exemplo 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 .
O Proton pode ser ajustado em tempo de execução para ajudar na execução de certos jogos. O cliente Steam define algumas opções para jogos conhecidos usando a variável STEAM_COMPAT_CONFIG
. Você pode substituir essas opções usando as variáveis de ambiente descritas abaixo.
A melhor maneira de definir essas substituições de ambiente para todos os jogos é renomear user_settings.sample.py
para user_settings.py
e modificá-lo adequadamente. Este arquivo está localizado no diretório de instalação do Proton em sua biblioteca Steam (geralmente ~/.steam/steam/steamapps/common/Proton #.#
).
Se quiser alterar a configuração do tempo de execução de um jogo específico, você pode usar a configuração Set Launch Options
na caixa de diálogo Properties
do jogo no cliente Steam. Defina a variável, seguida por %command%
. Por exemplo, insira " PROTON_USE_WINED3D=1 %command%
" para usar o renderizador wined3d baseado em OpenGL em vez do renderizador DXVK baseado em Vulkan.
Para ativar uma opção, defina a variável com um valor diferente de 0
. Para desabilitar uma opção, defina a variável como 0
. Para usar a configuração padrão do Steam, não especifique a variável.
Todos os itens abaixo são opções de tempo de execução. Eles não efetuam alterações permanentes no prefixo Wine. A remoção da opção reverterá ao comportamento anterior.
String de configuração de compatibilidade | Variável de ambiente | Descrição |
---|---|---|
PROTON_LOG | Método conveniente para despejar um log de depuração útil em $PROTON_LOG_DIR/steam-$APPID.log . Defina como 1 para ativar o log padrão ou defina como uma string a ser anexada aos canais WINEDEBUG padrão. | |
PROTON_LOG_DIR | Envie arquivos de log para o diretório especificado. O padrão é seu diretório inicial. | |
PROTON_WAIT_ATTACH | Aguarde até que um depurador seja anexado ao steam.exe antes de iniciar o processo do jogo. Para anexar ao processo do jogo na inicialização, os depuradores devem ser configurados para seguir os processos filhos. | |
PROTON_CRASH_REPORT_DIR | Grave logs de falhas neste diretório. Não limpa logs antigos e, eventualmente, pode consumir todo o espaço em disco. | |
wined3d | PROTON_USE_WINED3D | Use wined3d baseado em OpenGL em vez de DXVK baseado em Vulkan para d3d11, d3d10 e d3d9. |
nod3d11 | PROTON_NO_D3D11 | Desative d3d11.dll , para jogos d3d11 que podem voltar e funcionar melhor com d3d9. |
nod3d10 | PROTON_NO_D3D10 | Desative d3d10.dll e dxgi.dll , para jogos d3d10 que podem voltar e funcionar melhor com d3d9. |
dxvkd3d8 | PROTON_DXVK_D3D8 | Use d3d8.dll do DXVK. |
noesync | PROTON_NO_ESYNC | Não use primitivas de sincronização em processo baseadas em eventfd. |
nofsync | PROTON_NO_FSYNC | Não use primitivas de sincronização em processo baseadas em futex. (Desativado automaticamente em sistemas sem suporte FUTEX_WAIT_MULTIPLE .) |
noxim | PROTON_NO_XIM | Habilitado por padrão. Não tente usar o suporte XIM (X Input Methods). O suporte XIM é conhecido por causar travamentos com libx11 anterior à versão 1.7. |
disablenvapi | PROTON_DISABLE_NVAPI | Desative a biblioteca de suporte de GPU NVAPI da NVIDIA. |
nativevulkanloader | Use o carregador Vulkan fornecido com o jogo em vez do carregador Vulkan integrado do Proton. Isso interrompe o suporte VR, mas é exigido por alguns jogos. | |
forcelgadd | PROTON_FORCE_LARGE_ADDRESS_AWARE | Force o Wine a ativar o sinalizador LARGE_ADDRESS_AWARE para todos os executáveis. Habilitado por padrão. |
heapdelayfree | PROTON_HEAP_DELAY_FREE | Atrase a liberação de memória para solucionar bugs de uso após liberação do aplicativo. |
gamedrive | PROTON_SET_GAME_DRIVE | Crie uma unidade S: que aponta para a Biblioteca Steam que contém o jogo. |
noforcelgadd | Desative o forcelgadd. Se tanto this quanto forcelgadd estiverem definidos, enabled vence. | |
oldglstr | PROTON_OLD_GL_STRING | Defina algumas substituições de driver para limitar o comprimento da sequência de extensão GL, para jogos antigos que travam em sequências de extensão muito longas. |
vkd3dfl12 | Force o nível de recurso do Direct3D 12 para 12, independentemente do suporte do driver. | |
vkd3dbindlesstb | Coloque force_bindless_texel_buffer em VKD3D_CONFIG . | |
nomfdxgiman | WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER | Habilite o hack para solucionar problemas de vídeo em alguns jogos devido ao suporte incompleto do IMFDXGIDeviceManager. |
noopwr | WINE_DISABLE_VULKAN_OPWR | Habilite o hack para desabilitar a renderização da janela de outro processo do Vulkan, o que às vezes causa problemas no Wayland devido ao blit estar um quadro atrás. |
hidenvgpu | PROTON_HIDE_NVIDIA_GPU | Forçar as GPUs Nvidia a sempre serem relatadas como GPUs AMD. Alguns jogos exigem isso se dependerem da funcionalidade do driver Nvidia somente para Windows. Consulte também a configuração nvapiHack do DXVK, que afeta apenas os relatórios do Direct3D. |
WINE_FULLSCREEN_INTEGER_SCALING | Ative o modo de escala inteira, para fornecer pixels nítidos durante o aumento de escala. | |
cmdlineappend: | Anexe a string após os dois pontos como argumento para o comando do jogo. Pode ser especificado mais de uma vez. Escape de vírgulas e barras invertidas com uma barra invertida. | |
xalia | PROTON_USE_XALIA | Habilite o Xalia, um programa que pode adicionar uma interface de gamepad para algumas interfaces de teclado/mouse. |
seccomp | PROTON_USE_SECCOMP | Nota: Obsoleto no Proton 5.13. Em versões mais antigas, habilite o filtro seccomp-bpf para emular syscalls nativos, necessários para que algumas proteções DRM funcionem. |
d9vk | PROTON_USE_D9VK | Nota: Obsoleto no Proton 5.0. Em versões mais antigas, use DXVK baseado em Vulkan em vez de wined3d baseado em OpenGL para d3d9. |