Proton是一种与Steam客户端一起使用的工具,它允许Windows独有的游戏在Linux操作系统上运行。它使用Wine来促进这一点。
大多数用户应该使用Steam客户端本身提供的Proton。请参阅此 Steam 社区帖子,了解更多详情。
提供源代码是为了使高级用户能够更改Proton。例如,一些用户可能希望使用具有不同版本的Wine和特定标题。
更改日志可在我们的维基上找到。
通过克隆 https://github.com/ValveSoftware/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 设置。有关设置说明,请参阅你的发行版的文档(例如 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
配置脚本会尝试发现要使用的工作 Docker 或 Podman 设置,但你可以使用 强制使用 兼容的引擎。
--container-engine=<executable_name>
你可以启用带有标志的ccache。这将安装在容器内或容器内。
--enable-cache
$CCACHE_DIR
$HOME/.ccache
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>可用于使用自定义版本的质子 SDK 映像进行构建。
检查其他配置选项。
--help
注意:如果 SELinux 正在使用中,Proton 构建容器可能无法访问用户的文件。这是由 SELinux 的文件系统标签引起的。你可以传递要配置的开关,以使容器引擎重新标记其绑定装载,并允许从容器内访问这些文件。当与系统目录一起使用时,这可能会很危险。请谨慎操作,并参阅容器引擎的手册。
--relabel-volumes
make
重要制作目标:
make install- 将 Proton 安装到用户的 Steam 目录中,有关详细信息,请参阅 Proton 本地安装部分。
make redist- 创建可复制到 的重新分发版本 ()。
redist/
~/.steam/root/compatibilitytools.d/
make deploy- 创建部署版本 ()。这就是我们通过Steamworks将Proton部署到Steam用户的方法。
deploy/
make module=<module> module- 构建指定 Wine 模块的 32 位和 64 位版本。这允许在一个模块上快速迭代。这个目标只有在构建质子后才有用。
make dxvk/
make vkd3d-proton- 重建DXVK / vkd3d质子。
为了防止符号剥离,请添加到调用中。这应仅与干净的生成目录一起使用。
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 设置的 Steam Play 页面中进行选择。Steam 还支持使用本地版本的 Proton 运行游戏,你可以将这些游戏安装在你的机器上。
要将 Proton 的本地版本安装到 Steam 中,请使用你选择的工具名称创建一个新目录,并将包含可再发行版本的目录放在该路径下。
~/.steam/root/compatibilitytools.d/
目标将为你执行此任务,将Proton构建版本安装到当前用户的Steam文件夹中。你必须重新启动Steam客户端才能使用新工具。
make install
正确的本地工具安装应类似于以下内容:
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”。
该软件的每个组件均根据其许可条款使用。有关详细信息,请参阅此处的文件,以及每个子模块和目录中的 、 等 文件。如果你将 Proton 的构建版本分发给其他用户,则必须遵守这些许可证的条款。
LICENSE
LICENSE
COPYING
默认情况下,质子构建的符号被剥离。你可以在Steam中切换到“调试”beta分支(在库中搜索Proton,属性... ->BETAS ->选择“调试”)或不剥离构建(请参阅调试版本部分)。
这些符号通过随附的文件提供,这些文件可能需要由调试工具显式加载。对于GDB,有一个帮助程序脚本(source it),它提供(或简称)命令,用于加载所有映射文件的符号。
.debug
wine/tools/gdbinit.py
load-symbol-files
lsf
Proton可以在运行时进行调整,以帮助某些游戏运行。Steam 客户端使用该变量为已知游戏设置一些选项。你可以使用下面描述的环境变量覆盖这些选项。
STEAM_COMPAT_CONFIG
为所有游戏设置这些环境覆盖的最佳方法是重命名为 并对其进行适当的修改。此文件位于 Steam 库的 Proton 安装目录中(通常)。
user_settings.sample.py
user_settings.py
~/.steam/steam/steamapps/common/Proton #.#
如果要更改特定游戏的运行时配置,可以使用 Steam 客户端中游戏对话框中的设置。设置变量,后跟 。例如,输入 “” 以使用基于 OpenGL 的 wined3d 渲染器,而不是基于 Vulkan 的 DXVK 渲染器。
Set Launch Options
Properties
%command%
PROTON_USE_WINED3D=1 %command%
要启用某个选项,请将变量设置为非值。要禁用某个选项,请将该变量设置为 。要使用 Steam 的默认配置,请不要指定变量。
0
0
以下所有内容都是运行时选项。它们不会影响对 Wine 前缀的永久更改。删除该选项将恢复到以前的行为。
兼容配置字符串 | 环境变量 | 描述 |
---|---|---|
PROTON_LOG |
将有用的调试日志转储到 的方便方法。设置为 启用默认日志记录,或设置为要追加到默认通道的字符串。$PROTON_LOG_DIR/steam-$APPID.log 1 WINEDEBUG |
|
PROTON_LOG_DIR |
将日志文件输出到指定的目录中。默认为主目录。 | |
PROTON_DUMP_DEBUG_COMMANDS |
运行游戏时,Proton会将该游戏的一些有用的调试脚本写入 .$PROTON_DEBUG_DIR/proton_$USER/ |
|
PROTON_DEBUG_DIR |
默认情况下,质子调试脚本的根目录。/tmp |
|
PROTON_WAIT_ATTACH |
等待调试器附加到 Steam.exe,然后再启动游戏进程。若要在启动时附加到游戏进程,应将调试器设置为遵循子进程。 | |
PROTON_CRASH_REPORT_DIR |
将崩溃日志写入此目录。不会清理旧日志,因此最终可能会占用所有磁盘空间。 | |
wined3d |
PROTON_USE_WINED3D |
对于 d3d11、d3d10 和 d3d9,请使用基于 OpenGL 的 wined3d 而不是基于 Vulkan 的 DXVK。 |
nod3d11 |
PROTON_NO_D3D11 |
禁用 ,用于 d3d11 游戏,这些游戏可以回退到 d3d9 并运行得更好。d3d11.dll |
nod3d10 |
PROTON_NO_D3D10 |
禁用 和 ,用于 d3d10 游戏,这些游戏可以回退到 d3d9 并运行得更好。d3d10.dll dxgi.dll |
noesync |
PROTON_NO_ESYNC |
不要使用基于事件 fd 的进程内同步基元。 |
nofsync |
PROTON_NO_FSYNC |
不要使用基于 futex 的进程内同步原语。(在不受支持的系统上自动禁用。FUTEX_WAIT_MULTIPLE |
noxim |
PROTON_NO_XIM |
默认情况下启用。不要尝试使用 XIM(X 输入法)支持。已知 XIM 支持会导致 libx11 低于版本 1.7 的崩溃。 |
enablenvapi |
PROTON_ENABLE_NVAPI |
启用 NVIDIA 的 NVAPI GPU 支持库。 |
nativevulkanloader |
使用游戏附带的Vulkan加载器,而不是Proton的内置Vulkan加载器。这破坏了VR支持,但一些游戏需要这样做。 | |
forcelgadd |
PROTON_FORCE_LARGE_ADDRESS_AWARE |
强制 Wine 为所有可执行文件启用 LARGE_ADDRESS_AWARE 标志。默认情况下启用。 |
heapdelayfree |
PROTON_HEAP_DELAY_FREE |
延迟释放一些内存,以解决应用程序释放后使用的错误。 |
gamedrive |
PROTON_SET_GAME_DRIVE |
创建一个指向包含游戏的 Steam 库的 S: 驱动器。 |
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 |
启用 hack 以禁用 Vulkan 其他进程窗口渲染,这有时会导致 Wayland 上出现问题,因为 blit 落后一帧。 |
hidenvgpu |
PROTON_HIDE_NVIDIA_GPU |
强制 Nvidia GPU 始终报告为 AMD GPU。如果某些游戏依赖于仅限Windows的Nvidia驱动程序功能,则需要此功能。另请参阅 DXVK 的 nvapiHack 配置,该配置仅影响来自 Direct3D 的报告。 |
WINE_FULLSCREEN_INTEGER_SCALING |
启用整数缩放模式,以便在升级时提供清晰的像素。 | |
cmdlineappend: |
将字符串追加在冒号之后,作为游戏命令的参数。可以多次指定。使用反斜杠对逗号和反斜杠进行转义。 | |
nowritewatch |
PROTON_NO_WRITE_WATCH |
在 ntdll 中禁用对内存写入监视的支持。这是一个非常危险的黑客攻击,只有在你验证游戏可以在没有写入监视的情况下运行时才应应用。这提高了一些非常具体的游戏(例如,基于CoreRT的游戏)的性能。 |
nosteamffmpeg |
PROTON_NO_STEAM_FFMPEG |
忽略随 Steam 一起提供的 ffmpeg。某些视频可能无法播放。 |
seccomp |
PROTON_USE_SECCOMP |
注意:在质子 5.13 中已过时。在旧版本中,启用 seccomp-bpf 筛选器以模拟某些 DRM 保护正常工作所需的本机系统调用。 |
d9vk |
PROTON_USE_D9VK |
注意:在质子 5.0 中已过时。在旧版本中,使用基于Vulkan的DXVK而不是基于OpenGL的wined3d进行d3d9。 |