Proton

Bild des Benutzers NoXPhasma

Proton ermöglicht es Linuxspielern gewisse Steam-Spiele, deren ursprüngliche Plattform lediglich Windows ist, fortan auch unter Linux auszuführen. Eine Liste an offiziell unterstützen Spielen findet ihr unter Offizielle Proton-Spiele oder im Menü links.

Steam Client

Proton (oder auch Steam Play genannt) ist nun im Standard-Steam-Client enthalten, Proton ist auch automatisch aktiv, somit euch Proton für die offiziell unterstützten Titel zur Verfügung. Die einzelnen Spiele auf der stetig anwachsenden Liste von offiziell unterstützten Spielen, lässt sich hier einsehen. Mit einer weiteren Einstellung könnt ihr Proton auch für die gesamte Spiele-Bibliothek erweitern. Hier empfiehlt es sich einen Blick in die ProtonDB (zuvor bekannt als Steam Play Compatibility Report) für die Lauffähigkeit der einzelnen Spiele zu werfen.

Damit stehen euch zahlreiche Windows-Titel unter Linux zur Verfügung. Diese Titel werden von Valve bereits getestet und freigegeben sein. Ein wenig kann man sich das wie die offiziell unterstützten Wine-Portierungen vorstellen. Als Anwender merkt man prinzipiell keinen Unterschied. Im Endeffekt wird die Anzahl der Spiele, die unter Linux lauffähig sind, massiv anwachsen. Optional lässt sich Proton auch für alle nicht offiziell unterstützten Spiele aktivieren.

Zusätzlich gibt es noch ProtonFixes, dass zur Laufzeit Schwierigkeiten je Spiel korrigieren kann.

Technik (Wine)

Proton basiert auf einem angepassten und verbesserten Wine (unter Zusammenarbeit mit CodeWeavers), wined3d für DirectX 9 (Ab Proton 4.11 ist auch D9VK für DirectX 9-Unterstützung per Konfigurationsschalter aktivierbar) und 11 als OpenGL-Implementation, DXVK für DirectX 11 und vkd3d für DirectX 12 und der Multi-Threading-Verbesserung esync unter der eigenen Wine-Distribution Proton zusammengetragen werden. Zudem wird das Steam Play-Konzept auf diese neue Toolchain erweitert.
Die Verbesserungen stehen alle unter Open-Source-Lizenzen und wurden an die entsprechenden Projekte zurückgespielt.

Wer Proton und das neue Steam Play ausprobieren möchte benötigt aktuelle Versionen der Grafikkartentreiber für NVIDIA (NVIDIA 396.51) und AMD (Mesa 18.1.x, für Core-OpenGL braucht es Mesa 18.2) dazu. Genaueres dazu verrät eine Anleitung auf Github.

Wie Wine es auch kann, nutzt Proton in Steam für jedes ausgeführte Spiel, einen eigenen Wine-Prefix. Diesen findet ihr im Verzeichnis eurer Steam-Library unter steamapps/compatdata/$STEAMID/pfx, wobei ihr natürlich die $STEAMID durch die Steam-ID des Spiels ersetzen müsst.

Spiele ohne Steam mit Proton

Ihr könnt Proton auch unabhängig von Steam nutzen. Dafür könnt ihr folgendes Kommando verwenden, wenn ihr zuvor ein temporäres Verzeichnis im Home (oder woanders) anlegt:

mkdir ~/tmp/proton 
cd /zum/spiele/verzeichnis
STEAM_COMPAT_DATA_PATH=~/tmp/proton ~/.local/share/Steam/steamapps/common/Proton\ 3.7/proton run spiel.exe

Konfiguration

Proton lässt sich in den Startoptionen der Spiele in der Bibliothek über Environment Variablen konfigurieren:

