解决 Steam Proton 启动游戏闪退
起因
闲着无聊在家想玩一直没玩完的《仙剑奇侠传》,因为我用的系统是 Archlinux
,所以在 Steam 上需要用 Proton
来运行。
但是打开游戏的时候发现闪退了。(╯°Д°)╯ ┻━┻
Debug 过程
- 尝试运行其他 Windows 游戏,无果,暂时排除是游戏的原因
- 尝试换了几个版本的 Proton,还是闪退
- 从 ProtonDB 查询的结果显示这些游戏都是完美运行的,猜测可能是本机驱动或者配置问题
- 检查 Nvidia 显卡驱动及 32 位版本正常安装
nvidia, nvidia-utils, lib32-nvidia, lib32-nvidia-utils
- 查看软件运行日志, 从终端运行 Steam
env STEAM_LINUX_RUNTIME_LOG=1 PROTON_LOG=1 steam-native
发现错误
ERROR: ld.so: object '/home/light4/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
一番查询,发现是正常日志,可以忽略。参考 https://wiki.archlinux.org/title/Steam/Troubleshooting
而且发现 PROTON_LOG
选项没有用,找不到相关日志。
- 更改软件启动项 Steam 游戏上右键 -> 属性 -> 启动选项,添加以下配置
PROTON_LOG_DIR=/home/light4/ PROTON_LOG=1 PROTON_USE_WINED3D=1 %command% &> /home/light4/mytest.log
发现除了上边的无关日志外还有一行
bwrap: Can't bind mount /oldroot/etc/resolv.conf on /newroot/etc/resolv.conf: Unable to mount source on destination: No such file or directory
开始怀疑是 bubblewrap
没有权限的问题,安装 bubblewrap-suid
替换 bubblewrap
,发现问题依旧。
最终原因是我用到了 ss-tproxy 这个项目,它已经 mount 了 /etc/resolv.conf
,
导致 bwrap
无法正常使用。
解决办法
既然知道了原因,办法也很简单:
- 换用很老版本的
Proton
,这样没有用到bwrap
,也就没有冲突 - 暂时停用
ss-tproxy
或者等游戏起来之后再启动 - 修改
ss-tproxy
,不要改/etc/resolv.conf
启发
- 软件共享状态是不好的习惯