web-dev-qa-db-fra.com

Erreur lors de l'exécution du jeu Steam Play via la ligne de commande (Proton)

Steam a récemment publié Steam Play, qui utilise sa fourchette de Wine hébergée par Steam, appelée Proton ( GitHub ) pour nous permettre de jouer à notre bibliothèque de jeux complète sous Linux. Il crée des préfixes wine pour tous vos jeux qui ne possèdent pas encore de port Linux et fonctionne beaucoup mieux que wine.

J'essaie de lancer Supreme Commander - Forged Alliance (ID d'application Steam: 9420) et de le jouer sur son client multijoueur non officiel, FAF. Le jeu fonctionnait auparavant avec Wine, mais présente maintenant un certain nombre de problèmes (par exemple, le mode plein écran ne fonctionne pas et la forte tendance au fond noir en mode fenêtré). Mais cela fonctionne avec Proton.

Ce que j'essaie de faire ici, c'est d'exécuter ce jeu Steam spécifique via un terminal, et non via l'interface graphique de Steam.

Mon intention n'est pas de contourner Steam DRM, ce qui ne permettrait probablement pas d'exécuter les jeux via un terminal, mais de l'exécuter avec des arguments dynamiques. Cela permettra de configurer des matchs multijoueurs. Cela sera appliqué à d'autres jeux à l'avenir.


Mais je rencontre des problèmes lors de l'exécution dans le 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

Je reçois une fenêtre d'erreur: "Erreur de chargement de l'application P: 0000065615" et la fermeture me ramène simplement au terminal sans sortie supplémentaire. J'ai expérimenté d'autres jeux:

  1. Age of Empires 2 HD échoue, mais avec une fenêtre de message d'erreur beaucoup plus détaillée indiquant que Steam doit être en cours d'exécution, mais j'avais Steam en cours d'exécution à ce moment-là (et cela fonctionnerait si je cliquais sur le bouton de lecture dans Steam).

  2. Bannerman : il n'y a pas de message du tout et encore moins terminal verbeux.

  3. Complexe Shadow Remastered obtient n écran de chargement du je , dure environ deux secondes, puis se bloque avec une erreur:

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

Donc, aucun jeu ne semble fonctionner correctement avec cette méthode.


Peut-être que du potentiel ici 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"

mais cette méthode échoue à la dernière commande avec cette fenêtre d'erreur:

Erreur de chargement d'application P: 0000065434

ainsi que quelques sorties de terminal:

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

alors maintenant nous en savons plus sur la question. il semble que malgré le fonctionnement de Steam et que toutes les mesures soient prises pour lui faire savoir où se trouve Steam, il ne le trouve pas.

J'ai également essayé la même chose depuis le dossier Proton avec le même résultat.


Certains nouveaux potentiels ici UPDATE du 3/10/2018 :

l'astuce qu'il mentionne est la création d'un petit python script 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

faire cela produit le même message d'erreur:

Erreur de chargement d'application P: 0000065434


TL; DR: Comment exécuter un jeu Windows Steam (qui s'exécute via Proton sous Linux) à partir du terminal.

7
tatsu

J'ai trouvé la solution grâce à l'aide d'aeikum sur le github à protons Steam:

https://www.youtube.com/watch?v=c5K7QmK-Xas (mis à jour le 12/12/2019) https://github.com/tatsujb/installFAFscript

0
tatsu

Voici une expérience qui peut vous aider à obtenir la réponse. Pour plus de commodité, je ferai référence à l'emplacement par défaut de votre bibliothèque Steam par $Steam (la valeur par défaut est ~/.local/share/Steam/). Proton est installé par défaut sur $Steam/steamapps/common/Proton 3.7, je l'appellerai $PROTON.

Donc, quand j'ai essayé de lancer The Witcher , Steam a lancé cette commande:

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

$Steam a des barres obliques inverses au lieu de barres obliques, car il s’agit d’un chemin Windows. En outre, il définit quelque chose comme 70 variables d’environnement (liées à Wine, Steam, divers matériels/pilotes, bibliothèques, etc.). Une seule variable, WINESERVERSOCKET, fait référence au serveur de vin démarré pour cette instance. Si j'omettais cette variable et utilisais tout le reste, je pourrais démarrer le jeu à partir de la ligne de commande.

Pas:

  1. Remplacez $PROTON/dist/bin/wine-preloader par un script wrapper qui enregistre l'environnement quelque part:

    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"
    

    Le script est essentiellement ceci:

    #! /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 "$@"
    

    Il enregistre l'environnement, à l'exception de WINESERVERSOCKET, dans ~/env, de la commande à exécuter et des arguments dans ~/cmd et exécute le fichier avec les arguments fournis. Il utilise ASCII caractères null pour tout séparer, car les variables d'environnement réelles peuvent contenir des nouvelles lignes.

    Notez que je sauvegarde la commande avec -orig ajouté pour plus de commodité.

  2. Exécutez le jeu à partir de l'interface graphique de Steam. Le script wrapper va créer ces fichiers.

  3. Vous pouvez charger l'environnement et exécuter la commande à partir de ces fichiers. En bash

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

    -d '' indique ici à bash que les fichiers utilisent le caractère ASCII null en tant que délimiteur.

Cela suffisait pour The Witcher à courir pour moi. Toutes ces variables d'environnement ne seront probablement pas nécessaires. Je vous laisse le soin de tester ceux qui ne le sont pas.


Bien sûr, tout cela pourrait être complètement inutile. En regardant les options de ligne de commande de Steam, nous avons:

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

Et quand j'ai couru:

Steam -applaunch 20900 foo bar

la commande Wine était:

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

Donc, Steam a passé foo et bar comme arguments de la partie. C'est peut-être tout ce dont vous avez besoin.

1
muru