OFFSET偏移
← 文章目录OFFSET / FIELD NOTESNO. 151

Proton:游戏运行环境

区分 Steam、官方 Proton、GE 与 umu,并按游戏管理运行器和前缀。

所在专题Proton 游戏、部署与排错 ↗
约 23 分钟阅读开始阅读

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 --> GPU

DXVK — 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> regedit

WINETRICKS_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。然后在属性中:

  1. 兼容性 → 强制使用特定 Proton 版本
  2. 启动选项 → 填入所需的 PROTON_* 变量 + %command%
  3. 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 与其他扩展不能由一个变量推断已经生效。

来源与核验边界#

以下参考定义相关机制与支持范围。安装、构建、激活、前缀状态与实际应用行为需要按目标环境分别核验;示例命令没有附带任何主机运行成功的结论。

参考与延伸

  1. 官方 Proton README ↗
  2. GE-Proton README ↗
  3. umu-launcher 与运行方法 ↗
  4. umu-run 手册 ↗
  5. Protontricks 上游 ↗
  6. ProtonDB ↗

根据技术笔记重新整理,示例使用通用名称。

沿专题继续阅读

Proton 游戏、部署与排错

  1. 01umu、Wine 与 Proton:看懂兼容层,再选 Bottles 运行器
  2. 02Proton:游戏运行环境
  3. 03NixOS 中的 Wine 与游戏环境
  4. 04Wine 与 Proton 排错
  5. 05Wine 与 Proton 配置边界
CONTINUE READING / 下一篇Bottles:运行器与应用环境

通过管理器维护依赖、前缀和恢复点,同时核对 Flatpak 的实际权限。