在 Arch Linux 上玩 osu stable
前言
在 Arch Linux 上玩 osu 是我许久以来的愿望了。 我现在日常在 Linux 上工作,但有时候手痒想玩游戏的时候却总要重启, 切双系统到 Windows 上。因为历史原因,osu stable 没有全平台适配。 而做了全平台适配的 osu lazer 目前仍在开发阶段,在 lazer 上打出的 成绩不提交服务器。且 lazer 的键位机制和原版也相去甚远,需要重新适应。
但好在我们还有 Wine。大约在 2009 年的时候 osu 论坛就已经有了用 Wine 运行 osu 的教程:https://osu.ppy.sh/community/forums/topics/14614?n=1。 2015 年 osu 修复了 Wine 里 OpenGL 引擎不能正常运行的问题,在 Linux 上运行 osu 已经非常简单了。
安装 osu
在 AUR 上已经有人打好了 osu 的 PKGBUILD 脚本。 安装好 AUR Helper,然后直接安装即可。
paru -S osu
这个 PKGBUILD 本质上就是帮你把 wine 装好,把 osu 客户端放到
$XDG_DATA_HOME
下,然后把变量写入启动脚本。
你可以执行 cat /usr/bin/osu-stable
这个脚本看看他具体做了什么。
安装好之后不要直接启动,你需要先安装好 .Net Framework 4.0
,
不要用默认提供的 mono
。
winetricks dotnet40
他在启动的时候会问你要不要装 Gecko,也不要安装,直接取消即可。
为什么 osu stable 和 osu lazer 不能加入到官方源呢?
这里有个商标问题。osu 的软件本体是用 MIT License 开源的,但 osu 这个标志则是有商标保护的, 而 Arch Linux 不被授权分发。
Peppy 的回复: https://github.com/ppy/osu/issues/3723#issuecomment-439010666
安装驱动
想要 wine 正常运行游戏还需要安装两个驱动。
在安装驱动前你需要先启用 multilib
这个源:
https://wiki.archlinux.org/title/Official_repositories#multilib
声卡
如果你使用的是
PulseAudio,安装 lib32-libpulse
即可。
如果你用的是 Pipewire,安装 lib32-libpulse
和 pipewire-pulse
。
显卡
如果你用的 Nvidia 显卡,你需要安装 lib32-nvidia-utils
。
如果用的是 Intel/AMD 显卡,则需要安装 lib32-mesa
。
内核更换
更换内核不是必要的,但我非常推荐你换成 linux-zen
内核来玩游戏。
我自己在对比体验后,能明显感觉 linux-zen
内核玩游戏相对于 Arch Linux
的原版内核来说要更加顺滑。相对于 Windows 来说就是“更加顺滑++++”。
sudo pacman -S linux-zen linux-zen-headers
如果你是 grub 用户,你需要重新生成一下 grub 的 config。 其他引导程序的用户需要自己查询一下 wiki。
sudo grub-mkconfig -o /boot/grub/grub.cfg
然后重启,选择 Arch Linux (More option),然后选择 linux-zen 内核的 Arch Linux 启动即可。
重启后打开一个终端,输入 uname -r
查询内核 release 信息,是 zen 就对了。
显卡模块加载
linux-zen 内核默认用 nouveau
来驱动显卡,如果你用的官方驱动就会发现显卡输出无了。
对于官方驱动,你需要编译一份 Nvidia 的内核模块。 dkms 可以帮我们自动化这个工作,以后每一次 nvidia 驱动更新,或者系统内核更新,dkms 都会帮我们自动编译加载。
sudo pacman -S nvidia-dkms
数位板驱动
你现在应该已经能正常玩了,但如果你是个老 osu 板子玩家,你可能还需要调整映射。
在 AUR 里已经有人打包好了 OpenTabletDriver
的驱动,用 AUR Helper 下载即可。
paru -S opentabletdriver
然后你需要把内核里的数位板驱动关掉。因为 OpenTabletDriver 会尝试用你调整过的 小映射来映射准星位置,而内核则一直用全板映射来映射你的准星,于是就会导致准星 位置不断修正。说人话就是这两个驱动会让你准星疯狂左右横跳。
echo "blacklist wacom" | sudo tee -a /etc/modprobe.d/blacklist.conf
sudo rmmod wacom
第一条命令把 wacom 驱动加入黑名单,以后内核再也不会加载这个模块。 第二条命令把当前加载的驱动模块删除。
音频延迟
至少我自己是没听出来,但你也可以参考 The Poon 的博客,把音频延迟降低到极致。
https://blog.thepoon.fr/osuLinuxAudioLatency/
The Poon 里面说的他打好 patch 的 wine 你不需要自己编译,也不需要用他的源。 在 Arch Linux CN 已经有编译好的版本,加载 Arch Linux CN 源然后下载安装即可。
CN 源配置
参考文档: https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/
sudo echo -e "[archlinuxcn]\nServer = https://repo.archlinuxcn.org/$arch" >> /etc/pacman.conf
sudo pacman -Syu
sudo pacman -S archlinuxcn-keyring
Arch Linux CN 也有很多国内镜像源,如果你有网络业障可以在这个 Repo 里找 对你网络友好的镜像: https://github.com/archlinuxcn/mirrorlist-repo
下载 The Poon 的 wine
下载 wine-osu 这个包:
sudo pacman -S wine-osu
然后编辑一下 /usr/bin/osu-stable
这个文件:
sudo vim /usr/bin/osu-stable
首先我们要更换 wine 的可执行位置,这里我们把 wine-osu
的可执行文件存放目录
放在 $PATH
变量的开头:
# file: /usr/bin/osu-stable
export PATH=/opt/wine-osu/bin:$PATH
然后就是加入一些 The Poon 在文中提到的变量:
# file: /usr/bin/osu-stable
export STAGING_AUDIO_DURATION=5000
至于加什么变量,值怎么调就自己参照 The Poon 的博客来就好了。
还有一件事,/usr/bin/osu-stable
这个文件会在下次更新 osu 的时候
被覆写,建议调好变量之后做好备份,在下次更新之后 cp 覆盖回去就行了。
文件访问
OSU 的游戏目录映射到了 $XDG_DATA_HOME/osu-stable
下,一般如果没有
特意设置这个变量,都会存放在 ~/.local/share/osu-stable
下。
下载好的皮肤和歌直接移动进去就行了。
理论上来讲安装 osu 的时候,他会复制一份 osu.desktop
文件到
/usr/share/applications/
目录下,里面写好了各类 osu 文件的 mime type。
对于常见的 DE 直接双击文件就好了,终端用户可以用 xdg-open
这个命令。
但如果你的系统不能正确识别 mime type ,皮肤解压就会有点麻烦。
你可以把 .osk
文件复制到 ~/.local/share/osu-stable/Skins
目录下
之后,进入游戏按 Ctrl-o
打开设置,在设置最顶上有个打开游戏目录的选项,
点击之后就能使用一个 Windows 的文件管理器,在里面双击你的 .osk
文件,
就能正确识别 mime type 并调用 osu 来解压了。
歌曲的话不用解压,每次导入新歌在游戏内摁 F5
就行了。
你可以参考 wiki 来试着修复自己的 mime type。
See you next time~