Proton est un outil à utiliser avec le client Steam qui permet aux jeux exclusifs à Windows de s'exécuter sur le système d'exploitation Linux. Il utilise Wine pour faciliter cela.
La plupart des utilisateurs devraient utiliser Proton fourni par le client Steam lui-même. Consultez cet article de la communauté Steam pour plus de détails.
Le code source est fourni pour permettre aux utilisateurs avancés de modifier Proton. Par exemple, certains utilisateurs peuvent souhaiter utiliser une version différente de Wine avec un titre particulier.
Le changelog est disponible sur notre wiki.
Acquérir la source de Proton en clonant https://github.com/ValveSoftware/Proton et en vérifiant la branche que vous désirez.
Vous pouvez cloner le dernier Proton sur votre système avec cette commande :
git clone --recurse-submodules https://github.com/ValveSoftware/Proton.git proton
Assurez-vous de mettre à jour les sous-modules lors du basculement entre les branches :
git checkout experimental_6.3
git submodule update --init --recursive
Si vous souhaitez modifier un sous-composant, c'est le moment de le faire. Par exemple, si vous souhaitez apporter des modifications à Wine, vous les appliquerez au répertoire wine/
.
La plupart des Proton sont construits à l'intérieur du conteneur Proton SDK avec très peu de dépendances du côté hôte.
Vous avez besoin d'une configuration Docker ou Podman. Nous recommandons fortement la configuration Podman sans racine. Veuillez vous référer à la documentation de votre distribution pour les instructions de configuration (par exemple Arch Podman / Docker, Debian Podman / Docker).
Nous fournissons un Makefile de haut niveau qui exécutera la plupart des commandes de construction pour vous.
Après avoir extrait le référentiel et mis à jour ses sous-modules, en supposant que vous disposez d'une configuration Docker ou Podman fonctionnelle, vous pouvez créer et installer Proton avec un simple :
make install
Si votre système de build manque de dépendances, il échouera rapidement avec un message d'erreur clair.
Une fois la construction terminée, vous devrez peut-être redémarrer le client Steam pour voir le nouvel outil Proton. Le nom de l'outil dans le client Steam sera basé sur la branche actuellement extraite de Proton. Vous pouvez remplacer ce nom à l'aide de la variable build_name
.
Voir make help
pour d'autres cibles et options de build.
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
L'exécution configure.sh
créera un Makefile
vous permettant de créer Proton. Les scripts vérifient si les conteneurs sont fonctionnels et vous invitent si des dépendances côté hôte sont manquantes. Vous devez exécuter la commande à partir d'un répertoire créé spécifiquement pour votre build.
Le script de configuration tente de découvrir une configuration Docker ou Podman fonctionnelle à utiliser, mais vous pouvez forcer un moteur compatible avec --container-engine=<executable_name>
.
Vous pouvez activer ccache avec l'indicateur --enable-cache
. Cela montera votre $CCACHE_DIR
ou $HOME/.ccache
à l'intérieur du conteneur.
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>
peut être utilisé pour créer avec une version personnalisée des images du SDK Proton.
Vérifiez --help
pour d'autres options de configuration.
REMARQUE : si SELinux est utilisé, le conteneur de build Proton peut ne pas parvenir à accéder aux fichiers de votre utilisateur. Ceci est dû aux étiquettes du système de fichiers de SELinux. Vous pouvez passer le commutateur --relabel-volumes
à configurer pour que le moteur du conteneur réétiquete ses montages de liaison et autorise l'accès à ces fichiers depuis l'intérieur du conteneur. Cela peut être dangereux lorsqu'il est utilisé avec des répertoires système. Procédez avec prudence et reportez-vous au manuel du moteur de votre conteneur.
make
Objectifs importants :
make install
- installez Proton dans le répertoire Steam de votre utilisateur, consultez la section Installer Proton localement pour plus de détails.
make redist
- crée une version redistribuée ( redist/
) qui peut être copiée dans ~/.steam/root/compatibilitytools.d/
.
make deploy
- crée une version de déploiement ( deploy/
). C'est ce que nous utilisons pour déployer Proton auprès des utilisateurs Steam via Steamworks.
make module=<module> module
- crée les versions 32 et 64 bits du module wine spécifié. Cela permet une itération rapide sur un module. Cette cible n'est utile qu'après avoir construit Proton.
make dxvk
/ make vkd3d-proton
- reconstruire DXVK / vkd3d-proton.
Pour empêcher la suppression des symboles, ajoutez UNSTRIPPED_BUILD=1
à l'invocation make
. Cela ne doit être utilisé qu'avec un répertoire de construction propre.
Par exemple :
mkdir ../debug-proton-build && cd ../debug-proton-build
../proton/configure.sh --enable-ccache --build-name=debug_build
make UNSTRIPPED_BUILD=1 install
Steam est livré avec plusieurs versions de Proton, que les jeux utiliseront par défaut ou que vous pourrez sélectionner dans la page Steam Play des paramètres Steam. Steam prend également en charge l'exécution de jeux avec des versions locales de Proton, que vous pouvez installer sur votre machine.
Pour installer une version locale de Proton dans Steam, créez un nouveau répertoire dans ~/.steam/root/compatibilitytools.d/
avec un nom d'outil de votre choix et placez le répertoire contenant votre version redistribuable sous ce chemin.
La cible make install
effectuera cette tâche pour vous, en installant la version Proton dans le dossier Steam pour l'utilisateur actuel. Vous devrez redémarrer le client Steam pour qu'il reprenne un nouvel outil.
Une installation correcte d'un outil local devrait ressembler à ceci :
compatibilitytools.d/my_proton/
├── compatibilitytool.vdf
├── filelock.py
├── LICENSE
├── proton
├── proton_dist.tar
├── toolmanifest.vdf
├── user_settings.sample.py
└── version
Pour activer votre version locale dans Steam, accédez à la section Steam Play de la fenêtre Paramètres. Si la version a été correctement installée, vous devriez voir « proton-localbuild » dans la liste déroulante des outils de compatibilité.
Chaque composant de ce logiciel est utilisé selon les termes de leurs licences. Voir les fichiers LICENSE
ici, ainsi que les fichiers LICENSE
, COPYING
, etc. dans chaque sous-module et répertoire pour plus de détails. Si vous distribuez une version construite de Proton à d'autres utilisateurs, vous devez respecter les termes de ces licences.
Les versions Proton ont leurs symboles supprimés par défaut. Vous pouvez passer à la branche bêta "debug" dans Steam (recherchez Proton dans votre bibliothèque, Propriétés... -> BETAS -> sélectionnez "debug") ou construire sans supprimer (voir la section Debug Builds).
Les symboles sont fournis via les fichiers .debug
associés qui peuvent devoir être explicitement chargés par les outils de débogage. Pour GDB, il existe un script d'assistance wine/tools/gdbinit.py
(source) qui fournit la commande load-symbol-files
(ou lsf
en abrégé) qui charge les symboles de tous les fichiers mappés.
Pour des conseils sur le débogage, voir docs/DEBUGGING.md.
compile_commands.json
À utiliser avec le serveur clangd LSP et des outils similaires.
Les projets construits à l'aide de cmake ou meson (par exemple vkd3d-proton) sont automatiquement livrés avec compile_commands.json
. Pour les outils automatiques (par exemple wine), vous devez configurer la construction avec --enable-bear
qui utilise Bear pour créer la base de données de compilation. Ce n'est pas activé par défaut car cela ralentit légèrement la construction.
Le système de build collecte tous les fichiers compile_commands.json créés dans un sous-répertoire de build nommé compile_commands/
.
Les chemins sont traduits pour pointer vers la source réelle (c'est-à-dire pas la copie rsynchronisée). Cela peut toujours dépendre du répertoire de construction pour des choses comme config.h
généré automatiquement et pour wine, il peut être avantageux d'exécuter tools/make_requests
dans vos répertoires sources car ces modifications ne sont pas validées.
Vous pouvez ensuite configurer votre éditeur pour utiliser ce fichier pour clangd de plusieurs manières :
compile_commands.json
.clangd
, par exemple 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 peut être réglé au moment de l'exécution pour faciliter le fonctionnement de certains jeux. Le client Steam définit certaines options pour les jeux connus à l'aide de la variable STEAM_COMPAT_CONFIG
. Vous pouvez remplacer ces options à l'aide des variables d'environnement décrites ci-dessous.
La meilleure façon de définir ces remplacements d'environnement pour tous les jeux est de renommer user_settings.sample.py
en user_settings.py
et de le modifier de manière appropriée. Ce fichier se trouve dans le répertoire d'installation de Proton dans votre bibliothèque Steam (souvent ~/.steam/steam/steamapps/common/Proton #.#
).
Si vous souhaitez modifier la configuration d'exécution d'un jeu spécifique, vous pouvez utiliser le paramètre Set Launch Options
dans la boîte de dialogue Properties
du jeu dans le client Steam. Définissez la variable, suivie de %command%
. Par exemple, saisissez « PROTON_USE_WINED3D=1 %command%
» pour utiliser le moteur de rendu wined3d basé sur OpenGL au lieu du moteur de rendu DXVK basé sur Vulkan.
Pour activer une option, définissez la variable sur une valeur non 0
. Pour désactiver une option, définissez la variable sur 0
. Pour utiliser la configuration par défaut de Steam, ne spécifiez pas du tout la variable.
Tous les éléments ci-dessous sont des options d'exécution. Ils n'effectuent pas de modifications permanentes du préfixe Wine. La suppression de l'option reviendra au comportement précédent.
Chaîne de configuration compatible | Variable d'environnement | Description |
---|---|---|
PROTON_LOG | Méthode pratique pour vider un journal de débogage utile dans $PROTON_LOG_DIR/steam-$APPID.log . Définissez sur 1 pour activer la journalisation par défaut, ou définissez sur une chaîne à ajouter aux canaux WINEDEBUG par défaut. | |
PROTON_LOG_DIR | Sortie des fichiers journaux dans le répertoire spécifié. La valeur par défaut est votre répertoire personnel. | |
PROTON_WAIT_ATTACH | Attendez qu'un débogueur se connecte à steam.exe avant de lancer le processus de jeu. Pour s'attacher au processus de jeu au démarrage, les débogueurs doivent être configurés pour suivre les processus enfants. | |
PROTON_CRASH_REPORT_DIR | Écrivez les journaux de crash dans ce répertoire. Ne nettoie pas les anciens journaux et peut donc éventuellement consommer tout votre espace disque. | |
wined3d | PROTON_USE_WINED3D | Utilisez wined3d basé sur OpenGL au lieu de DXVK basé sur Vulkan pour d3d11, d3d10 et d3d9. |
nod3d11 | PROTON_NO_D3D11 | Désactivez d3d11.dll , pour les jeux d3d11 qui peuvent revenir et mieux fonctionner avec d3d9. |
nod3d10 | PROTON_NO_D3D10 | Désactivez d3d10.dll et dxgi.dll pour les jeux d3d10 qui peuvent revenir et mieux fonctionner avec d3d9. |
dxvkd3d8 | PROTON_DXVK_D3D8 | Utilisez d3d8.dll de DXVK. |
noesync | PROTON_NO_ESYNC | N'utilisez pas de primitives de synchronisation en cours basées sur eventfd. |
nofsync | PROTON_NO_FSYNC | N'utilisez pas de primitives de synchronisation en cours basées sur Futex. (Automatiquement désactivé sur les systèmes sans prise en charge FUTEX_WAIT_MULTIPLE .) |
noxim | PROTON_NO_XIM | Activé par défaut. N'essayez pas d'utiliser la prise en charge XIM (X Input Methods). La prise en charge de XIM est connue pour provoquer des plantages avec libx11 antérieure à la version 1.7. |
disablenvapi | PROTON_DISABLE_NVAPI | Désactivez la bibliothèque de support GPU NVAPI de NVIDIA. |
nativevulkanloader | Utilisez le chargeur Vulkan fourni avec le jeu au lieu du chargeur Vulkan intégré de Proton. Cela rompt le support VR, mais est requis par quelques jeux. | |
forcelgadd | PROTON_FORCE_LARGE_ADDRESS_AWARE | Forcez Wine à activer l'indicateur LARGE_ADDRESS_AWARE pour tous les exécutables. Activé par défaut. |
heapdelayfree | PROTON_HEAP_DELAY_FREE | Retarder la libération de mémoire pour contourner les bogues d'utilisation après libération de l'application. |
gamedrive | PROTON_SET_GAME_DRIVE | Créez un lecteur S: qui pointe vers la bibliothèque Steam qui contient le jeu. |
noforcelgadd | Désactivez forcelgadd. Si ceci et forcelgadd sont définis, activé gagne. | |
oldglstr | PROTON_OLD_GL_STRING | Définissez des remplacements de pilotes pour limiter la longueur de la chaîne d'extension GL, pour les anciens jeux qui plantent sur des chaînes d'extension très longues. |
vkd3dfl12 | Forcez le niveau de fonctionnalité Direct3D 12 à 12, quelle que soit la prise en charge du pilote. | |
vkd3dbindlesstb | Mettez force_bindless_texel_buffer dans VKD3D_CONFIG . | |
nomfdxgiman | WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER | Activez le hack pour contourner les problèmes vidéo dans certains jeux en raison de la prise en charge incomplète de IMFDXGIDeviceManager. |
noopwr | WINE_DISABLE_VULKAN_OPWR | Activez le hack pour désactiver le rendu des autres fenêtres de processus de Vulkan, ce qui provoque parfois des problèmes sur Wayland en raison du fait que blit est une image en retard. |
hidenvgpu | PROTON_HIDE_NVIDIA_GPU | Forcez les GPU Nvidia à toujours être signalés comme GPU AMD. Certains jeux l'exigent s'ils dépendent de la fonctionnalité du pilote Nvidia Windows uniquement. Voir également la configuration nvapiHack de DXVK, qui affecte uniquement les rapports de Direct3D. |
WINE_FULLSCREEN_INTEGER_SCALING | Activez le mode de mise à l'échelle entière pour obtenir des pixels nets lors de la mise à l'échelle. | |
cmdlineappend: | Ajoutez la chaîne après les deux points comme argument à la commande de jeu. Peut être spécifié plusieurs fois. Échapper aux virgules et aux barres obliques inverses avec une barre oblique inverse. | |
xalia | PROTON_USE_XALIA | Activez Xalia, un programme qui peut ajouter une interface utilisateur de manette de jeu pour certaines interfaces clavier/souris. |
seccomp | PROTON_USE_SECCOMP | Remarque : obsolète dans Proton 5.13. Dans les anciennes versions, activez le filtre seccomp-bpf pour émuler les appels système natifs, requis pour le fonctionnement de certaines protections DRM. |
d9vk | PROTON_USE_D9VK | Remarque : obsolète dans Proton 5.0. Dans les anciennes versions, utilisez DXVK basé sur Vulkan au lieu de wined3d basé sur OpenGL pour d3d9. |