Steam Proton
Описание
Proton (SteamPlay) — слой совместимости для запуска Windows-программ, ориентированный на запуск компьютерных игр. Предлагается в качестве опции-инструмента в клиенте Steam для бесшовного запуска игр из библиотеки пользователя. В качестве составного произведения распространяется под лицензией 3-clause BSD.
- Является ответвлением Wine, развиваемым компанией Valve. Основные отличия от Wine:
- В качестве транслятора вызовов Direct3D (DirectX) в Vulkan задействует DXVK и vkd3d-proton.
- Реализована python-обёртка и набор библиотек для интеграции в клиент Steam.
- Используются дополнительные патчи, включая расширенную поддержку анти-читов, для достижения работоспособности отдельных игр и игровых устройств.
- Первый выпуск состоялся в 2018 году. Историческая справка: https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561
- Официальный репозиторий: https://github.com/ValveSoftware/Proton
- Официальное руководство пользователя: https://github.com/ValveSoftware/Proton#readme
- Справка по применению опций совместимости: https://github.com/ValveSoftware/Proton#runtime-config-options
- Каталог отчётов пользователей с рецептами запуска различных игр: https://www.protondb.com/
- Полная работоспособность достигнута для многих тысяч игр, но всё ещё остаётся небольшое число тех, что работают с некоторыми проблемами или требуют дополнительных манипуляций. Так же есть незначительное количество полностью неработоспособных, большая часть из которых не работает из-за намеренной блокировки запуска анти-читами.
Первоначальная настройка
Производится через клиент Steam. Для этого перейти в Steam / Настройки / Совместимость и отметить два пункта:
- Включить Steam Play для поддерживаемых продуктов.
- Включить Steam Play для всех других продуктов.
Для применения изменений необходимо перезапустить клиент Steam. После перезапуска появится возможность устанавливать Windows-игры и запускать их. Proton будет автоматически загружен при попытке запуска любой Windows-игры из библиотеки.
Использование версий
Пользователям предлагается следующий набор версий-сборок:
- Proton <номер версии> — стабильные версии, использующие в качестве основы стабильную версию Wine с переносом отдельных изменений из ветки разработки. В клиенте Steam по умолчанию предлагается крайняя стабильная версия.
- Proton Experimental — версия со свежайшими изменениями из ветки разработки.
- Proton Hotfix — версия с экстренными, экспериментальными и адресными исправлениями. Используется в исключительных случаях.
Версию Proton можно переключить глобально или для каждой игры отдельно. Глобальный переключатель:
Пример для отдельной игры. Чтобы появился список для выбора версий, необходимо отметить пункт "Принудительно использовать выбранный инструмент совместимости Steam Play":
Кроме официальных сборок, существуют варианты от сообщества. Среди них можно выделить следующие:
- proton-ge-custom — можно использовать из клиента Steam так же, как обычный Proton.
- PortProton — отдельная обёртка-приложение, независящая от клиента Steam. Позволяет запускать программы вне библиотеки Steam без специфичных манипуляций.
Особенности структуры каталогов Steam Proton
- Версии Proton загружаются в /home/$USER/.local/share/Steam/steamapps/common/.
- Каталог игры со всем содержимым отделён от префикса и располагается в /home/$USER/.local/share/Steam/steamapps/common/.
- Каталог префикса располагается в /home/$USER/.local/share/Steam/steamapps/compatdata/.
- Для каждой игры используется отдельный префикс.
- Префикс создаётся при запуске игры. То есть для появления префикса в ./compatdata игра должна быть запущена хотя бы раз.
- В префиксе по умолчанию создаётся стандартный Windows-пользователь с именем steamuser: ./Steam/steamapps/compatdata/1608450/pfx/drive_c/users/steamuser/.
- В этом каталоге расположены стандартные каталоги Windows-пользователя, включая AppData (Application Data).
- Как правило, здесь хранятся игровые сохранения, файлы конфигурации и подобное.
- Моды из Мастерской (Steam workshop) размещаются в подкаталогах /home/$USER/.local/share/Steam/steamapps/workshop/.
- Некоторые игры могут "потерять" загруженные моды, если каталог steamapps располагается не по умолчанию (на другом разделе).
Использование Proton напрямую без задействования клиента Steam
В Proton реализован механизм прямого запуска тех или иных программ, размещённых в Proton-префиксе, без задействования клиента Steam. Использование напрямую позволяет запускать программы внутри конкретного Proton-префикса, включая штатные Wine-программы. В контексте игр это даёт удобную возможность установить русификатор, моды и подобное, а так же запускать различные инструменты: программу конфигурации, игровой редактор и подобное.
Пример запуска установочного файла OpenGL-обёртки для игры Disciples 2
Расположение префикса игры по умолчанию:
/home/$USER/.local/share/Steam/steamapps/compatdata/1640/
Установочный файл OpenGL-обёртки (DisciplesWrapperV1.90.exe) был размещён в корне префикса:
/home/$USER/.local/share/Steam/steamapps/compatdata/1640/pfx/drive_c/DisciplesWrapperV1.90.exe
Команда на запуск установочного файла:
STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/$USER/.local/share/Steam/ STEAM_COMPAT_DATA_PATH=/home/$USER/.local/share/Steam/steamapps/compatdata/1640 /home/$USER/.local/share/Steam/steamapps/common/Proton\ 8.0/proton run /home/$USER/.local/share/Steam/steamapps/compatdata/1640/pfx/drive_c/DisciplesWrapperV1.90.exe
Из-за длины путей выглядит громоздко и сложно, но на деле команда проста:
- STEAM_COMPAT_CLIENT_INSTALL_PATH — передать этой переменной окружения путь до корневого каталога клиента Steam. В данном случае это /home/$USER/.local/share/Steam/
- STEAM_COMPAT_DATA_PATH — передать путь до Proton-префикса, который создаётся при первом запуске игры. Путь из примера: /home/$USER/.steam/steam/steamapps/compatdata/1640/, где имя каталога с префиксом соответствует ID игры в Steam — 1640.
- /home/$USER/.local/share/Steam/steamapps/common/Proton\ 8.0/proton — путь до python-скрипта proton, с помощью которого производится задействование Proton. Путь будет отличаться в зависимости от установленной версии Proton. В данном случае используется Proton 8.0. Так же стоит отметить, что в имени каталога Proton присутствует пробел, его нужно экранировать обратной косой чертой (\) или экранировать кавычками путь целиком.
- run /home/$USER/.local/share/Steam/steamapps/compatdata/1640/pfx/drive_c/DisciplesWrapperV1.90.exe — команда на запуск указанного исполняемого файла (DisciplesWrapperV1.90.exe) с помощью Proton.
Результат:
Важно отметить, что подобные установщики ожидают обнаружить файлы игры в границах префикса, но в структуре каталогов Steam каталог с игрой располагается вне префикса. В связи с этим, в диалоге выбора пути потребуется указать путь через структуру каталогов Linux.
В некоторых случаях это вызывает проблемы (установщик может отказаться продолжать работу, выведя ошибку). Надёжнее создать в префиксе символическую ссылку на каталог с файлами игры, что позволит установщику получить привычный DOS-путь к файлам игры. Пример расположения точки входа:
"./drive_c/Program Files (x86)/Steam/steamapps/common/Символическая_ссылка_на_каталог_игры"
Пример создания символической ссылки (пробелы и скобки в имени каталогов экранированы обратной косой чертой):
ln -s /home/$USER/.local/share/Steam/steamapps/common/Disciples\ II\ Galleans\ Return /home/$USER/.local/share/Steam/steamapps/compatdata/1640/pfx/drive_c/Program\ Files\ \(x86\)/Steam/steamapps/common/Disciples\ II\ Galleans\ Return
Запуск стандартных Wine-программ в Proton-префиксе
В Proton-префиксе присутствует полный набор программ из стандартного Wine-префикса. Их можно задействовать так же, как это делается для Wine-префикса. Пример запуска winecfg всё в том же префиксе игры Disciples 2:
STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/$USER/.local/share/Steam/ STEAM_COMPAT_DATA_PATH=/home/$USER/.local/share/Steam/steamapps/compatdata/1640 /home/$USER/.local/share/Steam/steamapps/common/Proton\ 8.0/proton run winecfg
Результат:
Пример запуска «Установка/удаление программ» (uninstaller):
STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/$USER/.local/share/Steam/ STEAM_COMPAT_DATA_PATH=/home/$USER/.local/share/Steam/steamapps/compatdata/1640 /home/$USER/.local/share/Steam/steamapps/common/Proton\ 8.0/proton run uninstaller
Пример запуска редактора реестра (regedit):
STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/$USER/.local/share/Steam/ STEAM_COMPAT_DATA_PATH=/home/$USER/.local/share/Steam/steamapps/compatdata/1640 /home/$USER/.local/share/Steam/steamapps/common/Proton\ 8.0/proton run regedit
Пример запуска Диспетчера задач (taskmgr):
STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/$USER/.local/share/Steam/ STEAM_COMPAT_DATA_PATH=/home/$USER/.local/share/Steam/steamapps/compatdata/1640 /home/$USER/.local/share/Steam/steamapps/common/Proton\ 8.0/proton run taskmgr
Пример запуска сторонних игр в Proton-префиксе
Да, это работает. Демонстрация на примере запуска Konung 2. Установка из setup_konung2_russian_2.0.0.3.exe:
STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/$USER/.local/share/Steam/ STEAM_COMPAT_DATA_PATH=/home/$USER/.local/share/Steam/steamapps/compatdata/1640 /home/$USER/.local/share/Steam/steamapps/common/Proton\ 8.0/proton run /home/$USER/.local/share/Steam/steamapps/compatdata/1640/pfx/drive_c/setup_konung2_russian_2.0.0.3.exe
По запуску есть особенность. Если запускать исполняемый файл напрямую, то игра не запустится, но если её стартовать с файла-ярлыка (.lnk), запуск проходит успешно. lnk-файлы хранятся в каталоге ./drive_c/ProgramData/Microsoft/Windows/Start Menu/Programs/. Запуск с lnk-файла (пробелы и скобки экранированы обратной косой чертой):
STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/$USER/.local/share/Steam/ STEAM_COMPAT_DATA_PATH=/home/$USER/.local/share/Steam/steamapps/compatdata/1640 /home/$USER/.local/share/Steam/steamapps/common/Proton\ 8.0/proton run /home/$USER/.local/share/Steam/steamapps/compatdata/1640/pfx/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Programs/Konung\ 2\ -\ Blood\ of\ Titans\ \[GOG\.com\]/Konung\ 2\ -\ Blood\ of\ Titans.lnk