Fehler beim Ausführen des Steam Play-Spiels über die Befehlszeile (Proton)

7

Kürzlich veröffentlichte Steam Steam Play, das die von Steam gehostete Weingabel Proton ( GitHub ) verwendet, um unsere komplette Spielebibliothek unter Linux spielen zu können. Es erstellt Wineprefixes für alle Ihre Spiele, die noch keinen Linux-Port haben, und funktioniert weitaus besser als Wine.

Ich versuche, Supreme Commander - Forged Alliance (Steam App ID: 9420) auszuführen und auf seinem inoffiziellen Multiplayer-Client FAF zu spielen. Das Spiel funktionierte früher mit Wine, hat aber jetzt eine Reihe von Problemen (z. B. funktioniert der Vollbildmodus nicht und es besteht eine hohe Tendenz zum Schwarzbildschirm in Fenstern). Aber es funktioniert mit Proton.

Ich versuche hier, dieses spezielle Steam-Spiel über das Terminal und nicht über die Steam-GUI auszuführen.

Meine Absicht ist es nicht, Steam DRM zu umgehen, was das Ausführen der Spiele über das Terminal wahrscheinlich sowieso nicht erreichen würde, sondern es mit dynamischen Argumenten auszuführen. Dies ermöglicht das Einrichten von Multiplayer-Matches. Dies wird in Zukunft auf andere Spiele angewendet.


Aber ich habe Probleme beim Laufen im Terminal:

cd ~/.local/share/Steam/steamapps/common/Proton*
STEAM_COMPAT_DATA_PATH=/home/t/.local/share/Steam/steamapps/compatdata/9420 ./proton run /home/t/.local/share/Steam/steamapps/common/Supreme\ Commander\ Forged\ Alliance/bin/SupremeCommander.exe

Ich erhalte ein Fehlerfenster: "Anwendungsladefehler P: 0000065615". Wenn ich dieses Fenster schließe, komme ich einfach ohne zusätzliche Ausgabe zum Terminal zurück. Ich habe mit anderen Spielen experimentiert:

  1. Age of Empires 2 HD schlägt fehl, aber mit einem viel ausführlicheren Fehlermeldungsfenster, das angibt, dass Steam ausgeführt werden muss, wurde Steam zu diesem Zeitpunkt ausgeführt (und es würde ausgeführt, wenn ich in Steam auf die Wiedergabetaste geklickt hätte).

  2. Bannerman : Es gibt überhaupt keine Nachricht und noch weniger ausführlich.

  3. Shadow Complex Remastered erhält einen aktuellen Ladebildschirm des Spiels , läuft etwa zwei Sekunden lang und stürzt dann mit einem Fehler ab:

    CAppInfoCacheReadFromDiskThread took 3 milliseconds to initialize
    CApplicationManagerPopulateThread took 7 milliseconds to initialize (will have waited on CAppInfoCacheReadFromDiskThread)
    

Daher scheint kein Spiel mit dieser Methode erfolgreich zu laufen.


Vielleicht etwas Potenzial hier UPDATE 3/10/2018 :

WINEPREFIX="/home/t/fa-wineprefix/":"/home/t/.local/share/Steam/steamapps/common/Proton 3.7/dist/lib/wine winecfg"
PATH="/home/t/.local/share/Steam/steamapps/common/Proton 3.7/dist/bin/:$PATH"  
export WINEDLLPATH="/home/t/.local/share/Steam/steamapps/common/Proton 3.7/dist/lib64/wine:/home/t/.local/share/Steam/steamapps/common/Proton 3.7/dist/lib/wine"  
export LD_LIBRARY_PATH="/home/t/.local/share/Steam/steamapps/common/Proton 3.7/dist/lib64:/path/to/steam/steamapps/common/Proton 3.7/dist/lib:/usr/lib/steam:/usr/lib32/steam"
WINEPREFIX="/home/t/fa-wineprefix/"  "/home/t/.local/share/Steam/steamapps/common/Proton 3.7/dist/bin/./wine"   "/home/t/.local/share/Steam/steamapps/common/Supreme Commander Forged Alliance/bin/SupremeCommander.exe"

Diese Methode schlägt jedoch beim letzten Befehl mit diesem Fehlerfenster fehl:

Anwendungsladefehler P: 0000065434

sowie einige Terminalausgänge:

