如何用 umu+proton 在 linux 上运行游戏

Published on: 2026-08-26

Written by: Siriuns
description: Steam 把我账号的 Linux Runtime 4.0 的许给给没收了说是, 也不知道是系统不适用还是什么.

0. 背景

7月的时候突然发现原来用 proton 来跑游戏不需要重新下一遍, 遂决定尝试一下用 Steam 带的 proton 跑, 当时 原神/绝区零/终末地/明日方舟 都是能跑的, 就是不知道 崩铁 为什么启动不起来, 能跑了就没管.

但是后来发现在 linux 上跑游戏很容易 oom, 要么卡的要死 tty 都进不去那种, 要么崩掉之后 Steam 残留在那里没法退出, 还阻塞关机, 要等个好几分钟才能正常关闭, 就将近一个月左右没玩. 前两天突然想起来这事, 问了下 GPT, 说有个叫 earlyoom 的东西能在快要 oom 的时候杀掉内存占用大的进程, 也可以加一个 swap 文件, 就是可能内存不够用的时候会慢点.

于是 8.23 的时候我把 GPT 给的建议做了, 打开 Steam 结果莫名其妙启动不起来了说是. 中间跟客服尝试问了一下, 但是最终发现还是不如直接用 proton 官方那边的 umu-launcher 好.

1. 如何用 umu + proton

我自己的系统是 Arch, 安装的话包在 AUR 上, 直接 yay 或者 paru 就行, 我的启动方式是配置一些环境变量比如 ‘GAMEID, PROTONPATH, WINEPREFIX’ 然后再跑 umu, 下面举了一个例子.

# 安装
paru -S umu-launcher


# 中间变量
GAMEDIR="/run/media/siriuns/STORE/program/miHoYo Launcher/games/Genshin Impact Game"
EXE_NAME=YuanShen.exe

# 指定 umu id, 如果有 steam 版的话, id 一般是 umu-<steam id>, 会给游戏一些补丁, 但是粥和铁现在还不在数据库里面
export GAMEID=umu-genshin

# 到 proton 的路径, dwproton 是专门针对二游的来着
export PROTONPATH=/usr/share/steam/compatibilitytools.d/dwproton

# prefix 存放的地址, 如果第一次启动需要先创建, 会导致第一次启动不成功并 exit 5
# 其实写了个 bash 脚本, 这个 $GAME 是脚本的第一个参数()
export WINEPREFIX="$HOME/prefixes/$GAME"

# 启动
umu-run "$GAMEDIR/$EXE_NAME"

整个启动方法还是挺简单的, 并且现在崩铁倒是也能跑了.

2. 为什么 Steam 跑不了, umu 能跑

把 Steam 日志丢给 Codex 之后发现我的 Steam Linux Runtime 4.0 (缩写 steamrt4, 写一半才意识到, 之前知道这俩是一个玩意没意识到居然是个缩写) 没了, 而不论是 dwproton, proton exprimental 还是 proton 11 都需要这个 steamrt4.

一开始我还以为什么文件损坏了, 尝试过删除 Steam 的索引和 steamrt4 本身让他重建, 结果不行下载不了; 然后以为 Steam 抽风了用他的 console 手动下载并把文件按照方法给放进去了, acf 索引也建了, 结果 Steam 一启动就给我 steamrt4 删了; 最后看了眼 Steam console 的 license_print, 发现还真找不到这个 steamrt4(id:4183110) 的许可, 找客服客服一直跟我说让我用 Ubuntu, 或者到 github 上找技术人员.

最终发现 proton 官方原来也有启动器, 于是准备试试. 这个 steamrt4 是 umu 自己会去公开仓库拉去的, 我记得第一遍运行 umu 的时候日志里面就可以看到他在拉去 steamrt4 (没错 Steam 不让我下一个公开软件, Arch 还是 SteamOS 3 上游发行版呢).

3. 关于 oom

earlyoom 确实能提早杀掉游戏省得卡到 tty 都进不了, 不得不断电重启 (/etc/fstab忘记写了, 导致之前虽然创建了 swapfile 但是都没开机自动挂载). 挂上确实好了.

另外就是 Claude 还提到一个东西 ‘sysrq’. sudo sysctl kernel.sysrq=112 可以临时开启 SysRq 按键的某些功能, 重启会重置成默认值16, 要持久化可以在在 /etc/sysctl.d/ 创建 99-sysrq.conf 写入 kernel.sysrq=112. 当参数配置为112时, 多了 32 (只读重挂) 和 64 (term kill + oom kill), 能用 SysRq + f 在 oom 的时候会挑一个进程杀.

直接找 SysRq 大概是找不到的, 这个 SysRq 在键盘上已经被合并进了 PrtSc, 需要摁 alt + PrtSc. 而这个 SysRq 的优先级非常高, “在内核的键盘中断中处理, 不经过用户态”. 然后这个数字是靠掩码算出来的, 0是全关, 1是全开, 16是默认值. Claude 说 SysRq + b 比较危险, 相当于直接断电重启, 有点神秘.

4. 崩铁为什么能跑

不到, Claude 说 dwproton 11.0-10 是月初发的, 刚刚加入崩铁签名绕过, 还说什么 “同时还修了 Netmarble 启动器和 HoYoPlay 那类 CEF 窗口装饰”, 懒得管到底什么原因了, 下一个旧版自己控制变量跑一遍也麻烦.

-1. 神秘

之前 docker compose 因为 dns 污染跑步了, 然后折腾了半天 v2rayn-bin. 一个是 Legacy 保护下默认配置会产生本地回环, 手动改路由表啥的好像修好过一次, 但是太麻烦了, 也没定位出来 (懒), 默认开的 TUN 又不走虚拟网卡, 二是 DoH 找不到开关, 填了地址也照样把 docker 的域名解析到 meta 的 ip 段去. dns 污染的问题切到 clash verge rev 就好了, 但是就 v2rayn 这个设置的不确定度我都不如拿 Xray 核心 + 手动改系统配置来跑.

现在是 Steam 卡着这个 steamrt4 不给用, 客服还让我用 Ubuntu. 这个 umu 的配置也没多麻烦, 这 Steam 也不如直接用原始的 umu, 就很神秘.