BumblebeeでWindowsゲーム用Steamを実行する方法は?

BumblebeeでWindowsゲーム用Steamを実行する方法は?

ここではひどい組み合わせについて話しています。Optirun/Primusrun + PlayonLinux + スチームこれにより、ラッパーオーバーライドラッパーオーバーライドラッパーが作成されます。 (primus / optirunはplayonlinuxを呼び出し、これは複数のラッパースクリプトを介してwineを呼び出し、再びsteamを呼び出して最終的にゲーム実行可能ファイルを呼び出します。)

そしていいえ、うまくいきません。

私の場合、問題のゲームはオーディオサーフィン(名前の最初の項目)。もちろん、他のゲーム(Skyrimなど)も同じように機能することに興味があります。

事実

私はゲームが成功すると確信しています。しかし、NVIDIAカードにはありません。
私は次のような愚かなテストを行いました。

  1. Bumblebeeデーモンの状態を確認してください。
    systemctl status bumblebeed
    CGroupラインを観察してください。

    Cグループ:/system.slice/bumblebeed.service
                  └─809 /usr/sbin/bumblebeed

  2. Bumblebeeでglxgearを実行する
    primusrun glxgears

  3. 実行中にglxgearsBumblebeeをもう一度確認してください。
    systemctl status bumblebeed

    Cグループ:/system.slice/bumblebeed.service├─809
                  /usr/sbin/bumblebeed└─3707
                  Xorg:8 -config /etc/bumblebee/xorg.conf.nvidia -configdir ...

    glxgears予想通り、nvidiaカードで実行されているbumblebeeによって作成されたXサーバーインスタンスがあります。

  4. 停止しglxgearsてもう一度確認してください。 X.orgインスタンスが消えた。

  5. 今始めましょうスチームゲーム渡すprimusrun
    primusrun /usr/share/playonlinux/playonlinux --run "Steam" -applaunch 12900

  6. そしてBumblebeeの状態を確認してください。ステップ1に戻ってXorgサブキーはありません。 (これを行うときは、メニューだけでなく常にゲーム内にいる必要があります。)

プログラムがグラフィックカードを使用しない場合、Xorgインスタンスは作成されませんが、optirunはWorgを何らかの形でインスタンス化するのでprimusrunを使用します。

私もそうだった止めるゲームがまだ実行中であることを確認するためのバンブルビーデーモン(これをしないでください!プログラムがnvidiaカードで実行されている場合は、ウィンドウを停止させるだけでなくGPUも停止します)

推測する

はい。ゲームはBumblebeeで実行されません。しかし、問題は何ですか?

これは、ラッパーの1つがどこかで新しいプロセスを作成して返すためです。primusrunがターゲットプロセスにアクセスできないようにします。しかし、誰の責任ですか?
playonlinuxで使用されるいくつかのラッパーの1つですか?それともスチーム?

それともこれより深いかもしれません。AudiosurfがOpenGLをまったく使用しない場合はどうなりますか?当然じゃない出身地しかし、ワインはDirectX呼び出しをOpenGL呼び出しに変換しませんか?


これらの悲観的な仮定を取り除いて、primusrunを呼び出す前に実行可能ファイルにできるだけ近づけなければならないと思います。理想的な状況はこれですprimusrun wine game.exe

ではどうすればいいですか?

まあ、まず「プログラムを実行する前にコマンドを実行」をしました。様々な種類図のようにplayonlinux設定ウィンドウの「タブ」この行:

このボックスを使用して、ショートカットにコマンドプレフィックスを追加できます。これは、NvidiaとIntelグラフィックカードを搭載したノートブックに便利です。たとえば、特定のゲームを開始する前にプレフィックスprimusrunまたはoptirunを使用する必要があります。

しかし、これは完全に話すことができないことがわかりました

PlayonLinuxのソースコードを少し調べた後、次のようなものが見つかりました。

if [ -e "$HOME/.PlayOnLinux/configurations/pre_shortcut/$NAME" ]; then source "$HOME/.PlayOnLinux/configurations/pre_shortcut/$NAME" fi exec ./playonlinux-bash "$HOME/.PlayOnLinux/shortcuts/$NAME" "$@"

この$HOME/.PlayOnLinux/configurations/pre_shortcut/$NAMEファイルには、「プログラムを実行する前に実行するコマンド」フィールドが格納されます。ご覧のとおり、このファイルはsourcedです。これは多くのことができることを意味します。今後execプログラムを実行するには(コマンドの最後の行になります)〜のようにあなたはそれを実行しています。

