A gaming compatibility layer extensively customized by Valve on top of Wine. This article distinguishes official Proton, GE extensions, and gaming-platform runtimes. Wayland, HDR, DLL upgrades, and frame generation all require compatible versions, drivers, and games.
Proton's technology stack: the graphics translation quartet#
Proton deeply integrates the following core components on top of 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 is an important component through which Proton handles several types of Direct3D graphics calls. Compared with WineD3D's different implementation approach, it can improve the following in some games:
- Lower CPU overhead for draw calls
- More precise GPU memory management
- Asynchronous compute capabilities on modern GPUs
VKD3D-Proton — D3D 12 → Vulkan
Jointly maintained by Valve and CodeWeavers. D3D12 games running through this Proton path, such as Cyberpunk 2077 and Alan Wake 2, depend on this component. DXR support also depends on VKD3D-Proton, the driver, GPU extensions, and the game.
DXVK-NVAPI — NVIDIA-specific translation
Translates NVIDIA NVAPI calls into corresponding Linux interfaces, enabling DLSS, RTX ray tracing, and Reflex low latency under Proton. NVAPI, DLSS, ray tracing, and Reflex each have different requirements; DXVK-NVAPI is not a universal switch that gives any GPU NVIDIA-exclusive features. Check the driver requirements for the component version and the game's support, rather than reducing all capabilities to a single minimum driver version.
FAudio — XAudio2 audio
Windows games use XAudio2 for audio processing; FAudio is an open-source reimplementation.
Proton versions#
Official Proton (built into Steam)
The numbered series in the table below are version examples from the source material, not a report of the latest stable release. Record the exact version you actually select in Steam.
| Version | Use case |
|---|---|
| Proton Experimental | A more frequently updated fixes channel, useful for testing specific regressions |
| Proton Hotfix | Emergency fixes for specific high-profile games |
| Proton 10.x | Numbered release series; test with your target game |
| Proton 9.x | Older numbered releases, which offer better compatibility for some older games |
Community-enhanced builds
| Version | Features | Use case |
|---|---|---|
| Proton-GE (GloriousEggroll) | Bundled Media Foundation decoding, recent DXVK/VKD3D, and community patches | Black-screen cutscenes, new games, and non-Steam games |
| Proton-CachyOS | Community builds; architecture levels and patches depend on the specific release asset | Check CPU instruction requirements and the build's support conditions first; better performance is not guaranteed |
Core Proton-GE enhancements
Proton-GE 某些版本提供的扩展(按所选 release 核对):
├── 游戏专项媒体/解码兼容修复(不保证所有视频可播放)
├── FSR 4 自动升级(PROTON_FSR4_UPGRADE=1)
├── DLSS 自动升级(PROTON_DLSS_UPGRADE=1)
├── XeSS 2 自动升级(PROTON_XESS_UPGRADE=1)
├── 帧生成相关组件/修复(需游戏、GPU、驱动支持)
├── 集成功能可能随版本增删(旧教程变量不等于当前支持)
└── 游戏专项修复;EAC/BattlEye 仍须游戏方支持与服务策略允许Launch options and environment variables#
Set these in the launch options under the game's Steam properties, using the format VARIABLE=value %command%.
Graphics and performance
# 强制使用 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%Display and 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-specific options
# 隐藏 NVIDIA GPU 身份(部分游戏检测 GPU 后崩溃)
PROTON_HIDE_NVIDIA_GPU=1 %command%
# 禁用 NVAPI
PROTON_DISABLE_NVAPI=1 %command%Debugging
# 生成详细日志到 ~/steam-<APPID>.log
PROTON_LOG=1 %command%
# 旧版 Proton:禁用 esync;核验时官方 README 标注在 Proton 11.0 已过时
PROTON_NO_ESYNC=1 %command%
# 禁用 fsync
PROTON_NO_FSYNC=1 %command%Using Proton independently of Steam#
Complete workflow: setting up non-Steam games through umu
GE explicitly states that running non-Steam games outside Steam is supported only through umu, which provides the complete Proton runtime/container environment. Calling proton run directly from an extracted directory may omit required runtime libraries and the container environment, and is not a generally supported approach. For managers with umu integration, verify the backend actually in use; the application name alone is not enough.
The following assumes that umu-run has been installed using your distribution's method and that a fixed GE-Proton version has been extracted into a user-owned directory. <version> is a version placeholder to replace. On NixOS, install tools through the project configuration instead of copying package-manager commands from other distributions.
# 第一步:为游戏准备独立的 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"Choose GAMEID from the umu database for the target game to apply its corresponding protonfixes. umu-default is a teaching value that does not specify a particular game identity and does not guarantee any specific fixes. Set STORE according to the game's source as well. Automatic selection with PROTONPATH=GE-Proton can download a changing version, but this mode must not be described as pinned and reproducible.
A one-step launch script
The script reuses umu's runtime instead of guessing the “latest Proton” by sorting directory names. The following retains a separate prefix, a pinned runner, and argument forwarding:
#!/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 "$@"After saving, run it with the actual paths. In umu, prefix-path means the Wine prefix itself; do not treat the parent directory of Steam's compatdata as the same kind of path.
umu-game "$HOME/Games/MyGame" \
"$HOME/.local/share/Steam/compatibilitytools.d/GE-Proton<version>" \
"$HOME/Games/MyGame/drive_c/Program Files/Game/Game.exe"The commands and script above are content examples only; they were not run as part of this edit.
Prefix management and custom configuration#
Viewing and managing Steam game prefixes
Each Steam library has its own steamapps/compatdata/<APPID>/. The actual Wine prefix is usually in its pfx/ subdirectory. STEAM_COMPAT_DATA_PATH points to the parent compatibility-data directory managed by Proton, while WINEPREFIX points to the Wine prefix; the two are not interchangeable. Paths may also differ for Flatpak Steam, additional libraries, or non-Steam shortcuts.
# 这是常见本机布局的示例,不代表全部 Steam 库。
ls "$HOME/.local/share/Steam/steamapps/compatdata/"
protontricks -l
protontricks <APPID> winecfg
protontricks <APPID> vcrun2022
protontricks <APPID> regeditIf supported by a particular version, WINETRICKS_RUN_AS_ROOT bypasses the protection against running as Linux root; it does not enable Windows administrator mode. Do not enable it to solve application-permission problems, and do not start Wine/Proton with sudo. Use a regular user account and address the correct prefix, file permissions, and application requirements.
If you genuinely need to rebuild, first close Steam and game-related processes, verify backups of saves, cloud-sync data, and third-party licenses, then rename the entire compatibility-data directory to preserve it. Replace and verify <APPID> and the library path below first:
compat_path="$HOME/.local/share/Steam/steamapps/compatdata/<APPID>"
mv -- "$compat_path" "${compat_path}.backup-$(date +%Y%m%d-%H%M%S)"Launching again may recreate the compatibility data, but unsynced saves or application state will not reappear on their own. Verify the new directory before deciding how long to keep the old backup.
Customizing prefix configuration for non-Steam games
For games managed by umu, use the configuration tools from the same runner, for example by opening winecfg through its winetricks entry point. Avoid inadvertently letting a different host Wine version update the prefix.
WINEPREFIX="$HOME/Games/MyGame" \
PROTONPATH="$HOME/.local/share/Steam/compatibilitytools.d/GE-Proton<version>" \
GAMEID=umu-default umu-run winetricks winecfgSet the required reported Windows version under Applications. Changing only the registry's ProductName text does not change Wine's emulated version or API behavior.
The DXVK HUD can provide clues about what is running:
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"If you need a configuration file, use keys supported by the actual DXVK version and point DXVK_CONFIG_FILE to a file the application can access. Seeing the HUD does not prove that every graphics feature or performance across an entire play session has been verified.
Per-game configuration for Steam games
Combine multiple variables under game Properties → Launch Options:
# 组合示例:仅在各组件分别验证后使用,不代表自动启用帧生成
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%Adding non-Steam games to the Steam library
In the Steam client: Library → Add a Game → Add a Non-Steam Game → select the .exe. Then, in Properties:
- Compatibility → Force the use of a specific Proton version
- Launch Options → Enter the required
PROTON_*variables +%command% - Steam automatically creates a separate prefix for it at
compatdata/<快捷方式标识>/pfx/(具体标识与布局以实际库为准)
Installing Proton-GE#
For Steam, choose a specific version and matching architecture asset from the official GE Releases. Verify its checksum/provenance, then extract it into compatibilitytools.d/ for the current Steam installation. The path differs between native packages, Flatpak Steam, and distribution layouts; do not blindly copy another system's directory.
# 假定归档已下载并完成校验;<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/"After restarting Steam, verify the actual runner in the game's compatibility properties. If you use ProtonUp-Qt, also check the target Steam installation, downloaded version, and directory. It is a management tool, not a performance guarantee. On NixOS, the GE package can be managed through pinned nixpkgs and the Steam module, avoiding confusion with identically named versions in manually managed directories. For use outside Steam, follow the umu support scope described above.
Compatibility references#
ProtonDB ratings
ProtonDB is a community-driven Proton compatibility database:
| Rating | Meaning |
|---|---|
| Platinum | Works out of the box |
| Gold | Requires minor adjustments |
| Silver | Runs, but has problems |
| Bronze | Barely playable |
| Borked | Does not run at all |
Steam Deck verification
Valve's verification targets the Steam Deck's hardware, software, and interaction conditions. It is a useful reference, but it does not guarantee that a different desktop Linux system's GPU, drivers, input, display, and third-party launchers will all work. Also read the specific reasons for the rating and check the current game version.
System optimization suggestions
- Kernel and synchronization: First establish which synchronization path the actual runner uses. Check NTSYNC device availability, permissions, and build support separately; do not choose based solely on the kernel major version.
- Drivers: Check the requirements of the DXVK/VKD3D-Proton versions and the game you use. Verify the versions and bitness of NVIDIA proprietary drivers or AMD/Intel Mesa separately; no single set of minimum version numbers remains valid forever.
- GameMode/MangoHud: Install through your distribution or Nix configuration, verify that the tools work, then use
gamemoderun %command%ormangohud %command%in the game's launch options. - Memory mappings: Read
vm.max_map_countand inspect failure logs to determine whether the limit is being exhausted; do not unconditionally set an enormous value. If a change is necessary, choose the value using current evidence for the distribution/game, and record the previous value and rollback method. - Shader pre-caching: Test cold-versus-warm startup behavior for your current Steam, driver, and game versions. Caching does not eliminate all shader compilation during gameplay.
%command% in launch options is a Steam placeholder, not a Bash program that can be pasted directly into a normal terminal. Change one condition at a time, recording the runner, driver, test scenario, frame times, and results after reverting.
Version boundaries: At the time of verification, the GE README marked PROTON_FSR4_RDNA3_UPGRADE as obsolete and ineffective; supported RDNA3 hardware also uses PROTON_FSR4_UPGRADE. Valve's current README marks PROTON_NO_ESYNC as obsolete in Proton 11.0. Variables in older tutorials can still help explain historical behavior, but the README for the selected release is authoritative. One variable alone does not establish that media, Wayland, HDR, XeSS, or other extensions are working.
Sources and limits of verification#
The references below define the relevant mechanisms and support scope. Installation, building, activation, prefix state, and actual application behavior must be verified separately in the target environment. The example commands do not establish that they have run successfully on any host.
- Official Proton README
- GE-Proton README
- umu-launcher and usage
- umu-run manual
- Protontricks upstream
- ProtonDB
References & further reading
- Official Proton README ↗
- GE-Proton README ↗
- umu-launcher and usage ↗
- umu-run manual ↗
- Protontricks upstream ↗
- ProtonDB ↗
Adapted from technical notes. Examples use generic names.