Ошибка на выполняющемся Паре Играет в игру через командную строку (Протон)

Недавно Пар выпустил Паровую Игру, которая использует их ветвление Вина, размещенного Паром под названием Протон (GitHub), чтобы позволить нам играть с нашей полной игровой библиотекой в соответствии с Linux. Это создает wineprefixes для всех Ваших игр, которые уже не имеют порта Linux и работ большой разницей лучше, чем вино.

Я пытаюсь выполнить Верховного главнокомандующего - Созданный Союз (Паровой идентификатор Приложения: 9420) и игра это на ее неофициальном многопользовательском клиенте, FAF. Игра раньше работала с Вином, но теперь имеет много проблем (например, полный экран не работает и высокая тенденция к blackscreen в оконном). Но это действительно работает с Протоном.

Что я пытаюсь сделать, здесь выполняется эта определенная Паровая игра через терминал, не через GUI Пара.

Мое намерение не состоит в том, чтобы обойти Паровое DRM, которое выполнение игр через терминал, вероятно, не выполнило бы так или иначе, но выполнять его с динамическими аргументами. Это позволит настраивать многопользовательские соответствия. Это будет применено к другим играм в будущем.


Но я сталкиваюсь с проблемой при выполнении в терминале:

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

Я получаю окно Error: "Ошибка загрузки приложения P: 0000065615" и закрывающий это просто возвращает меня терминалу без дополнительного вывода. Я экспериментировал с другими играми:

  1. Сбои Age of Empires 2 HD, но с намного большим количеством подробного пара утверждения окна сообщения об ошибке должны работать, но у меня был Пар, работающий в то время (и он работал бы, если бы я нажал кнопку воспроизведения в Паре).

  2. Знаменосец: нет никакого сообщения в весь и еще меньше подробного терминала.

  3. Теневой Обновленный Комплекс получает фактический экран загрузчика игры, работает в течение приблизительно двух секунд, затем отказывает с ошибкой:

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

Таким образом, никакая игра, кажется, не работает успешно с помощью этого метода.


Возможно, некоторый потенциал здесь ОБНОВЛЯЕТ 10.03.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

таким образом, теперь мы знаем больше о проблеме. это кажется несмотря на пар, являющийся рабочим и каждая мера для уведомления его, где пар - это, не находит пара.

Я также попробовал то же самое из протонной папки с тем же результатом.


Некоторый новый потенциал здесь ОБНОВЛЯЕТ 10.03.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) от терминала.

7
задан 4 October 2018 в 00:52

2 ответа

Я нашел решение благодаря некоторой справке aeikum на паровом протоне GitHub:

https://www.youtube.com/watch? v=zQkiy8lK20o (обновил 12.03.2019) , https://github.com/tatsujb/installFAFscript

0
ответ дан 23 November 2019 в 06:55

Вот эксперимент, который может помочь Вам получить ответ. Для удобства я обращусь к Вашему местоположению библиотеки Steam по умолчанию как $STEAM (значение по умолчанию ~/.local/share/Steam/). Протон установлен по умолчанию на $STEAM/steamapps/common/Proton 3.7, Я назову это $PROTON.

Так, когда я пытался выполнить Ведьмака, Пар выполнил эту команду:

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

Где $STEAM имеет обратные косые черты вместо наклонных черт, поскольку это - путь Windows. Кроме того, это установило что-то как 70 переменных среды (связанный с Вином, Паром, различными аппаратными средствами/драйверами, библиотеками, и т.д.). Единственная переменная, 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 для разделения всего, так как фактические переменные среды могут содержать новые строки.

    Обратите внимание, что я сохраняю команду с -orig добавленный для удобства.

  2. Выполните игру от Пара GUI. Сценарий обертки создаст эти файлы.

  3. Можно загрузить среду и выполнить команду из этих файлов. В ударе

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

    -d '' здесь говорит удару, что файлы используют нулевой символ ASCII в качестве разделителя.

Многое было достаточно, чтобы Ведьмак работал за мной. Все те переменные среды, вероятно, не будут необходимы. Я предоставляю Вам право тестировать, которые не являются.


Конечно, все они могли бы быть абсолютно ненужными. Смотря на параметры командной строки Пара, мы имеем:

-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

Таким образом, Пар действительно переходил foo и bar как аргументы игре. Это могло бы быть всем, в чем Вы нуждаетесь.

1
ответ дан 23 November 2019 в 06:55

Другие вопросы по тегам:

Похожие вопросы: