Valve 基于 Wine 深度定制的游戏兼容层。本文区分官方 Proton、GE 扩展与游戏平台运行环境;Wayland、HDR、DLL 升级和帧生成均需要版本、驱动及游戏支持。
Proton 的技术栈:图形转译四件套#
Proton 在 Wine 基础上深度集成了以下核心组件:
graph TD
GAME["Windows Game"]
DXVK["DXVK — D3D 9/10/11 → Vulkan"]
VKD3D["VKD3D-Proton — D3D 12 → Vulkan"]
NVAPI["DXVK-NVAPI — DLSS / RTX / Reflex"]
FAUDIO["FAudio — XAudio2 音频"]
VULKAN["Vulkan Driver"]
GPU["Linux GPU"]
GAME -->|D3D9/10/11| DXVK
GAME -->|D3D12| VKD3D
GAME -->|NVAPI| NVAPI
GAME -->|XAudio2| FAUDIO
DXVK --> VULKAN
VKD3D --> VULKAN
NVAPI --> VULKAN
VULKAN --> GPUDXVK — D3D 9/10/11 → Vulkan
DXVK 是 Proton 处理多种 Direct3D 图形调用的重要组件。相对 WineD3D 的不同实现路径,它在某些游戏上可改善:
- 更低的 CPU draw call 开销
- 更精确的 GPU 内存管理
- 现代 GPU 异步计算能力
VKD3D-Proton — D3D 12 → Vulkan
Valve + CodeWeavers 共同维护。通过该 Proton 路径运行的 D3D12 游戏(如《赛博朋克 2077》《艾伦·维克 2》)依赖此组件。DXR 支持还取决于 VKD3D-Proton、驱动、GPU 扩展与游戏。
DXVK-NVAPI — NVIDIA 专属翻译
将 NVIDIA NVAPI 调用翻译为 Linux 对应接口,使 DLSS、RTX 光追、Reflex 低延迟 在 Proton 下可用。NVAPI、DLSS、光追与 Reflex 各有不同条件;DXVK-NVAPI 不是让任意 GPU 获得 NVIDIA 专属功能的通用开关。按组件版本的驱动要求和游戏支持核对,不以一个通用驱动下限概括全部能力。
FAudio — XAudio2 音频
Windows 游戏使用 XAudio2 进行音频处理,FAudio 是其开源重实现。
Proton 版本体系#
官方 Proton(Steam 内置)
下表编号系列是源材料采用的版本举例,不报告最新稳定版;应在 Steam 中记录实际选择的确切版本。
| 版本 | 适用场景 |
|---|---|
| Proton Experimental | 较快更新的修复渠道,适合针对具体回归测试 |
| Proton Hotfix | 特定高热度游戏的紧急修复 |
| Proton 10.x | 固定编号的发行系列,按目标游戏测试 |
| Proton 9.x | 旧编号版,部分老旧游戏的兼容性更好 |
社区增强版
| 版本 | 特点 | 适用场景 |
|---|---|---|
| Proton-GE (GloriousEggroll) | 内置 Media Foundation 解码、最新 DXVK/VKD3D、社区补丁 | 过场动画黑屏、新游戏、非 Steam 游戏 |
| Proton-CachyOS | 社区构建,架构等级与补丁取决于具体发行资产 | 先核对 CPU 指令要求和该构建的支持条件,不保证更快 |
Proton-GE 核心增强
Proton-GE 某些版本提供的扩展(按所选 release 核对):
├── 游戏专项媒体/解码兼容修复(不保证所有视频可播放)
├── FSR 4 自动升级(PROTON_FSR4_UPGRADE=1)
├── DLSS 自动升级(PROTON_DLSS_UPGRADE=1)
├── XeSS 2 自动升级(PROTON_XESS_UPGRADE=1)
├── 帧生成相关组件/修复(需游戏、GPU、驱动支持)
├── 集成功能可能随版本增删(旧教程变量不等于当前支持)
└── 游戏专项修复;EAC/BattlEye 仍须游戏方支持与服务策略允许启动参数与环境变量#
在 Steam 游戏属性的启动选项中设置,格式为 VARIABLE=value %command%。
图形与性能
# 强制使用 WineD3D (OpenGL 回退)
PROTON_USE_WINED3D=1 %command%
# 禁用 D3D11 / D3D12(排查崩溃)
PROTON_NO_D3D11=1 %command%
PROTON_NO_D3D12=1 %command%
# AMD FSR 1.0 超分辨率
WINE_FULLSCREEN_FSR=1 %command%
# FSR 4 自动升级(Proton-GE,RDNA4 GPU)
PROTON_FSR4_UPGRADE=1 %command%
# RDNA3 的旧独立开关已在核验时的 GE README 标为无效。
# 支持的 RDNA3 同样使用 PROTON_FSR4_UPGRADE;仍须兼容 GPU/驱动/游戏。
# DLSS 自动升级到最新版本(Proton-GE)
PROTON_DLSS_UPGRADE=1 %command%
# XeSS 2 自动升级(Proton-GE,Intel GPU)
PROTON_XESS_UPGRADE=1 %command%
# GameMode 自动优化
gamemoderun %command%
# MangoHud 性能叠加层
mangohud %command%显示与 HDR
# 原生 Wayland:仅适用于明确支持该变量的 runner 构建
PROTON_ENABLE_WAYLAND=1 %command%
# HDR:还需 compositor/WSI、驱动、游戏与图形转换组件整条链路支持
DXVK_HDR=1 ENABLE_HDR_WSI=1 %command%
# FSR 4 指示器(左上角水印,验证 FSR 4 生效)
PROTON_FSR4_INDICATOR=1 %command%
# DLSS 指示器(左下角水印,验证 DLSS 生效)
PROTON_DLSS_INDICATOR=1 %command%NVIDIA 专用
# 隐藏 NVIDIA GPU 身份(部分游戏检测 GPU 后崩溃)
PROTON_HIDE_NVIDIA_GPU=1 %command%
# 禁用 NVAPI
PROTON_DISABLE_NVAPI=1 %command%调试
# 生成详细日志到 ~/steam-<APPID>.log
PROTON_LOG=1 %command%
# 旧版 Proton:禁用 esync;核验时官方 README 标注在 Proton 11.0 已过时
PROTON_NO_ESYNC=1 %command%
# 禁用 fsync
PROTON_NO_FSYNC=1 %command%Proton 脱离 Steam 独立使用#
完整工作流:通过 umu 配置非 Steam 游戏
GE 官方明确:Steam 外运行非 Steam 游戏只支持通过 umu 提供完整 Proton runtime/container 环境。直接调用解压目录中的 proton run 可能缺失运行库与容器环境,不能当作受支持的一般方案。带 umu 集成的管理器也需要确认实际后端,不能仅凭名字判断。
下面假定 umu-run 已按发行版方式安装,GE-Proton 的固定版本已解压到用户拥有的目录;<version> 是待替换的版本占位符。NixOS 通过项目配置安装工具,不照搬其他发行版的包管理命令。
# 第一步:为游戏准备独立的 Wine Prefix 与固定 Proton 路径。
prefix_path="$HOME/Games/MyCustomGame"
proton_path="$HOME/.local/share/Steam/compatibilitytools.d/GE-Proton<version>"
mkdir -p "$prefix_path"
# 第二步:初始化,后续使用同一组 WINEPREFIX/PROTONPATH。
WINEPREFIX="$prefix_path" PROTONPATH="$proton_path" \
GAMEID=umu-default umu-run ""
# 第三步:仅在应用要求和日志指向缺失时安装依赖。
WINEPREFIX="$prefix_path" PROTONPATH="$proton_path" \
GAMEID=umu-default umu-run winetricks vcrun2022
# 第四步:运行已核对来源的安装器。
WINEPREFIX="$prefix_path" PROTONPATH="$proton_path" \
GAMEID=umu-default umu-run "$HOME/Downloads/GameSetup.exe"
# 第五步:运行这个 Wine Prefix 中已安装的程序。
WINEPREFIX="$prefix_path" PROTONPATH="$proton_path" \
GAMEID=umu-default umu-run "$prefix_path/drive_c/Program Files/Game/Game.exe"GAMEID 可按 umu 数据库为目标游戏选择,以应用对应 protonfixes;umu-default 是不指定专项游戏身份的教学值,不保证得到特定修复。STORE 同样应按来源填写。自动选择 PROTONPATH=GE-Proton 可以下载动态版本,但不能把这种模式记为固定可复现。
一键启动脚本
脚本复用的是 umu 的运行环境,不从目录名字排序中猜测“最新 Proton”。下列脚本保留独立前缀、固定 runner 与参数转发:
#!/usr/bin/env bash
# Usage: umu-game <prefix-path> <proton-path> <exe-path> [args...]
set -euo pipefail
if (( $# < 3 )); then
printf '%s\n' 'Usage: umu-game <prefix-path> <proton-path> <exe-path> [args...]' >&2
exit 2
fi
prefix_path=$1
proton_path=$2
shift 2
command -v umu-run >/dev/null || {
printf '%s\n' 'umu-run is not available; install it through your system configuration.' >&2
exit 1
}
WINEPREFIX="$prefix_path" PROTONPATH="$proton_path" \
GAMEID="${GAMEID:-umu-default}" exec umu-run "$@"保存后按实际路径运行。prefix-path 在 umu 这里是 Wine Prefix 本身;不要把 Steam compatdata 的父目录当作同一种路径。
umu-game "$HOME/Games/MyGame" \
"$HOME/.local/share/Steam/compatibilitytools.d/GE-Proton<version>" \
"$HOME/Games/MyGame/drive_c/Program Files/Game/Game.exe"上述命令与脚本仅为内容示例,本次编辑没有运行它们。
前缀管理与配置定制#
查看和管理 Steam 游戏的 Prefix
Steam 的每个库都有自己的 steamapps/compatdata/<APPID>/;实际 Wine Prefix 通常在其 pfx/ 子目录。STEAM_COMPAT_DATA_PATH 指向 Proton 管理的兼容数据父目录,WINEPREFIX 指向 Wine Prefix,两者不能混写。路径还可能因 Flatpak Steam、额外库或非 Steam 快捷方式而不同。
# 这是常见本机布局的示例,不代表全部 Steam 库。
ls "$HOME/.local/share/Steam/steamapps/compatdata/"
protontricks -l
protontricks <APPID> winecfg
protontricks <APPID> vcrun2022
protontricks <APPID> regeditWINETRICKS_RUN_AS_ROOT 若被某版本支持,是绕过以 Linux root 运行时的保护,不是 Windows 管理员模式。不要为了程序权限问题启用它,也不要使用 sudo 启动 Wine/Proton;以普通用户处理正确前缀、文件权限和应用要求。
如果确需重建,先关闭 Steam/游戏相关进程,确认存档、云同步与第三方授权备份,再把整个兼容数据目录改名保留。以下 <APPID> 与库路径必须先替换确认:
compat_path="$HOME/.local/share/Steam/steamapps/compatdata/<APPID>"
mv -- "$compat_path" "${compat_path}.backup-$(date +%Y%m%d-%H%M%S)"再次启动可能重建兼容数据,但未同步存档或应用状态不会凭空恢复。先验证新目录,再决定旧备份保留期限。
自定义非 Steam 游戏的 Prefix 配置
对 umu 管理的游戏,用同一 runner 的配置工具,例如通过其 winetricks 入口打开 winecfg;不要让宿主另一个 Wine 版本无意更新这个前缀。
WINEPREFIX="$HOME/Games/MyGame" \
PROTONPATH="$HOME/.local/share/Steam/compatibilitytools.d/GE-Proton<version>" \
GAMEID=umu-default umu-run winetricks winecfg在 Applications 中设置所需 Windows 版本报告。只改注册表 ProductName 文本不等于切换 Wine 的模拟版本或 API 行为。
DXVK HUD 可作为运行线索:
DXVK_HUD=fps,gpuload,version WINEPREFIX="$HOME/Games/MyGame" \
PROTONPATH="$HOME/.local/share/Steam/compatibilitytools.d/GE-Proton<version>" \
GAMEID=umu-default umu-run "$HOME/Games/MyGame/drive_c/Game.exe"需要配置文件时,用真实 DXVK 版本支持的键,将 DXVK_CONFIG_FILE 指向应用可访问的文件;HUD 出现不证明全部图形特性或整场游戏性能已经通过验证。
Steam 游戏的 per-game 配置
在游戏属性 → 启动选项中组合多个变量:
# 组合示例:仅在各组件分别验证后使用,不代表自动启用帧生成
PROTON_ENABLE_WAYLAND=1 DXVK_HDR=1 ENABLE_HDR_WSI=1 \
PROTON_DLSS_UPGRADE=1 mangohud gamemoderun %command%
# 调试示例:旧版本同步开关与 WineD3D 回退,不是禁用全部加速;先逐个测试
PROTON_LOG=1 PROTON_NO_ESYNC=1 PROTON_NO_FSYNC=1 \
PROTON_USE_WINED3D=1 %command%将非 Steam 游戏添加到 Steam 库
通过 Steam 客户端:库 → 添加游戏 → 添加非 Steam 游戏 → 选择 .exe。然后在属性中:
- 兼容性 → 强制使用特定 Proton 版本
- 启动选项 → 填入所需的
PROTON_*变量 +%command% - Steam 会自动为它创建
compatdata/<快捷方式标识>/pfx/(具体标识与布局以实际库为准)的独立 Prefix
安装 Proton-GE#
Steam 版从 GE 官方 Releases 选择明确版本和对应架构资产,核对其校验值/来源后解压到当前 Steam 安装的 compatibilitytools.d/。路径因本机包、Flatpak Steam 和发行版布局而异,不应盲目复制另一个系统的目录。
# 假定归档已下载并完成校验;<version> 必须替换为选定版本。
mkdir -p "$HOME/.local/share/Steam/compatibilitytools.d/"
tar -xf "$HOME/Downloads/GE-Proton<version>.tar.gz" \
-C "$HOME/.local/share/Steam/compatibilitytools.d/"重启 Steam 后,在游戏属性的兼容性选择中核对实际 runner。若使用 ProtonUp-Qt,也应确认目标 Steam 安装、下载版本与目录;它是管理工具,不是性能保证。NixOS 可以把 GE 包交给锁定的 nixpkgs 与 Steam 模块,避免与手工目录中同名版本混淆。Steam 外使用遵循前述 umu 支持范围。
兼容性参考#
ProtonDB 评级
ProtonDB 是社区驱动的 Proton 兼容性数据库:
| 评级 | 含义 |
|---|---|
| Platinum | 开箱即用 |
| Gold | 需微小调整 |
| Silver | 可运行但有问题 |
| Bronze | 勉强可玩 |
| Borked | 完全无法运行 |
Steam Deck 认证
Valve 的认证针对 Steam Deck 的硬件、软件与交互条件。它提供参考,但不能保证不同桌面 Linux 的 GPU、驱动、输入、显示和第三方启动器都可用;还应查看具体认证原因与当前游戏版本。
系统优化建议
- 内核与同步:先确认实际 runner 使用什么同步路径。NTSYNC 的设备、权限与构建支持需分别检查,不能只按内核主版本选择。
- 驱动:核对所用 DXVK/VKD3D-Proton 和游戏要求;NVIDIA 专有驱动、AMD/Intel Mesa 的版本与位宽分别确认,不给一套永久适用的最低数字。
- GameMode/MangoHud:通过发行版或 Nix 配置安装,先验证工具可用,再在游戏启动栏使用
gamemoderun %command%或mangohud %command%。 - 内存映射:读取
vm.max_map_count并结合失败日志确认是否耗尽;不要无条件设置超大值。确有需要时按发行版/游戏的当前证据选择参数,并记录旧值和回滚方式。 - Shader 预缓存:按 Steam、驱动和游戏现状测试冷/热启动差别;缓存不等于所有运行中着色器编译都消失。
启动选项中的 %command% 是 Steam 占位符,不是可以直接粘贴到普通终端的 Bash 程序。每次只改一个条件,记录 runner、驱动、场景、帧时间与回退结果。
版本边界:核验时 GE README 已将 PROTON_FSR4_RDNA3_UPGRADE 标为过时且无效果;适配的 RDNA3 也使用 PROTON_FSR4_UPGRADE。Valve 当前 README 将 PROTON_NO_ESYNC 标为在 Proton 11.0 过时。旧版本教程中的变量仍可用于理解历史行为,但应以所选发行版的 README 为准;媒体、Wayland、HDR、XeSS 与其他扩展不能由一个变量推断已经生效。
来源与核验边界#
以下参考定义相关机制与支持范围。安装、构建、激活、前缀状态与实际应用行为需要按目标环境分别核验;示例命令没有附带任何主机运行成功的结论。
参考与延伸
根据技术笔记重新整理,示例使用通用名称。