Proton — это инструмент для использования с клиентом Steam, который позволяет запускать игры, эксклюзивные для Windows, в операционной системе Linux. Для облегчения этого используется Wine.
Большинству пользователей следует использовать Proton, предоставляемый самим клиентом Steam. Более подробную информацию можно найти в этом сообщении сообщества Steam.
Исходный код предоставлен для того, чтобы опытные пользователи могли изменять Proton. Например, некоторые пользователи могут захотеть использовать другую версию Wine с определенным названием.
Журнал изменений доступен на нашей вики.
Получите исходный код Proton, клонировав https://github.com/ValveSoftware/Proton и проверив нужную ветку.
Вы можете клонировать последнюю версию Proton в свою систему с помощью этой команды:
git clone --recurse-submodules https://github.com/ValveSoftware/Proton.git proton
Обязательно обновляйте подмодули при переключении между ветками:
git checkout experimental_6.3
git submodule update --init --recursive
Если вы хотите изменить какой-либо подкомпонент, сейчас самое время это сделать. Например, если вы хотите внести изменения в Wine, вам следует применить их к каталогу wine/
.
Большая часть Proton собирается внутри контейнера Proton SDK с очень небольшим количеством зависимостей на стороне хоста.
Вам понадобится установка Docker или Podman. Мы настоятельно рекомендуем установку Podman без root-прав. Инструкции по установке см. в документации вашего дистрибутива (например, Arch Podman/Docker, Debian Podman/Docker).
Мы предоставляем Makefile верхнего уровня, который выполнит за вас большинство команд сборки.
После проверки репозитория и обновления его подмодулей, предполагая, что у вас есть работающая установка Docker или Podman, вы можете собрать и установить Proton с помощью простой команды:
make install
Если в вашей системе сборки отсутствуют зависимости, она быстро выйдет из строя с четким сообщением об ошибке.
После завершения сборки вам может потребоваться перезапустить клиент Steam, чтобы увидеть новый инструмент Proton. Имя инструмента в клиенте Steam будет основано на текущей проверенной ветке Proton. Вы можете переопределить это имя, используя переменную build_name
.
См. make help
для других целей и опций сборки.
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
Запуск configure.sh
создаст Makefile
позволяющий вам собрать Proton. Скрипты проверяют работоспособность контейнеров и сообщают вам, отсутствуют ли какие-либо зависимости на стороне хоста. Вы должны запускать команду из каталога, созданного специально для вашей сборки.
Сценарий конфигурации пытается найти работающую установку Docker или Podman, которую можно использовать, но вы можете принудительно использовать совместимый движок с помощью --container-engine=<executable_name>
.
Вы можете включить ccache с помощью флага --enable-cache
. Это смонтирует ваш $CCACHE_DIR
или $HOME/.ccache
внутри контейнера.
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>
можно использовать для сборки с использованием специальной версии образов Proton SDK.
Проверьте --help
для других параметров конфигурации.
ПРИМЕЧАНИЕ. Если используется SELinux , контейнер сборки Proton может не получить доступ к файлам вашего пользователя. Это вызвано метками файловой системы SELinux. Вы можете передать ключ --relabel-volumes
для настройки, чтобы механизм контейнера перемаркировал свои привязки и разрешил доступ к этим файлам изнутри контейнера. Это может быть опасно при использовании с системными каталогами. Действуйте осторожно и обратитесь к руководству по эксплуатации вашего контейнерного двигателя.
make
Важные цели:
make install
— установите Proton в каталог Steam вашего пользователя, подробности см. в разделе «Локальная установка Proton».
make redist
— создайте распространяемую сборку ( redist/
), которую можно скопировать в ~/.steam/root/compatibilitytools.d/
.
make deploy
— создать сборку развертывания ( deploy/
). Это то, что мы используем для развертывания Proton среди пользователей Steam через Steamworks.
make module=<module> module
— собрать как 32-, так и 64-битные версии указанного модуля Wine. Это позволяет быстро выполнять итерацию на одном модуле. Эта цель полезна только после постройки Протона.
make dxvk
/ make vkd3d-proton
— пересобрать DXVK/vkd3d-proton.
Чтобы предотвратить удаление символов, добавьте UNSTRIPPED_BUILD=1
к вызову make
. Это следует использовать только с чистым каталогом сборки.
Например:
mkdir ../debug-proton-build && cd ../debug-proton-build
../proton/configure.sh --enable-ccache --build-name=debug_build
make UNSTRIPPED_BUILD=1 install
Steam поставляется с несколькими версиями Proton, которые игры будут использовать по умолчанию или которые вы можете выбрать на странице Steam Play в настройках Steam. Steam также поддерживает запуск игр с локальными сборками Proton, которые вы можете установить на свой компьютер.
Чтобы установить локальную сборку Proton в Steam, создайте новый каталог ~/.steam/root/compatibilitytools.d/
с именем инструмента по вашему выбору и поместите каталог, содержащий вашу распространяемую сборку, по этому пути.
Цель make install
выполнит эту задачу за вас, установив сборку Proton в папку Steam для текущего пользователя. Вам придется перезапустить клиент Steam, чтобы он начал использовать новый инструмент.
Правильная локальная установка инструмента должна выглядеть примерно так:
compatibilitytools.d/my_proton/
├── compatibilitytool.vdf
├── filelock.py
├── LICENSE
├── proton
├── proton_dist.tar
├── toolmanifest.vdf
├── user_settings.sample.py
└── version
Чтобы включить локальную сборку в Steam, перейдите в раздел Steam Play в окне «Настройки». Если сборка была установлена правильно, в раскрывающемся списке инструментов совместимости вы должны увидеть «proton-localbuild».
Каждый компонент данного программного обеспечения используется в соответствии с условиями своих лицензий. Подробности смотрите в файлах LICENSE
, а также в файлах LICENSE
, COPYING
и т. д. в каждом подмодуле и каталоге. Если вы распространяете встроенную версию Proton среди других пользователей, вы должны соблюдать условия этих лицензий.
В сборках Proton символы по умолчанию удалены. Вы можете переключиться на «отладочную» бета-ветку в Steam (найдите Proton в своей библиотеке, Свойства... -> БЕТЫ -> выберите «Отладка») или собрать без разбора (см. раздел «Отладочные сборки»).
Символы предоставляются через прилагаемые файлы .debug
, которые, возможно, потребуется явно загрузить с помощью инструментов отладки. Для GDB есть вспомогательный сценарий wine/tools/gdbinit.py
(исходный код), который предоставляет команду load-symbol-files
(или сокращенно lsf
), которая загружает символы для всех сопоставленных файлов.
Советы по отладке см. в docs/DEBUGGING.md.
compile_commands.json
Для использования с сервером clangd LSP и аналогичными инструментами.
Проекты, созданные с использованием cmake или meson (например, vkd3d-proton), автоматически поставляются с compile_commands.json
. Для autotools (например, Wine) вам необходимо настроить сборку с помощью --enable-bear
, который использует Bear для создания базы данных компиляции. По умолчанию он не включен, поскольку это немного замедляет сборку.
Система сборки собирает все созданные файлы compile_commands.json в подкаталоге сборки с именем compile_commands/
.
Пути преобразуются так, чтобы указывать на реальный источник (т. е. не на rsynced копию). Хотя это по-прежнему может зависеть от каталога сборки для таких вещей, как автоматически сгенерированный config.h
, а для Wine может быть полезно запускать tools/make_requests
в ваших исходных каталогах, поскольку эти изменения не фиксируются.
Затем вы можете настроить свой редактор на использование этого файла для clangd несколькими способами:
compile_commands.json
.clangd
, например cd src/proton/wine/
cat > .clangd << EOF
CompileFlags:
CompilationDatabase: ../build/current-dev/compile_commands/wine64/
EOF
ln -s ../build/current-dev/compile_commands/wine64/compile_commands.json .
Proton можно настроить во время выполнения, чтобы обеспечить запуск определенных игр. Клиент Steam устанавливает некоторые параметры для известных игр с помощью переменной STEAM_COMPAT_CONFIG
. Вы можете переопределить эти параметры, используя переменные среды, описанные ниже.
Лучший способ установить эти переопределения среды для всех игр — переименовать user_settings.sample.py
в user_settings.py
и соответствующим образом изменить его. Этот файл находится в каталоге установки Proton в вашей библиотеке Steam (часто ~/.steam/steam/steamapps/common/Proton #.#
).
Если вы хотите изменить конфигурацию среды выполнения для конкретной игры, вы можете использовать параметр Set Launch Options
в диалоговом окне « Properties
игры» в клиенте Steam. Установите переменную, а затем %command%
. Например, введите « PROTON_USE_WINED3D=1 %command%
» для использования средства визуализации wined3d на основе OpenGL вместо средства визуализации DXVK на основе Vulkan.
Чтобы включить опцию, установите для переменной значение, отличное от 0
. Чтобы отключить опцию, установите для переменной значение 0
. Чтобы использовать конфигурацию Steam по умолчанию, вообще не указывайте переменную.
Все нижеперечисленное является параметрами времени выполнения. Они не приводят к необратимым изменениям префикса Wine. Удаление опции вернет предыдущее поведение.
Строка конфигурации совместимости | Переменная среды | Описание |
---|---|---|
PROTON_LOG | Удобный метод сохранения полезного журнала отладки в $PROTON_LOG_DIR/steam-$APPID.log . Установите значение 1 чтобы включить ведение журнала по умолчанию, или установите строку, которая будет добавлена к каналам WINEDEBUG по умолчанию. | |
PROTON_LOG_DIR | Вывод файлов журнала в указанный каталог. По умолчанию это ваш домашний каталог. | |
PROTON_WAIT_ATTACH | Подождите, пока отладчик подключится к Steam.exe, прежде чем запускать игровой процесс. Чтобы прикрепиться к игровому процессу при запуске, отладчики должны быть настроены на отслеживание дочерних процессов. | |
PROTON_CRASH_REPORT_DIR | Записывайте журналы сбоев в этот каталог. Не очищает старые журналы, поэтому со временем может съесть все ваше дисковое пространство. | |
wined3d | PROTON_USE_WINED3D | Используйте wined3d на основе OpenGL вместо DXVK на основе Vulkan для d3d11, d3d10 и d3d9. |
nod3d11 | PROTON_NO_D3D11 | Отключите d3d11.dll для игр d3d11, которые могут вернуться к d3d9 и работать лучше. |
nod3d10 | PROTON_NO_D3D10 | Отключите d3d10.dll и dxgi.dll для игр d3d10, которые могут вернуться к d3d9 и работать лучше. |
dxvkd3d8 | PROTON_DXVK_D3D8 | Используйте d3d8.dll от DXVK. |
noesync | PROTON_NO_ESYNC | Не используйте примитивы внутрипроцессной синхронизации на основе eventfd. |
nofsync | PROTON_NO_FSYNC | Не используйте примитивы внутрипроцессной синхронизации на основе фьютекса. (Автоматически отключается в системах без поддержки FUTEX_WAIT_MULTIPLE .) |
noxim | PROTON_NO_XIM | Включено по умолчанию. Не пытайтесь использовать поддержку XIM (методы ввода X). Известно, что поддержка XIM вызывает сбои в libx11 старше версии 1.7. |
disablenvapi | PROTON_DISABLE_NVAPI | Отключите библиотеку поддержки NVIDIA NVAPI GPU. |
nativevulkanloader | Используйте загрузчик Vulkan, поставляемый вместе с игрой, вместо встроенного загрузчика Vulkan Proton. Это нарушает поддержку VR, но требуется для некоторых игр. | |
forcelgadd | PROTON_FORCE_LARGE_ADDRESS_AWARE | Заставьте Wine включить флаг LARGE_ADDRESS_AWARE для всех исполняемых файлов. Включено по умолчанию. |
heapdelayfree | PROTON_HEAP_DELAY_FREE | Задержите освобождение некоторой памяти, чтобы обойти ошибки использования приложения после освобождения. |
gamedrive | PROTON_SET_GAME_DRIVE | Создайте диск S:, указывающий на библиотеку Steam, содержащую игру. |
noforcelgadd | Отключите принудительное добавление. Если установлены и это, и forcelgadd , преимущество будет включено. | |
oldglstr | PROTON_OLD_GL_STRING | Установите некоторые переопределения драйверов, чтобы ограничить длину строки расширения GL для старых игр, которые вылетают из-за очень длинных строк расширения. |
vkd3dfl12 | Принудительно установите уровень функций Direct3D 12 на 12, независимо от поддержки драйвера. | |
vkd3dbindlesstb | Поместите force_bindless_texel_buffer в VKD3D_CONFIG . | |
nomfdxgiman | WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER | Включите взлом, чтобы обойти проблемы с видео в некоторых играх из-за неполной поддержки IMFDXGIDeviceManager. |
noopwr | WINE_DISABLE_VULKAN_OPWR | Включите хак, чтобы отключить рендеринг окон других процессов Vulkan, что иногда вызывает проблемы в Wayland из-за того, что блит отстает на один кадр. |
hidenvgpu | PROTON_HIDE_NVIDIA_GPU | Принудительно указывать графические процессоры Nvidia всегда как графические процессоры AMD. Это требуется для некоторых игр, если они зависят от функций драйвера Nvidia только для Windows. См. также конфигурацию nvapiHack DXVK, которая влияет только на отчеты из Direct3D. |
WINE_FULLSCREEN_INTEGER_SCALING | Включите режим целочисленного масштабирования, чтобы обеспечить четкость пикселей при масштабировании. | |
cmdlineappend: | Добавьте строку после двоеточия в качестве аргумента команды игры. Может быть указано более одного раза. Экранируйте запятые и обратную косую черту с помощью обратной косой черты. | |
xalia | PROTON_USE_XALIA | Включите Xalia, программу, которая может добавить пользовательский интерфейс геймпада для некоторых интерфейсов клавиатуры/мыши. |
seccomp | PROTON_USE_SECCOMP | Примечание. Устарело в Proton 5.13. В более старых версиях включите фильтр seccomp-bpf для эмуляции собственных системных вызовов, необходимых для работы некоторых средств защиты DRM. |
d9vk | PROTON_USE_D9VK | Примечание. Устарело в Proton 5.0. В более старых версиях используйте DXVK на основе Vulkan вместо wined3d на основе OpenGL для d3d9. |