Compat config string Environment Variable Type Description
PROTON_LOG int (Seit Proton 3.7-4) Erstellt eine Logdatei beim Starten des Spiels. Die Logdatei befindet sich dann als steam-$APPID.log in eurem Home-Verzeichnis.
PROTON_DUMP_DEBUG_COMMANDS int (Seit Proton 3.7-4) When running a game, Proton will write some useful debug scripts for that game into /tmp/proton_$USER/.
PROTON_DEBUG_DIR str (Seit Proton 3.7-5) Debug script dump directory can be configured with, see PROTON_DUMP_DEBUG_COMMANDS.
wined3d11 PROTON_USE_WINED3D11 int Use OpenGL-based wined3d instead of Vulkan-based DXVK for d3d11. (Depricated since Proton 3.16-2)
wined3d PROTON_USE_WINED3D int Use OpenGL-based wined3d instead of Vulkan-based DXVK for d3d11. (Since Proton 3.16-2)
nod3d11 PROTON_NO_D3D11 int Disable d3d11.dll, for games which can fall back to and run better with d3d9.
nod3d10 PROTON_NO_D3D10 int Disable d3d10.dll and dxgi.dll, for d3d10 games which can fall back to and run better with d3d9. (Since Proton 3.16-7)
noesync PROTON_NO_ESYNC int Do not use eventfd-based in-process synchronization primitives.
nofsync PROTON_NO_FSYNC int Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support.)
forcelgadd PROTON_FORCE_LARGE_ADDRESS_AWARE int Force Wine to enable the LARGE_ADDRESS_AWARE flag for all executables. (Since Proton 3.16-6)
oldglstr PROTON_OLD_GL_STRING int Set some driver overrides to limit the length of the GL extension string, for old games that crash on very long extension strings. (Since Proton 3.16-7)
d9vk PROTON_USE_D9VK int Aktiviert die experimentelle D9VK-Integration. (Seit Proton 4.11)

Bsp:

PROTON_USE_WINED3D11=1 %command%

Einige dieser Variablen lassen sich auch in einer Python Datei als Standard festlegen. Dazu navigiert ihr nach ~/.steam/steam/steamapps/common/Proton 3.7 und benennt die user_settings.sample.py in user_settings.py um. Anschließend lassen sich die Werte auskommentieren und setzen:

#!/usr/bin/env python2.7
 
#to enable these settings, name this file "user_settings.py"
 
user_settings = {
    #logs are saved to $HOME/steam-$STEAM_APP_ID.log, overwriting any previous log with that name
    "WINEDEBUG": "+timestamp,+pid,+tid,+seh,+debugstr,+module",
 
    "DXVK_LOG_LEVEL": "info",
 
    #Enable DXVK's HUD
#    "DXVK_HUD": "devinfo,fps",
 
    #Use wined3d for d3d11 instead of dxvk
#    "PROTON_USE_WINED3D11": "1",
 
    #Disable d3d11 entirely
#    "PROTON_NO_D3D11": "1",
 
    #Disable in-process synchronization primitives
#    "PROTON_NO_ESYNC": "1",
}

GloriousEggroll

Unter Proton GE (Glorious Eggroll) werden in einem Fork aktuellere Wine-Versionen und experimentelle Patches zusammengeführt. Die Entwicklung findet in einem Fork auf Github statt.

Troubleshooting

Archlinux

Spiele bekommen keine Internetverbindung, wenn sie über Proton laufen
  • Proton scheint ein paar Bibliotheken zu benötigen, die steam-native-runtime nicht mitbringt. Die Steam Runtime bringt diese mit. Startet dazu Steam über den Befehl steam-runtime oder wählt Steam (Runtime) aus.
  • Eventuell braucht das Spiel die libgnutls.so in Version 26. Ein Symlink auf die aktuelle Version und ein Vorladen dieser Version bringt meist schon den gewünschten Erfolg. ln -s /usr/lib/libgnutls.so ./libgnutls.so.26
Spiele mit DX11 starten nicht - wine: unimplemented function vulkan-1.dll.vkGetInstanceProcAddr, aborting
  • Proton scheint ein paar Bibliotheken zu benötigen, die steam-native-runtime nicht mitbringt. Die Steam Runtime bringt diese mit. Startet dazu Steam über den Befehl steam-runtime oder wählt Steam (Runtime) aus.
  • Eventuell muss das Paket lib32-vulkan-icd-loader aus dem Repository installiert werden
Application load error x:xxxxxxxx

Wenn manuell ein Prefix angelegt wurde, müssen zusätzlich noch die Dateien aus $XDG_DATA_HOME/Steam/legacycompat in das Prefix kopiert werden: …/pfx/drive_c/Program Files (x86)/Steam/

Screenshots und Videos
ume
Bild des Benutzers ume
Offline
Beigetreten: 23.10.2018
Beiträge: 1

Bei meinem Arch Linux konnte ich den Fehler "wine: unimplemented function vulkan-1.dll.vkGetInstanceProcAddr, aborting" durch die Installation von "lib32-vulkan-icd-loader" beheben.

Lucki
Bild des Benutzers Lucki
Offline
Beigetreten: 04.12.2011
Beiträge: 250

Ich habs mal im Artikel eingetragen. Wenn dir noch mehr auffällt, darfst du das natürlich auch gerne ergänzen.

Mastodon