001f:err:module:load_builtin_dll failed to load .so lib for builtin L"winebus.sys": libudev.so.0: cannot open shared object file: No such file or directory
001f:err:ntoskrnl:ZwLoadDriver failed to create driver L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\WineBus": c0000142
001f:err:winedevice:create_driver failed to create driver L"WineBus": c0000142
0013:err:service:process_send_command service protocol error - failed to write pipe!
000d:fixme:service:scmdatabase_autostart_services Auto-start service L"WineBus" failed to start: 1114
0009:err:module:load_library somehow failed to load steamclient

Jetzt wissen wir mehr über das Problem. es scheint, obwohl Dampf läuft und jede Maßnahme, um ihn wissen zu lassen, wo Dampf ist, findet er keinen Dampf.

Ich habe das gleiche auch aus dem Protonenordner mit dem gleichen Ergebnis versucht.


Einige neue Potenziale hier UPDATE 3/10/2018 :

Der Trick, den er erwähnt, ist das Erstellen eines kleinen Python-Skripts protonRunner.py:

#!/usr/bin/env python

import os
import sys

home = os.environ["HOME"]
os.environ["STEAM_COMPAT_DATA_PATH"] = home + "/.local/share/Steam/steamapps/compatdata/9420"

run = "run"
exe = "\"" + home + "/.local/share/Steam/steamapps/common/Supreme Commander Forged Alliance/bin/SupremeCommander.exe\""

cmd = "\"" + home + "/.local/share/Steam/steamapps/common/Proton 3.7/proton\" " + run + " " + exe

for arg in sys.argv[1:]:
    cmd += " " + arg

os.system(cmd)

supcomFA.desktop::

[Desktop Entry]
Name=SupremeCommander
Exec=python $HOME/.local/share/Steam/steamapps/common/Proton\ 3.7/protonRunner.py
Icon=/home/t/.local/share/icons/supcom.png
Type=Application
Encoding=UTF-8
Version=1.0
Terminal=true

Dadurch wird die gleiche Fehlermeldung angezeigt:

Anwendungsladefehler P: 0000065434


TL; DR: So führen Sie ein Windows Steam-Spiel (das unter Linux über Proton ausgeführt werden kann) vom Terminal aus aus.

Tatsu
quelle
1
Verwandte und wahrscheinlich hilfreich: chat.stackexchange.com/transcript/message/46882631#46882631
David Foerster
2
Da ich nichts über Steam weiß, habe ich einen Vorschlag, wie Sie möglicherweise Fortschritte erzielen können: Starten Sie das Spiel über Protonen, wie Sie es normalerweise tun würden. Dann mach a ps faux. Untersuchen ProtonSie sorgfältig die Prozesse, die Sie sehen, wie die Dinge beginnen, vielleicht gibt es dort einige nützliche Parameter. Notieren Sie dann die PIDs aller Prozesse. Zum /proc/$PIDund haben einen Blick um die Sachen gibt, vor allem cwd, environmentusw. Sie wollen versuchen , die Umgebung genau einzurichten als Ventil der Fall ist.
Tomáš Pospíšek
3
Zu Ihrer Information: Wenn Sie die Variablen WINEDLLPATHund nicht exportieren LD_LIBRARY_PATHwürden, hätten sie keine Auswirkungen auf den später ausgeführten Befehl wine. Außerdem sollten Sie im Dateipfad nicht sowohl Anführungszeichen als auch Backslashes verwenden. Bevorzugen Sie nur Anführungszeichen: WINEPREFIX="/home/t/fa-wineprefix/" "/home/t/.local/share/Steam/steamapps/common/Proton 3.7/dist/bin/./wine" "/home/t/.local/share/Steam/steamapps/common/Supreme Commander Forged Alliance/bin/SupremeCommander.exe"Außerdem scheint die Zeile "Vielleicht ein gewisses Potenzial hier" mit einem Screenshot des Fehlers zu verknüpfen, den Sie zuvor erhalten haben. Haben Sie einen Fehler mit dem Link gemacht?
Muru
2
@muru hat den Link behoben. Vielen Dank für Ihre Änderungen. Ich bin immer entweder zu unspezifisch oder zu detailliert und überzeichnet. Ich bin nur ein rundum schlechter Schriftsteller. und danke für deinen vorschlag. Ich werde exportheute Abend experimentieren, wenn ich nach Hause komme.
Tatsu
@ Guru hey! Ich habe sowohl den Export als auch das Entfernen der Backslashes sowie die andere Methode, die ich gefunden habe, ausprobiert. Da ich in beiden Fällen immer noch auf den gleichen Fehler stoße, muss ich davon ausgehen, dass dies das Spiel korrekt ausführen würde, aber dieses "Steam not found running" -Ding muss jetzt zum eigentlichen Problem werden. irgendwelche Ideen?
Tatsu

Antworten:

