oneshot 在 linux 上运行问题的解决
2021-07-09 08:56:29 # Guide


这篇文章搬运自我的b站专栏,原贴传送门

问题

从linux的steam下载的oneshot,点击运行就闪退
我的系统是archlinux

排查

在终端中运行~/.local/share/Steam/steamapps/common/OneShot/steamshim直接启动游戏,有类似这样的输出

1
2
3
4
5
6
7
dlopen failed trying to load:
/home/icedtangerine/.local/share/Steam/linux64/steamclient.so
with error:
/mnt/Data01/Game/SteamLibrary/steamapps/common/OneShot/librt.so.1: undefined symbol: __clock_nanosleep, version GLIBC_PRIVATE
[S_API] SteamAPI_Init(): Sys_LoadModule failed to load: /home/icedtangerine/.local/share/Steam/linux64/steamclient.so
[S_API FAIL] SteamAPI_Init() failed
Failed to initialize Steamworks

解决

报错信息丢google上一搜索,好幸运,steam社区一个帖子给出了解决方案

闪退的原因是oneshot这游戏比较老了,它自带的老版本libglibc等一些库,在如今的系统上已经不能用了

原帖提供的解决方法是:
删掉~/.local/share/Steam/steamapps/common/OneShot/目录下的这些文件

  • libgio-2.0.so.0
  • libglib-2.0.so.0
  • libsystemd.so.0
  • librt.so.1

如果还不能运行,继续删掉libstdc++.so.6和libdrm.so.2

实际上,看终端输出报错的是哪个文件就删哪个,直到能进游戏为止,我一开始把六个那文件全删了能玩,但是第二天再运行就报了steam 相关的错误,后来发现我的系统上只用删3个文件就行了

如果删错了东西,steam 校验一下游戏文件完整性就能恢复回去了

但是我这里必须要在终端中运行steamshim才行,steam里直接点开依旧闪退,这个真的没辙了

试了一下,通过执行steamshim进入游戏,窗口化模式下完美运行,但是设置全屏会有bug导致崩溃

这本来不是什么大问题,毕竟官方也推荐在窗口化模式下运行(难道是因为bug?),那就这样玩呗
可是我的笔记本是13寸的2k屏,窗口化模式下真的太小了……

一开始我尝试把游戏窗口缩放,但是用了几个设置缩放的变量都没用,我之前在.Xresources里对整个桌面设置的dpi对这游戏也没用
然后看了archlinux wiki的hidpi条目,了解到能对不支持缩放的程序使用run_scaled这个对xpra的封装来进行强制缩放(aur里有)

然鹅试了一下,能缩放,但是用键盘控制niko移动的时候一卡一卡的,根本没法玩

最后只好改分辨率,我使用的是i3wm,只能用xrandr手动更改分辨率
试了一下,游戏显示效果很好。应该完美了,就这样吧

不过每次都要手动输入指令改分辨率再运行steamshim很是麻烦,于是把这些操作写进脚本里

1
2
3
4
5
6
7
8
#!/bin/bash
# 降低分辨率
xrandr --output eDP --mode 1440x900
sleep 3
# 启动游戏,并在游戏退出后恢复分辨率
~/.local/share/Steam/steamapps/common/OneShot/steamshim &
wait
xrandr --output eDP --mode 2560x1600

把这个脚本放主目录下并给予可执行权限,每次玩的时候只要先打开steam,再运行这个脚本就行了

其实我是在windows10下玩也闪退并且不会解决才尝试在linux上玩oneshot的