Steam Proton

Материал из ALT Linux Wiki
Версия от 22:09, 6 января 2024; IgorN (обсуждение | вклад) (Добавлено про необходимость наличия поддержки Vulkan 1.3.)

Описание

Proton (SteamPlay) — слой совместимости для запуска Windows-программ, ориентированный на запуск компьютерных игр. Предлагается в качестве опции-инструмента в клиенте Steam для бесшовного запуска игр из библиотеки пользователя. В качестве составного произведения распространяется под лицензией 3-clause BSD.

  • Является ответвлением Wine, развиваемым компанией Valve. Основные отличия от Wine:
    • В качестве транслятора вызовов Direct3D (DirectX) в Vulkan задействует DXVK и vkd3d-proton.
      • На момент 2024 года требуется видеокарта с аппаратной поддержкой Vulkan 1.3 и актуальные драйвера, поддерживающие новейшие Vulkan-расширения и версии протокола Wayland. На старом оборудовании (видеокарты десятилетней давности и старее) и устаревшей пакетной базе (платформа 9 и старее) работоспособность затруднена или отсутствует.
    • Реализована 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 для всех других продуктов.
Altlinux steam proton.png

Для применения изменений необходимо перезапустить клиент Steam. После перезапуска появится возможность устанавливать Windows-игры и запускать их. Proton будет автоматически загружен при попытке запуска любой Windows-игры из библиотеки.

Altlinux steam proton кнопка установки игры.png


Использование версий

Пользователям предлагается следующий набор версий-сборок:

    • Proton <номер версии> — стабильные версии, использующие в качестве основы стабильную версию Wine с переносом отдельных изменений из ветки разработки. В клиенте Steam по умолчанию предлагается крайняя стабильная версия.
    • Proton Experimental — версия со свежайшими изменениями из ветки разработки.
    • Proton Hotfix — версия с экстренными, экспериментальными и адресными исправлениями. Используется в исключительных случаях.

Версию Proton можно переключить глобально или для каждой игры отдельно. Глобальный переключатель:

Altlinux steam proton глобальный переключатель.png

Пример для отдельной игры. Чтобы появился список для выбора версий, необходимо отметить пункт "Принудительно использовать выбранный инструмент совместимости Steam Play":

Altlinux steam proton локальный переключатель.png

Кроме официальных сборок, существуют варианты от сообщества. Среди них можно выделить следующие:

    • proton-ge-custom — можно использовать из клиента Steam так же, как обычный Proton.
    • PortProton — отдельная обёртка-приложение, независящая от клиента Steam. Позволяет запускать программы вне библиотеки Steam без специфичных манипуляций.


Особенности структуры каталогов Steam Proton

Примечание: Для понимания материала крайне желательно иметь представление об основах использования Wine.


Примечание: Пути указаны относительно каталога steamapps, расположенного по умолчанию.


  • Версии 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.

Результат:

Altlinux steam proton окно установки обёртки.png

Важно отметить, что подобные установщики ожидают обнаружить файлы игры в границах префикса, но в структуре каталогов 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

Результат:

Altlinux steam proton winecfg.png

Пример запуска «Установка/удаление программ» (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
Altlinux steam proton uninstaller.png

Пример запуска редактора реестра (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
Altlinux steam proton regedit.png

Пример запуска Диспетчера задач (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
Altlinux steam proton taskmgr.png


Пример запуска сторонних игр в 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
Altlinux steam proton установка konung 2.png

По запуску есть особенность. Если запускать исполняемый файл напрямую, то игра не запустится, но если её стартовать с файла-ярлыка (.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


Altlinux steam proton konung 2 меню.png