Proton是一款与 Steam 客户端配合使用的工具,它允许 Windows 独有的游戏在 Linux 操作系统上运行。它使用 Wine 来促进这一点。
大多数用户应该使用 Steam 客户端本身提供的 Proton。请参阅此 Steam 社区帖子了解更多详细信息。
提供源代码是为了使高级用户能够更改 Proton。例如,某些用户可能希望使用具有特定标题的不同版本的 Wine。
变更日志可在我们的 wiki 上找到。
通过克隆 https://github.com/ValveSoftware/Proton 并查看您想要的分支来获取 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 设置。请参阅您的发行版文档以获取设置说明(例如 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>
强制使用兼容的引擎。
您可以使用--enable-cache
标志启用 ccache。这会将您的$CCACHE_DIR
或$HOME/.ccache
挂载到容器内。
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>
可用于使用 Proton SDK 映像的自定义版本进行构建。
检查--help
了解其他配置选项。
注意:如果正在使用SELinux ,Proton 构建容器可能无法访问您的用户文件。这是由 SELinux 的文件系统标签引起的。您可以将--relabel-volumes
开关传递给configure,以使容器引擎重新标记其绑定安装并允许从容器内访问这些文件。与系统目录一起使用时这可能很危险。请谨慎操作并参阅容器引擎手册。
make
重要的制作目标:
make install
- 将 Proton 安装到用户的 Steam 目录中,有关详细信息,请参阅本地安装 Proton 部分。
make redist
- 创建一个可复制到~/.steam/root/compatibilitytools.d/
的重新分发版本 ( redist/
)。
make deploy
- 创建部署构建 ( deploy/
)。这是我们通过 Steamworks 向 Steam 用户部署 Proton 的方法。
make module=<module> module
- 构建指定 wine 模块的 32 位和 64 位版本。这允许在一个模块上进行快速迭代。这个目标只有在构建 Proton 后才有用。
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 设置的 Steam Play 页面中选择。 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 中的“调试”beta 分支(在库中搜索 Proton,属性... -> BETAS -> 选择“调试”)或在不剥离的情况下进行构建(请参阅“调试构建”部分)。
这些符号是通过随附的.debug
文件提供的,这些文件可能需要由调试工具显式加载。对于 GDB,有一个帮助程序脚本wine/tools/gdbinit.py
(来源),它提供了load-symbol-files
(或简称lsf
)命令,该命令加载所有映射文件的符号。
有关调试的提示,请参阅 docs/DEBUGGING.md。
compile_commands.json
与 clangd LSP 服务器和类似工具一起使用。
使用 cmake 或介子(例如 vkd3d-proton)构建的项目自动附带compile_commands.json
。对于自动工具(例如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
并进行适当修改。该文件位于 Steam 库的 Proton 安装目录中(通常~/.steam/steam/steamapps/common/Proton #.#
)。
如果您想要更改特定游戏的运行时配置,可以使用 Steam 客户端中游戏Properties
对话框中的Set Launch Options
设置。设置变量,后跟%command%
。例如,输入“ PROTON_USE_WINED3D=1 %command%
”以使用基于 OpenGL 的 wined3d 渲染器,而不是基于 Vulkan 的 DXVK 渲染器。
要启用选项,请将变量设置为非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 | 对于 d3d11、d3d10 和 d3d9,使用基于 OpenGL 的 wined3d 而不是基于 Vulkan 的 DXVK。 |
nod3d11 | PROTON_NO_D3D11 | 禁用d3d11.dll ,对于 d3d11 游戏,可以回退到 d3d9 并运行得更好。 |
nod3d10 | PROTON_NO_D3D10 | 禁用d3d10.dll 和dxgi.dll ,对于 d3d10 游戏,它们可以回退到 d3d9 并运行得更好。 |
dxvkd3d8 | PROTON_DXVK_D3D8 | 使用 DXVK 的d3d8.dll 。 |
noesync | PROTON_NO_ESYNC | 不要使用基于 eventfd 的进程内同步原语。 |
nofsync | PROTON_NO_FSYNC | 不要使用基于 futex 的进程内同步原语。 (在没有FUTEX_WAIT_MULTIPLE 支持的系统上自动禁用。) |
noxim | PROTON_NO_XIM | 默认启用。不要尝试使用 XIM(X 输入法)支持。已知 XIM 支持会导致版本 1.7 之前的 libx11 崩溃。 |
disablenvapi | PROTON_DISABLE_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 | 启用 hack 来解决某些游戏中由于 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: | 将冒号后面的字符串作为参数附加到游戏命令中。可以指定多次。用反斜杠转义逗号和反斜杠。 | |
xalia | PROTON_USE_XALIA | 启用 Xalia,这是一个可以为某些键盘/鼠标接口添加游戏手柄 UI 的程序。 |
seccomp | PROTON_USE_SECCOMP | 注意:在 Proton 5.13 中已废弃。在旧版本中,启用 seccomp-bpf 过滤器来模拟本机系统调用,这是某些 DRM 保护发挥作用所必需的。 |
d9vk | PROTON_USE_D9VK | 注意:在 Proton 5.0 中已废弃。在旧版本中,对于 d3d9,使用基于 Vulkan 的 DXVK 而不是基于 OpenGL 的 wined3d。 |