Overview
参考文档:Arch Wiki — Gaming
在
Linux上跑原生为Windows打造的游戏,本质是一条逐层转译的链路:flowchart TD G["游戏(Windows API)"] -->|"Wine / Proton:系统调用与 API 转译"| T["转译后的调用"] T -->|"DXVK / VKD3D-Proton:D3D → Vulkan 图形转译"| V["Vulkan 调用"] V -->|"Mesa / NVIDIA 驱动"| M["内核图形栈"] M -->|"Wayland / X11 合成器"| S["屏幕"]各组件分工不同:
Steam/Lutris是发行与启动层,Wine/Proton是兼容层,gamescope是呈现层,最底下的显示协议与合成器层(合成器、wlroots、XWayland)单独整理在 Linux 显示协议与图形栈,一层层叠起来才有了今天开箱即用的体验
Valve 与 Steam
Valve是Steam平台的母公司,也是整个Linux游戏生态最大的推动者:2018年推出Proton,让Steam上的Windows游戏"一键在Linux下运行"2022年发布Steam Deck掌机,搭载定制Linux发行版SteamOS,直接把Proton生态推为主流- 雇佣了大量开发者贡献
Mesa、Kernel、wine上游,Linux图形栈近几年的飞跃与其商业利益直接相关
Steam客户端本身就是Linux原生应用,Linux版与Windows版功能一致- 在设置 → 兼容性中开启"对所有其他标题使用
Steam Play“后,游戏默认通过Proton运行,无需手动配置 - 游戏页面标注的”
Steam Deck已验证"可以作为Linux兼容性的粗略参考:已验证>可玩>不支持 - 反作弊是最大的坑:部分内核级反作弊(
EAC/BattlEye)需要开发商显式开启Proton支持,未开启的游戏无法运行,购买前先查ProtonDB的社区评分
- 在设置 → 兼容性中开启"对所有其他标题使用
Wine
Wine(Wine Is Not an Emulator)是整个兼容层的基石,历史比Proton早二十年:- 它通过重新实现
Windows的系统调用与API(ntdll、user32、gdi32…),把Windows程序的请求转译成Linux上等价的操作,不是模拟器,几乎无CPU性能损耗 - 覆盖面极广:
PE加载器、注册表(wineprefix中的.reg文件)、DirectX、音频、字体、OLE/COM……一个Windows程序赖以生存的环境几乎都有对应实现
- 它通过重新实现
wineprefix是理解Wine的关键概念:- 一个
prefix就是一个虚拟的C:盘(drive_c目录)加一套注册表,默认位于~/.wine,通过WINEPREFIX=xxx环境变量可以为每个游戏维护独立的隔离环境 - 隔离的好处:
A游戏需要的运行库补丁、注册表魔改不会污染B游戏,重装系统也只需备份各游戏的prefix
- 一个
Wine的版本命名曾经历1.x→2.x→ … →9.x的稳定/开发双轨制,现在以年份命名(如Wine 10.x),每年发一个大版本
Proton 及其分支
Proton是Valve基于Wine的下游发行版,可以理解为"Wine+ 一堆游戏专用补丁 + 转译库"的整合包:- 上游
Wine追求通用正确性,Proton则激进地针对游戏打补丁,很多修复先在Proton落地、验证稳定后才合回上游 - 自带
DXVK、VKD3D-Proton等转译库(见下节),并深度集成Steam的运行时(SteamLinuxRuntime),解决各发行版库版本不一致的问题
- 上游
Proton-GE(GloriousEggroll 版)是最流行的社区分支:- 在官方
Proton基础上合入大量尚未进官方版的补丁、更新的转译库与媒体编解码器,常能救活官方版跑不起来或表现不佳的游戏 - 更新极快,某个游戏发售首日出现问题时,社区往往第一个在
GE里给出绕过方案
- 在官方
proton-tkg:另一条定制路线,提供大量可配置的编译选项(futex、fsync、调度器调优等),面向愿意自己编译折腾的高级用户Wine-GE与umu-launcher:Wine-GE曾是为非Steam启动器(如Lutris、EA app)准备的GE版Wine,现已停止维护- 官方替代方案是
umu-launcher:它实现了一套与Steam相同的运行时环境,让任何启动器(甚至一条命令行)都能以"官方Proton或Proton-GE“来运行非Steam游戏——相当于把Proton从Steam里解耦出来给全系统用 Lutris已原生集成umu,非Steam游戏因此也能享受Proton分支的持续更新
常见转译库
- 这些库是
Proton生态的"轮子”,Steam与Lutris会在安装运行时自动带上,通常无需手动安装,认识它们有助于看懂报错与社区讨论:DXVK:把D3D9/D3D10/D3D11转译为Vulkan,是老游戏与新游戏能在Linux上满速运行的头号功臣VKD3D-Proton:把D3D12转译为Vulkan,Valve维护的vkd3d分支,DX12游戏靠它运行DXVK-NVAPI:转译NVIDIA的NVAPI接口,让DLSS等特性在Proton下可用Wine-Mono/Wine-Gecko:Wine内置的.NET与浏览器引擎替代品,部分游戏的启动器依赖它们FAudio/WinePulse:XAudio2等音频接口到PipeWire/PulseAudio的适配
gamescope
gamescope是Valve开发的嵌套式合成器(SteamOS/Steam Deck的会话层,合成器与Wayland/wlroots的背景见 Linux 显示协议与图形栈),可以嵌在任意桌面里单独给某个游戏用:- 核心能力一:分辨率与缩放管理——游戏内部以任意分辨率渲染,
gamescope负责用高性能滤波器(FSR、NIS等)缩放到屏幕,掌机与小屏场景的救星 - 核心能力二:像素完美的全屏控制——模拟"全屏独占",无论窗口管理器做什么,游戏看到的都是独占全屏,规避了各桌面合成器行为不一致的问题
- 其他实用功能:帧率限制、色相/锐化滤镜、嵌套窗口运行、
HDR映射 - 典型用法是作为启动包装器:
gamescope -W 2560 -H 1440 -w 1920 -h 1080 -F fsr -- %command%,在Steam里替换原始启动命令即可
- 核心能力一:分辨率与缩放管理——游戏内部以任意分辨率渲染,
Lutris
Lutris是Linux上的开源游戏启动器/管理器,定位是"Steam之外一切游戏"的统一入口:- 聚合管理各种来源:
GOG/Epic/Battle.net等商店与启动器、手动安装的本地游戏、模拟器、原生Linux游戏,全部收纳进一个库 - 核心机制是安装脚本社区共建:每个游戏在社区维护一份安装脚本,声明需要的
Wine/Proton版本、要下载的依赖、注册表改动等,用户点一下"Install"即可复刻他人的成功配置 - 运行器(
runner)体系:Wine、Proton(经由umu)、原生、各类模拟器都是可插拔的runner,每个游戏可单独指定版本与参数 - 与
Steam的分工:Steam管平台内游戏,Lutris管"不在Steam里的一切",两者互补而非竞争
- 聚合管理各种来源:
选择建议
- 只玩
Steam游戏:装好Steam开Proton即可,遇到问题换Proton-GE试试 Steam外的Windows游戏:Lutris+umu(Proton 运行时),找社区安装脚本- 性能/兼容性调优:
gamescope控制分辨率缩放与帧率,MangoHud观察实时帧率与负载 - 买游戏前查 ProtonDB 的社区报告,避免踩反作弊的雷