1

Hier ist ein Experiment, das Ihnen helfen kann, die Antwort zu erhalten. Der Einfachheit halber bezeichne ich Ihren Standardspeicherort für die Steam-Bibliothek als $STEAM(der Standard ist ~/.local/share/Steam/). Proton ist standardmäßig installiert $STEAM/steamapps/common/Proton 3.7, ich nenne das $PROTON.

Als ich versuchte, The Witcher auszuführen , führte Steam diesen Befehl aus:

"$PROTON/dist/bin/wine-preloader" "$PROTON/dist/bin/wine" "Z:\$STEAM\steamapps\common\The Witcher Enhanced Edition\System\witcher.exe"

Wo $STEAMhat Backslashes anstelle von Schrägstrichen, da es sich um einen Windows-Pfad handelt. Darüber hinaus wurden etwa 70 Umgebungsvariablen festgelegt (in Bezug auf Wine, Steam, verschiedene Hardware / Treiber, Bibliotheken usw.). Eine einzelne Variable, die WINESERVERSOCKETsich auf den Weinserver bezieht, wurde für diese Instanz gestartet. Wenn ich diese Variable weglasse und den Rest verwende, kann ich das Spiel über die Befehlszeile starten.

Schritte:

  1. Ersetzen Sie $PROTON/dist/bin/wine-preloaderdurch ein Wrapper-Skript, das die Umgebung irgendwo speichert:

    PROTON="$HOME/.local/share/Steam/steamapps/common/Proton 3.7" # adjust to your settings
    mv "$PROTON/dist/bin/wine-preloader" "$PROTON/dist/bin/wine-preloader-orig"
    printf "%s\n" '#! /bin/sh' 'env --null | grep -vz WINESERVERSOCKET > ~/env' > "$PROTON/dist/bin/wine-preloader"
    printf 'exec %q "$@"\n' "$PROTON/dist/bin/wine-preloader-orig" >> "$PROTON/dist/bin/wine-preloader"
    chmod +x "$PROTON/dist/bin/wine-preloader"

    Das Skript ist im Wesentlichen das Folgende:

    #! /bin/sh
    env --null | grep -vz WINESERVERSOCKET= > ~/env
    printf "%s\0" "$0"-orig "$@" > ~/cmd
    exec /home/user/.local/share/Steam/steamapps/common/Proton\ 3.7/dist/bin/wine-preloader-orig "$@"

    Es schont die Umwelt, mit Ausnahme WINESERVERSOCKET, in ~/env, den Befehl auszuführen und Argumente ~/cmdund führt die eigentliche Datei mit den Argumenten zur Verfügung gestellt. Es werden ASCII-Nullzeichen verwendet, um alles zu trennen, da die tatsächlichen Umgebungsvariablen möglicherweise Zeilenumbrüche enthalten.

    Beachten Sie, dass ich den Befehl der Einfachheit halber mit -orighinzugefügt speichere .

  2. Führen Sie das Spiel über die Steam-Benutzeroberfläche aus. Das Wrapper-Skript erstellt diese Dateien.

  3. Sie können die Umgebung laden und den Befehl aus diesen Dateien ausführen. In Bash

    mapfile -d '' -t env < ~/env
    mapfile -d '' -t cmd < ~/cmd
    env "${env[@]}" "${cmd[@]}"

    -d '' Hier wird Bash mitgeteilt, dass die Dateien das ASCII-Nullzeichen als Trennzeichen verwenden.

Das war genug für The Witcher , um für mich zu rennen. Alle diese Umgebungsvariablen werden wahrscheinlich nicht benötigt. Ich überlasse es Ihnen zu testen, welche nicht.


All dies könnte natürlich völlig unnötig sein. Wenn wir uns die Befehlszeilenoptionen von Steam ansehen , haben wir:

-applaunch <appID> [launch parameters]  Launches an Game or Application through Steam.

Und als ich rannte:

steam -applaunch 20900 foo bar

Der Weinbefehl lautete:

"$PROTON/dist/bin/wine" "Z:\$STEAM\steamapps\common\The Witcher Enhanced Edition\System\witcher.exe" foo bar

Also gab Steam weiter foound barals Argumente für das Spiel. Dies könnte alles sein, was Sie brauchen.

muru
quelle
Im Fall des FAF-Clients von downlord funktioniert das Ersetzen "%s"durch steam -applaunch 9420in den Startoptionen fast , aber nicht: FAF legt das Arbeitsverzeichnis fest und versucht, Dateien mit lokalen Pfaden zu laden, aber Steam ändert das Verzeichnis.
Dhardy