だからこの箱に包装紙を呼ぶのはprimusrun空気を叩くのと同じ

しかしさらに、私はその中に実際の.exeファイルが続く関数へ$HOME/.PlayOnLinux/shortcuts/$NAMEの呼び出しが含まれているという事実も発見しましたPOL_Wine。これは、POLで使用されるラッパーチェーンとして理解されます。

下の音符

詳しく説明すると、話題からはずれたことがわかりますが、実際に意味するのは、この質問にはまだLinuxでデフォルトで使用できないSteamゲームが含まれており、同じ問題がある可能性があることです。ここで質問を変えてみてください(単に「あなたはできます」と答えないでください)これAudiosurfで動作するようにハッキングしてください。」):

  • primusrun/を使用すると、別のnvidiaカードでゲームが実行されないのはなぜですかoptirun
  • この問題を解決するにはどうすればよいですか?

答え1

2回目の質問にお答えします。この問題を解決するにはどうすればよいですか?

私たちが望むのは、optirun / primusrunプレフィックスを使用してPlayonLinuxを介してSteamを実行することです。 Steamを介して実行するすべてのゲームもこのように自動的に実行されます。

私たちは必ず行かなければなりません。/usr/share/playonlinux/lib/

そこにファイルがあり、wine.lib私たちはそれを編集します。

重要:問題が発生した場合に備えて、このファイルのバックアップを作成してください。

このファイルにはという関数がありますPOL_Wine ()

基本的に、この関数で私たちが変えたいのは、PlayonLinuxを介してアプリケーションが実行されるたびにワインが実行される方法です。

したがって、この関数ではワインを呼び出すすべての部分を見つける必要があります。wine "$@"お気に入りのテキストエディタでCtrl + Fを使用してファイルを見つけます。私のファイルには3回も表示されますwine "$@"

私は各発生前に追加してそのように見えprimusrunましたprimusrun wine "$@"。あなたもそうすることができますが、optirunこれはoptirun -b primusprimusrunにとって効果的でした。

編集したセクションは現在次のとおりです。

if [ "$POL_OS" = "Linux" ] || [ "$POL_OS" = "Mac" ];
then
    if [ "$LOGFILE" = "/dev/null" ]; then
        $BEFORE_WINE $(POL_Config_Read BEFORE_WINE) primusrun wine "$@"  2> >(grep -v menubuilder --line-buffered | tee -a "$WINEPREFIX/playonlinux.log" >&2) > >(tee -a "$WINEPREFIX/playonlinux.log")
        errors=$?
    else
        $BEFORE_WINE $(POL_Config_Read BEFORE_WINE) primusrun wine "$@" 2> >(grep -v menubuilder --line-buffered | tee -a "$LOGFILE" "$WINEPREFIX/playonlinux.log" >&2) > >(tee -a "$LOGFILE" "$WINEPREFIX/playonlinux.log")
        errors=$?
    fi
else
    # FIXME 
    $BEFORE_WINE $(POL_Config_Read BEFORE_WINE) primusrun wine "$@"  2> "$WINEPREFIX/playonlinux.log" > "$WINEPREFIX/playonlinux.log"
    errors=$?
fi

ファイルを保存し、通常どおりPlayonLinuxを起動します。

端末で次のコマンドを実行すると、個々のグラフィックカードが使用されていることをいつでも確認できます。

optirun --status

使用しない場合、出力は次のようになります。

Bumblebee status: Ready (3.2.1). X inactive. Discrete video card is off.

PlayonLinuxアプリケーションでSteamを選択して実行します。起動したら、optirun --statusスタンドアロンカードが有効になっていることを確認してください。

私の出力は次のとおりです

Bumblebee status: Ready (3.2.1). X is PID 26685, 1 applications using bumblebeed.

すごい!今Steamはスタンドアロンカードを使用しています!

それでは、Steamでゲームを実行してみましょう。 1つを選択して正常に実行します(Steamで実行オプションを操作する必要はありません)。

二重チェックoptirun --status。出力は次のようになります。

Bumblebee status: Ready (3.2.1). X is PID 26685, 2 applications using bumblebeed.

ギイ!あなたが始めるゲームもあなたのスタンドアロンカードを使用しています!

これの利点は、SteamだけでなくPlayonLinuxを介して実行しているすべてのアプリケーションで動作することです。

変更を元に戻すには、作成したバックアップファイルを使用するか、追加したプレフィックスを削除してwine.libファイルを保存します。問題がある場合は、上記のさまざまなプレフィックスをすべて試してください。

関連情報