web-dev-qa-db-ja.com

コマンドライン経由でSteam Playゲームを実行する際のエラー(プロトン)

最近SteamはSteam Playをリリースしました。これは、Proton( GitHub )というSteamがホストするWineのフォークを使用して、Linuxで完全なゲームライブラリをプレイできるようにします。まだLinuxポートを持っていないすべてのゲームにwineprefixを作成し、wineよりもはるかにうまく機能します。

Supreme Commander-Forged Alliance(Steam App ID:9420)を実行して、非公式のマルチプレイヤークライアントFAFでプレイしようとしています。このゲームはかつてWineで機能していましたが、現在では多くの問題があります(たとえば、フルスクリーンが機能せず、ウィンドウが黒画面になる傾向が高い)。しかし、Protonでは機能します。

私がここでやろうとしているのは、この特定のSteamゲームをSteamのGUIではなく端末で実行することです

私の意図はSteam DRMを回避することではありません。SteamDRMはターミナルを介してゲームを実行することはおそらく達成できませんが、動的な引数を使用して実行します。これにより、マルチプレイヤーマッチを設定できます。これは将来的に他のゲームにも適用されます。


しかし、ターミナルで実行すると問題が発生します。

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

エラーウィンドウが表示されます:「アプリケーションロードエラーP:0000065615」。これを閉じると、余分な出力なしでターミナルに戻ります。私は他のゲームを試しました:

  1. Age of Empires 2 HDは失敗しますが、Steamを実行する必要があることを示すより詳細なエラーメッセージウィンドウが表示されますが、その時点でSteamを実行していました(そしてSteamで再生ボタンをクリックすると実行されます)。

  2. Bannerman:メッセージはまったくなく、端末の詳細はさらに少なくなります。

  3. Shadow Complex Remasteredゲームの実際のローダー画面 を取得し、約2秒間実行した後、エラーでクラッシュします:

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

そのため、この方法ではゲームが正常に実行されないようです。


おそらくいくつかの可能性 ここ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"

しかし、このメソッドはこのエラーウィンドウで最後のコマンドで失敗します:

アプリケーションロードエラーP:0000065434

また、いくつかの端末出力:

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

そのため、この問題について詳しく知ることができました。 Steamが実行されているにも関わらず、Steamがどこにあるかを知らせるためのあらゆる手段はSteamを見つけられないようです。

私も同じ結果をプロトンフォルダー内から同じことを試みました。


いくつかのnew潜在的な ここUPDATE 3/10/2018

彼が言及するトリックは、小さなpythonスクリプト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

これを行うと、同じエラーメッセージが表示されます。

アプリケーションロードエラーP:0000065434


TL; DR:ターミナルからWindows Steamゲーム(Linux上のProton経由で実行することを管理する)を実行する方法。

7
tatsu

Steamプロトンgithubのaeikumの助けのおかげで解決策を見つけました。

https://www.youtube.com/watch?v=c5K7QmK-Xas(2019年3月12日更新)https://github.com/tatsujb/installFAFscript

0
tatsu

答えを得るのに役立つかもしれない実験があります。便宜上、デフォルトのSteamライブラリの場所を$Steam(デフォルトは~/.local/share/Steam/)と呼びます。プロトンはデフォルトで$Steam/steamapps/common/Proton 3.7にインストールされます。これを$PROTONと呼びます。

したがって、The Witcherを実行しようとすると、Steamは次のコマンドを実行しました。

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

$Steamには、Windowsパスであるため、スラッシュではなくバックスラッシュがあります。さらに、70個の環境変数(Wine、Steam、さまざまなハードウェア/ドライバー、ライブラリなどに関連)のようなものを設定します。単一の変数WINESERVERSOCKETは、このインスタンスに対して開始されたワインサーバーを参照していました。この変数を省略し、残りをすべて使用した場合、コマンドラインからゲームを開始できます。

手順:

  1. $PROTON/dist/bin/wine-preloaderを、環境をどこかに保存するラッパースクリプトに置き換えます。

    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"
    

    スクリプトは基本的にこれです:

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

    WINESERVERSOCKET~/env、実行するコマンド、および~/cmdの引数を除く環境を保存し、指定された引数で実際のファイルを実行します。実際の環境変数には改行が含まれている可能性があるため、ASCII null文字を使用してすべてを区切ります。

    便宜上、-origを追加してコマンドを保存していることに注意してください。

  2. Steam GUIからゲームを実行します。ラッパースクリプトはこれらのファイルを作成します。

  3. 環境をロードし、これらのファイルからコマンドを実行できます。バッシュ

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

    ここの-d ''は、bashがASCII null文字を区切り文字として使用することを示しています。

ウィッチャーが私のために走るにはこれで十分でした。これらの環境変数はすべて、おそらく必要ないでしょう。どちらをテストするかはあなたに任せます。


もちろん、これらはすべて完全に不要な場合があります。 Steamの コマンドラインオプション を見ると、次のものがあります。

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

そして、私が走ったとき:

Steam -applaunch 20900 foo bar

wineコマンドは:

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

したがって、Steamはfooおよびbarをゲームの引数として渡しました。必要なのはこれだけです。

1
muru