Proton ist ein Tool zur Verwendung mit dem Steam-Client, mit dem Spiele, die nur für Windows verfügbar sind, auf dem Linux-Betriebssystem ausgeführt werden können. Um dies zu ermöglichen, wird Wine verwendet.
Die meisten Benutzer sollten Proton verwenden, das vom Steam-Client selbst bereitgestellt wird. Weitere Informationen finden Sie in diesem Steam-Community-Beitrag.
Der Quellcode wird bereitgestellt, um fortgeschrittenen Benutzern die Möglichkeit zu geben, Proton zu ändern. Einige Benutzer möchten beispielsweise möglicherweise eine andere Version von Wine mit einem bestimmten Titel verwenden.
Das Changelog ist in unserem Wiki verfügbar.
Erwerben Sie die Quelle von Proton, indem Sie https://github.com/ValveSoftware/Proton klonen und den gewünschten Zweig auschecken.
Mit diesem Befehl können Sie den neuesten Proton auf Ihr System klonen:
git clone --recurse-submodules https://github.com/ValveSoftware/Proton.git proton
Achten Sie darauf, die Submodule zu aktualisieren, wenn Sie zwischen Zweigen wechseln:
git checkout experimental_6.3
git submodule update --init --recursive
Wenn Sie eine Unterkomponente ändern möchten, ist jetzt der richtige Zeitpunkt dafür. Wenn Sie beispielsweise Änderungen an Wine vornehmen möchten, würden Sie diese auf das wine/
-Verzeichnis anwenden.
Die meisten Proton-Builds werden im Proton SDK-Container mit sehr wenigen Abhängigkeiten auf der Hostseite erstellt.
Sie benötigen entweder ein Docker- oder ein Podman-Setup. Wir empfehlen dringend das Rootless-Podman-Setup. Anweisungen zur Einrichtung finden Sie in der Dokumentation Ihrer Distribution (z. B. Arch Podman / Docker, Debian Podman / Docker).
Wir stellen ein Makefile der obersten Ebene bereit, das die meisten Build-Befehle für Sie ausführt.
Nachdem Sie das Repository ausgecheckt und seine Submodule aktualisiert haben, können Sie Proton mit einem einfachen Schritt erstellen und installieren, vorausgesetzt, Sie haben ein funktionierendes Docker- oder Podman-Setup:
make install
Wenn Ihrem Build-System Abhängigkeiten fehlen, schlägt es schnell mit einer eindeutigen Fehlermeldung fehl.
Nachdem der Build abgeschlossen ist, müssen Sie möglicherweise den Steam-Client neu starten, um das neue Proton-Tool anzuzeigen. Der Name des Tools im Steam-Client basiert auf dem aktuell ausgecheckten Zweig von Proton. Sie können diesen Namen mit der Variable build_name
überschreiben.
Weitere Build-Ziele und -Optionen finden Sie make help
.
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
Durch Ausführen configure.sh
wird ein Makefile
erstellt, mit dem Sie Proton erstellen können. Die Skripte prüfen, ob Container funktionsfähig sind und informieren Sie, wenn hostseitige Abhängigkeiten fehlen. Sie sollten den Befehl in einem Verzeichnis ausführen, das speziell für Ihren Build erstellt wurde.
Das Konfigurationsskript versucht, ein funktionierendes Docker- oder Podman-Setup zur Verwendung zu finden, Sie können jedoch eine kompatible Engine mit --container-engine=<executable_name>
erzwingen.
Sie können Ccache mit dem Flag --enable-cache
aktivieren. Dadurch wird Ihr $CCACHE_DIR
oder $HOME/.ccache
im Container gemountet.
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>
kann zum Erstellen mit einer benutzerdefinierten Version der Proton SDK-Images verwendet werden.
Weitere Konfigurationsoptionen finden Sie unter --help
.
HINWEIS: Wenn SELinux verwendet wird, kann der Proton-Build-Container möglicherweise nicht auf die Dateien Ihres Benutzers zugreifen. Dies wird durch die Dateisystembezeichnungen von SELinux verursacht. Sie können den Schalter --relabel-volumes
konfigurieren, um zu veranlassen, dass die Container-Engine ihre Bind-Mounts neu beschriftet und den Zugriff auf diese Dateien aus dem Container heraus ermöglicht. Dies kann gefährlich sein, wenn es mit Systemverzeichnissen verwendet wird. Gehen Sie vorsichtig vor und lesen Sie das Handbuch Ihres Containermotors.
make
Wichtige Zielmarken:
make install
– Installieren Sie Proton im Steam-Verzeichnis Ihres Benutzers. Weitere Informationen finden Sie im Abschnitt „Proton lokal installieren“.
make redist
– Erstellen Sie einen Redistribute-Build ( redist/
), der nach ~/.steam/root/compatibilitytools.d/
kopiert werden kann.
make deploy
– Erstellen Sie einen Deployment-Build ( deploy/
). Dies verwenden wir, um Proton über Steamworks für Steam-Benutzer bereitzustellen.
make module=<module> module
– erstellt sowohl 32- als auch 64-Bit-Versionen des angegebenen Wine-Moduls. Dies ermöglicht eine schnelle Iteration auf einem Modul. Dieses Ziel ist erst nach dem Bau von Proton nützlich.
make dxvk
/ make vkd3d-proton
- DXVK / vkd3d-proton neu erstellen.
Um das Entfernen von Symbolen zu verhindern, fügen Sie UNSTRIPPED_BUILD=1
zum make
-Aufruf hinzu. Dies sollte nur mit einem sauberen Build-Verzeichnis verwendet werden.
Z.B:
mkdir ../debug-proton-build && cd ../debug-proton-build
../proton/configure.sh --enable-ccache --build-name=debug_build
make UNSTRIPPED_BUILD=1 install
Steam wird mit mehreren Versionen von Proton ausgeliefert, die von den Spielen standardmäßig verwendet werden oder die Sie auf der Steam-Play-Seite der Steam-Einstellungen auswählen können. Steam unterstützt auch die Ausführung von Spielen mit lokalen Builds von Proton, die Sie auf Ihrem Computer installieren können.
Um einen lokalen Build von Proton in Steam zu installieren, erstellen Sie in ~/.steam/root/compatibilitytools.d/
ein neues Verzeichnis mit einem Toolnamen Ihrer Wahl und platzieren Sie das Verzeichnis mit Ihrem weitervertreibbaren Build unter diesem Pfad.
Das make install
Ziel führt diese Aufgabe für Sie aus und installiert den Proton-Build im Steam-Ordner für den aktuellen Benutzer. Sie müssen den Steam-Client neu starten, damit er ein neues Tool erkennt.
Eine korrekte lokale Toolinstallation sollte etwa so aussehen:
compatibilitytools.d/my_proton/
├── compatibilitytool.vdf
├── filelock.py
├── LICENSE
├── proton
├── proton_dist.tar
├── toolmanifest.vdf
├── user_settings.sample.py
└── version
Um Ihren lokalen Build in Steam zu aktivieren, gehen Sie zum Abschnitt „Steam Play“ im Fenster „Einstellungen“. Wenn der Build korrekt installiert wurde, sollte in der Dropdown-Liste der Kompatibilitätstools „proton-localbuild“ angezeigt werden.
Jede Komponente dieser Software wird gemäß den Bedingungen ihrer Lizenzen verwendet. Weitere Informationen finden Sie in den LICENSE
-Dateien hier sowie in den LICENSE
, COPYING
usw. Dateien in jedem Submodul und Verzeichnis. Wenn Sie eine erstellte Version von Proton an andere Benutzer verteilen, müssen Sie die Bedingungen dieser Lizenzen einhalten.
Bei Proton-Builds sind die Symbole standardmäßig entfernt. Sie können in Steam zum Beta-Zweig „Debuggen“ wechseln (suchen Sie in Ihrer Bibliothek nach Proton, Eigenschaften... -> BETAS -> „Debuggen“ auswählen) oder ohne Strippen erstellen (siehe Abschnitt „Builds debuggen“).
Die Symbole werden über die begleitenden .debug
Dateien bereitgestellt, die möglicherweise explizit von den Debugging-Tools geladen werden müssen. Für GDB gibt es ein Hilfsskript wine/tools/gdbinit.py
(Quelle), das den Befehl load-symbol-files
(oder kurz lsf
) bereitstellt, der die Symbole für alle zugeordneten Dateien lädt.
Tipps zum Debuggen finden Sie unter docs/DEBUGGING.md.
compile_commands.json
Zur Verwendung mit clangd LSP-Server und ähnlichen Tools.
Projekte, die mit cmake oder meson (z. B. vkd3d-proton) erstellt wurden, werden automatisch mit compile_commands.json
geliefert. Für Autotools (z. B. Wine) müssen Sie den Build mit --enable-bear
konfigurieren, der Bear zum Erstellen der Kompilierungsdatenbank verwendet. Es ist nicht standardmäßig aktiviert, da es den Build etwas langsamer macht.
Das Build-System sammelt alle erstellten „compile_commands.json“-Dateien in einem Build-Unterverzeichnis mit dem Namen compile_commands/
.
Die Pfade werden so übersetzt, dass sie auf die echte Quelle verweisen (dh nicht auf die rsynced-Kopie). Für Dinge wie die automatisch generierte config.h
kann es jedoch immer noch vom Build-Verzeichnis abhängen, und für Wine kann es von Vorteil sein, tools/make_requests
in Ihren Quellverzeichnissen auszuführen, da diese Änderungen nicht festgeschrieben werden.
Anschließend können Sie Ihren Editor auf verschiedene Arten so konfigurieren, dass er diese Datei für clangd verwendet:
compile_commands.json
angeben.clangd
Datei, z.B 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 kann zur Laufzeit optimiert werden, um die Ausführung bestimmter Spiele zu unterstützen. Der Steam-Client legt einige Optionen für bekannte Spiele mithilfe der Variablen STEAM_COMPAT_CONFIG
fest. Sie können diese Optionen mithilfe der unten beschriebenen Umgebungsvariablen überschreiben.
Der beste Weg, diese Umgebungsüberschreibungen für alle Spiele festzulegen, besteht darin, user_settings.sample.py
in user_settings.py
umzubenennen und es entsprechend zu ändern. Diese Datei befindet sich im Proton-Installationsverzeichnis Ihrer Steam-Bibliothek (häufig ~/.steam/steam/steamapps/common/Proton #.#
).
Wenn Sie die Laufzeitkonfiguration für ein bestimmtes Spiel ändern möchten, können Sie die Set Launch Options
festlegen“ im Properties
des Spiels im Steam-Client verwenden. Legen Sie die Variable fest, gefolgt von %command%
. Geben Sie beispielsweise „ PROTON_USE_WINED3D=1 %command%
“ ein, um den OpenGL-basierten wined3d-Renderer anstelle des Vulkan-basierten DXVK-Renderers zu verwenden.
Um eine Option zu aktivieren, setzen Sie die Variable auf einen Wert ungleich 0
. Um eine Option zu deaktivieren, setzen Sie die Variable auf 0
. Um die Standardkonfiguration von Steam zu verwenden, geben Sie die Variable überhaupt nicht an.
Alle unten aufgeführten Optionen sind Laufzeitoptionen. Sie bewirken keine dauerhaften Änderungen am Wine-Präfix. Durch Entfernen der Option wird das vorherige Verhalten wiederhergestellt.
Kompatible Konfigurationszeichenfolge | Umgebungsvariable | Beschreibung |
---|---|---|
PROTON_LOG | Praktische Methode zum Speichern eines nützlichen Debug-Protokolls in $PROTON_LOG_DIR/steam-$APPID.log . Auf 1 setzen, um die Standardprotokollierung zu aktivieren, oder auf eine Zeichenfolge festlegen, die an die standardmäßigen WINEDEBUG Kanäle angehängt wird. | |
PROTON_LOG_DIR | Protokolldateien in das angegebene Verzeichnis ausgeben. Standardmäßig wird Ihr Home-Verzeichnis verwendet. | |
PROTON_WAIT_ATTACH | Warten Sie, bis ein Debugger eine Verbindung zu „steam.exe“ herstellt, bevor Sie den Spielvorgang starten. Um beim Start eine Verbindung zum Spielprozess herzustellen, sollten Debugger so eingestellt sein, dass sie untergeordneten Prozessen folgen. | |
PROTON_CRASH_REPORT_DIR | Schreiben Sie Absturzprotokolle in dieses Verzeichnis. Bereinigt alte Protokolle nicht und verbraucht daher eventuell Ihren gesamten Speicherplatz. | |
wined3d | PROTON_USE_WINED3D | Verwenden Sie OpenGL-basiertes wined3d anstelle von Vulkan-basiertem DXVK für d3d11, d3d10 und d3d9. |
nod3d11 | PROTON_NO_D3D11 | Deaktivieren Sie d3d11.dll für d3d11-Spiele, die auf d3d9 zurückgreifen und besser damit laufen können. |
nod3d10 | PROTON_NO_D3D10 | Deaktivieren Sie d3d10.dll und dxgi.dll für d3d10-Spiele, die auf d3d9 zurückgreifen und besser damit laufen können. |
dxvkd3d8 | PROTON_DXVK_D3D8 | Verwenden Sie d3d8.dll von DXVK. |
noesync | PROTON_NO_ESYNC | Verwenden Sie keine EventFD-basierten In-Process-Synchronisierungsprimitive. |
nofsync | PROTON_NO_FSYNC | Verwenden Sie keine Futex-basierten In-Process-Synchronisationsprimitive. (Auf Systemen ohne FUTEX_WAIT_MULTIPLE -Unterstützung automatisch deaktiviert.) |
noxim | PROTON_NO_XIM | Standardmäßig aktiviert. Versuchen Sie nicht, die XIM-Unterstützung (X Input Methods) zu verwenden. Es ist bekannt, dass die XIM-Unterstützung bei libx11 älter als Version 1.7 zu Abstürzen führt. |
disablenvapi | PROTON_DISABLE_NVAPI | Deaktivieren Sie die NVAPI-GPU-Unterstützungsbibliothek von NVIDIA. |
nativevulkanloader | Verwenden Sie den mit dem Spiel gelieferten Vulkan-Loader anstelle des integrierten Vulkan-Loaders von Proton. Dadurch wird die VR-Unterstützung unterbrochen, ist jedoch für einige Spiele erforderlich. | |
forcelgadd | PROTON_FORCE_LARGE_ADDRESS_AWARE | Erzwingen Sie, dass Wine das LARGE_ADDRESS_AWARE-Flag für alle ausführbaren Dateien aktiviert. Standardmäßig aktiviert. |
heapdelayfree | PROTON_HEAP_DELAY_FREE | Verzögern Sie die Freigabe von Speicher, um Fehler bei der Verwendung nach dem Freigeben der Anwendung zu umgehen. |
gamedrive | PROTON_SET_GAME_DRIVE | Erstellen Sie ein Laufwerk S:, das auf die Steam-Bibliothek verweist, die das Spiel enthält. |
noforcelgadd | Forcelgadd deaktivieren. Wenn sowohl this als auch forcelgadd gesetzt sind, gewinnt „Enabled“. | |
oldglstr | PROTON_OLD_GL_STRING | Legen Sie einige Treiberüberschreibungen fest, um die Länge der GL-Erweiterungszeichenfolge für alte Spiele zu begrenzen, die bei sehr langen Erweiterungszeichenfolgen abstürzen. |
vkd3dfl12 | Erzwingen Sie die Direct3D 12-Funktionsebene auf 12, unabhängig von der Treiberunterstützung. | |
vkd3dbindlesstb | Fügen Sie force_bindless_texel_buffer in VKD3D_CONFIG ein. | |
nomfdxgiman | WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER | Aktivieren Sie den Hack, um Videoprobleme in einigen Spielen aufgrund unvollständiger IMFDXGIDeviceManager-Unterstützung zu umgehen. |
noopwr | WINE_DISABLE_VULKAN_OPWR | Aktivieren Sie den Hack, um das Rendern anderer Prozessfenster von Vulkan zu deaktivieren, was manchmal zu Problemen auf Wayland führt, weil der Blit einen Frame hinterherhinkt. |
hidenvgpu | PROTON_HIDE_NVIDIA_GPU | Erzwingen Sie, dass Nvidia-GPUs immer als AMD-GPUs gemeldet werden. Einige Spiele erfordern dies, wenn sie auf die Nvidia-Treiberfunktionalität nur für Windows angewiesen sind. Siehe auch die nvapiHack-Konfiguration von DXVK, die nur die Berichterstellung von Direct3D betrifft. |
WINE_FULLSCREEN_INTEGER_SCALING | Aktivieren Sie den Ganzzahl-Skalierungsmodus, um beim Hochskalieren scharfe Pixel zu erhalten. | |
cmdlineappend: | Hängen Sie die Zeichenfolge nach dem Doppelpunkt als Argument an den Spielbefehl an. Kann mehrfach angegeben werden. Trennen Sie Kommas und Backslashes mit einem Backslash. | |
xalia | PROTON_USE_XALIA | Aktivieren Sie Xalia, ein Programm, das für einige Tastatur-/Mausschnittstellen eine Gamepad-Benutzeroberfläche hinzufügen kann. |
seccomp | PROTON_USE_SECCOMP | Hinweis: In Proton 5.13 veraltet. Aktivieren Sie in älteren Versionen den seccomp-bpf-Filter, um native Systemaufrufe zu emulieren, was für die Funktion einiger DRM-Schutzmaßnahmen erforderlich ist. |
d9vk | PROTON_USE_D9VK | Hinweis: In Proton 5.0 veraltet. Verwenden Sie in älteren Versionen Vulkan-basiertes DXVK anstelle von OpenGL-basiertem wined3d für d3d9. |