Недавно Пар выпустил Паровую Игру, которая использует их ветвление Вина, размещенного Паром под названием Протон (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" и закрывающий это просто возвращает меня терминалу без дополнительного вывода. Я экспериментировал с другими играми:
Сбои Age of Empires 2 HD, но с намного большим количеством подробного пара утверждения окна сообщения об ошибке должны работать, но у меня был Пар, работающий в то время (и он работал бы, если бы я нажал кнопку воспроизведения в Паре).
Знаменосец: нет никакого сообщения в весь и еще меньше подробного терминала.
Теневой Обновленный Комплекс получает фактический экран загрузчика игры, работает в течение приблизительно двух секунд, затем отказывает с ошибкой:
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) от терминала.
Я нашел решение благодаря некоторой справке aeikum на паровом протоне GitHub:
https://www.youtube.com/watch? v=zQkiy8lK20o (обновил 12.03.2019) , https://github.com/tatsujb/installFAFscript
Вот эксперимент, который может помочь Вам получить ответ. Для удобства я обращусь к Вашему местоположению библиотеки 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
упомянутый винный сервер, запущенный для этого экземпляра. Если бы я опустил эту переменную и использовал все остальные, то я мог бы запустить игру с командной строки.
Шаги:
Замена $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
добавленный для удобства.
Выполните игру от Пара GUI. Сценарий обертки создаст эти файлы.
Можно загрузить среду и выполнить команду из этих файлов. В ударе
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
как аргументы игре. Это могло бы быть всем, в чем Вы нуждаетесь.