EndeavourOS针对osu! stable和部分老游戏的配置
前情提要
首先Blame ppy。
osu stable不做Linux我能理解,你Lazer做适配我也支持,你Lazer做的那个编辑器是坨什么?Linux端的性能体验也是灾难,打图三秒小卡一次,五秒大卡三次,完事了卸载之后还要在我的.local里面拉了9GB文件的屎。想干啥
言归正传,实际上当时从AtlasOS转到Linux之所以在犹豫,就是说游戏的事情。虽然那个视频已经点明Linux玩游戏在2025年是完全没问题的,只是那只是一个大概的方向,并且只是线性覆盖:Steam游戏->热门端游和网游->米哈游->安卓手游->反作弊,但是没有在二维的游戏广度上进行覆盖,比如相对较冷门的游戏,osu! stable如何?100% Orange Juice如何?没讲。这部分只能亲自上手测试。
针对osu! stable
一波三折。
Lutris (第一次尝试)
1. 安装问题
刚装完EndeavourOS,配置好Clash Verge和Fcitx5就搞上了。我以为Lutris里面弄个osu无非就是,下载.exe安装包,在里面点击安装,迁移数据(设定个符号链接),完事。
事实证明我想错了,配置这种古老游戏(我没记错的话应该是OpenGL图形API)要的事情多了去了。首先就是一大堆的Lutris 256报错:
[cynsm@Xynsm ~]$ lutris -d
2025-08-23 21:32:53,843: Command 'wine' not found on your system
2025-08-23 21:32:54,111: The Battle.net source is unavailable because Google protobuf could not be loaded: No module named 'google'
[cynsm@Xynsm ~]$ tail -f ~/.cache/lutris/lutris.log
[INFO:2025-08-23 21:35:31,045:files_box]: All files available
[INFO:2025-08-23 21:35:31,045:installerwindow]: All files are available, continuing install
[INFO:2025-08-23 21:35:31,045:installerwindow]: Launching installer commands
[DEBUG:2025-08-23 21:35:31,046:interpreter]: Creating destination path /home/cynsm/Games/osu
[DEBUG:2025-08-23 21:35:31,046:interpreter]: Installer command: {'task': {'arch': 'win64', 'name': 'create_prefix', 'prefix': '$GAMEDIR'}}
[INFO:2025-08-23 21:35:31,052:wine]: Creating a win64 prefix in /home/cynsm/Games/osu
[INFO:2025-08-23 21:35:31,052:wine]: Winepath: /home/cynsm/.local/share/lutris/runners/wine/wine-ge-8-26-x86_64/bin/wine
[DEBUG:2025-08-23 21:35:31,052:system]: Executing /home/cynsm/.local/share/lutris/runners/wine/wine-ge-8-26-x86_64/bin/wineboot
[DEBUG:2025-08-23 21:35:31,052:system]: WINEARCH=win64 WINEPREFIX=/home/cynsm/Games/osu WINEDLLOVERRIDES=winemenubuilder= WINE_MONO_CACHE_DIR=/home/cynsm/.local/share/lutris/runners/wine/wine-ge-8-26-x86_64/mono WINE_GECKO_CACHE_DIR=/home/cynsm/.local/share/lutris/runners/wine/wine-ge-8-26-x86_64/gecko
[INFO:2025-08-23 21:36:02,227:wine]: win64 Prefix created in /home/cynsm/Games/osu
[INFO:2025-08-23 21:40:31,589:wine]: win64 Prefix created in /home/cynsm/Games/osu
[DEBUG:2025-08-23 21:40:31,610:interpreter]: Installer command: {'task': {'app': 'dotnet48', 'arch': 'win64', 'name': 'winetricks', 'prefix': '$GAMEDIR'}}
[WARNING:2025-08-23 21:40:31,628:wine]: Wine is not installed on your system; required dependencies may be missing.
[WARNING:2025-08-23 21:40:31,628:runner]: Accessing game config while runner wasn't given one.
[DEBUG:2025-08-23 21:40:32,420:monitored_command]: Process 85956 has terminated with code 256
[DEBUG:2025-08-23 21:40:32,682:commands]: Return code: 256
[ERROR:2025-08-23 21:40:32,682:errors]: 命令以错误代码 256 退出
[ERROR:2025-08-23 21:40:32,682:exception_backstops]: Error handling timeout function: 命令以错误代码 256 退出
Traceback (most recent call last):
File "/usr/lib/python3.13/site-packages/lutris/exception_backstops.py", line 79, in error_wrapper
return handler(*args, **kwargs)
File "/usr/lib/python3.13/site-packages/lutris/util/jobs.py", line 131, in wrapper
repeat = func(*a, **kw)
File "/usr/lib/python3.13/site-packages/lutris/installer/commands.py", line 439, in _monitor_task
raise ScriptingError(_("Command exited with code %s") % command.return_code)
lutris.installer.errors.ScriptingError: 命令以错误代码 256 退出筛选一下关键信息:
2025-08-23 21:32:53,843: Command 'wine' not found on your system
WARNING:2025-08-23 21:40:31,628:wine]: Wine is not installed on your system; required dependencies may be missing.
没装Wine。好嘛,居然还需要手动安装。当时我已经听说过了Wine的鼎鼎大名,但是Lutris作为如此主流的一个Linux游戏软件,没有自动配置Wine环节,真的假的,有点败坏风俗丧尽天良不可理喻难以置信哄堂大笑大跌眼镜惨无人道了。
于是安装。
sudo pacman -S wine-staging winetricks giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls mpg123 lib32-mpg123 openal lib32-openal v4l-utils lib32-v4l-utils libpulse lib32-libpulse alsa-plugins lib32-alsa-plugins alsa-lib lib32-alsa-lib libjpeg-turbo lib32-libjpeg-turbo libxcomposite lib32-libxcomposite libxinerama lib32-libxinerama ncurses lib32-ncurses ocl-icd lib32-ocl-icd libxslt lib32-libxslt libva lib32-libva gtk3 lib32-gtk3 gst-plugins-base-libs lib32-gst-plugins-base-libs vulkan-icd-loader lib32-vulkan-icd-loader
长的毫无人性。
其实理论上来说还需要去/etc/pacman.conf把multilib取消注释来启用multilib库,就是
#[multilib]这两行,但是基本上EndeavourOS或者Arch这类的已经默认启用了,以防万一
本人是N卡,所以还需要安装验证显卡驱动的32位库: lib32-nvidia-utils ,pacman来源里面有。如果是AMD / Intel就安装 lib32-mesa 。
安装完之后,现在osu就应该可以正常安装上了。但是问题还远远没有解决。
2. 延迟问题(帧生成时间)
一点进去天塌了。
打开的时候就感觉不对,选歌的时候感觉更不对了,打开不限制帧数,一进游戏一看右下角,3.7ms,天塌了。要知道在AtlasOS上只有基本0.3ms左右,不知道是啥问题。查看Lutris,显示选项框下面的GPU是灰色的,连MangoHud的显示帧率都是灰色的。百思不得其解。尝试关闭过”优先使用系统库“和安装nvidia-prime都试过了,毫无卵用,所以这个时候就怀疑是BIOS层面出了问题。
尝试使用prime-run之后,输出如下:
[cynsm@Xynsm ~]$ pacman -Qs nvidia
local/egl-gbm 1.1.2.1-1
The GBM EGL external platform library
local/egl-wayland 4:1.1.20-1
EGLStream-based Wayland external platform
local/egl-x11 1.0.3-1
NVIDIA XLib and XCB EGL Platform Library
local/envycontrol 3.5.2-1
CLI tool for Nvidia Optimus graphics mode switching on Linux
local/lib32-nvidia-utils 580.76.05-1
NVIDIA drivers utilities (32-bit)
local/libvdpau 1.5-3
Nvidia VDPAU library
local/linux-firmware-nvidia 20250808-1
Firmware files for Linux - Firmware for NVIDIA GPUs and SoCs
local/nvidia-dkms 580.76.05-4
NVIDIA kernel modules - module sources
local/nvidia-prime 1.0-5
NVIDIA Prime Render Offload configuration and utilities
local/nvidia-utils 580.76.05-4
NVIDIA drivers utilities
[cynsm@Xynsm ~]$ pacman -Qs vulkan
local/lib32-nvidia-utils 580.76.05-1
NVIDIA drivers utilities (32-bit)
local/lib32-vulkan-icd-loader 1.4.321.0-1
Vulkan Installable Client Driver (ICD) Loader (32-bit)
local/nvidia-utils 580.76.05-4
NVIDIA drivers utilities
local/qt6-shadertools 6.9.1-1 (qt6)
Provides functionality for the shader pipeline that allows Qt Quick to operate on Vulkan, Metal, and Direct3D, in addition to OpenGL
local/spirv-tools 1:1.4.321.0-1 (vulkan-devel)
API and commands for processing SPIR-V modules
local/vulkan-icd-loader 1.4.321.0-1 (vulkan-devel)
Vulkan Installable Client Driver (ICD) Loader
local/vulkan-tools 1.4.321.0-1 (vulkan-devel)
Vulkan tools and utilities
[cynsm@Xynsm ~]$ xrandr --listproviders
Providers: number : 0
[cynsm@Xynsm ~]$
[cynsm@Xynsm ~]$ envycontrol -q
hybrid
[cynsm@Xynsm ~]$
provider=0,这个时候就知道出啥问题了,说明Xorg服务器根本没有识别出我的任何一个显卡驱动,无论是集显还是独显,导致性能低下。先检查NVIDIA内核模块是否被加载: lsmod | grep nvidia ,输出为空。但是这个时候我想到,不是装了envycontrol,问题可能出在这个的hybrid模式上面。
[cynsm@Xynsm ~]$ lspci -k | grep -A 2 -E "(VGA|3D)"
01:00.0 VGA compatible controller: NVIDIA Corporation AD107M [GeForce RTX 4060 Max-Q / Mobile] (rev a1)
Subsystem: Hewlett-Packard Company Device 8bab
Kernel driver in use: nvidia
[cynsm@Xynsm ~]$ 问题很明显,目前系统里面只有一块显卡可见:4060 Mobile。因此把问题锁定在了BIOS层面上。调到Nvidia Advanced Optimus,这下连亮度可以调了,nvidia-smi证明独显也在跑,然而进游戏,情况不变,甚至更糟糕;尝试了X11桌面环境下并且Alt + Shift + F12关闭桌面合成器,没用;用gamemode尝试,有微小的改善,没用;更改Wine版本,没用。这种玄学的情况下,不由得怀疑可能是Lutris本身的问题,所以这个时候锁定另外一个社区的osu! stable版本:osu-winello。然而winello也没啥用其实。然后我问了朋友,他不解,说他们的商务本都能跑到0.4ms,在CachyOS,Manjaro以及Arch上都试过,毫无性能问题。然后我问了他BIOS里面的显卡设置这事情,以下是原话:
我:bios里面是选nvidia ao对吧
他:discrete
他:linux不支持ao
我:66666
我:问题是当时我discrete性能好像也不咋的
我:那linux用啥充当ao了
他:?
我:?
他:ao是自动切换集显独显功能
他:你linux那里支持
我:呃
我:所以linux用不了集显这个意思
他:不是用不了
他:是给你锁在集显了
我:已无言无已
他:你没办法触发他独显
我:换discrete就0.3了
我:老子服了
他:discrete是只有独显这个时候,奇葩的事情来了:从Nvidia Advanced Optimus之后,游戏性能直接好了。直接跳到了0.3ms左右,虽然实际打起来还是会有不小涨幅,不及AtlasOS的0.3ms,但是这么一点点微小的帧生成时间已经不足以对体感造成影响了。具体到底什么原因,我也不清楚,也许是换到Linux之后需要BIOS层面的一次刷新?idfk。
3. Proton问题
调了半天之后,终于把Wine版本锁定在了10.14。但是当时我没有Wine Prefix这个概念,自然不知道在更改Wine版本之前需要备份,更不知道Proton是针对Steam以及现代游戏做兼容的,osu这种可能代码里面还有十几年前的老东西自然不会被包括在Proton的优化菜单里面,尤其是更激进的Proton-GE。于是直接对Lutris里面的原版osu更改了Wine版本,结果惊喜地发现,第一次直接一直卡在”启动中“,干脆不等了,关掉,再开一次。完蛋,这次直接连图标都没出来就闪退了。多试了好几次都是这样。查询才知道,这个被称为Wine Prefix的构建过程,被我手动关掉了,自然就启动不了了,因为Wine Prefix被我手动破坏了。当时想着,反正坏都坏了,在重装之前先试试osu-winello。
osu-winello
最开始我是惊喜的,我毕竟主要是一名mapper,而Lutris里面的osu有一个大痛点是,打开的是Wine自己的那个简陋的文件系统并且没法和Linux自己的文件系统相通信, 导致比如说需要拖动hs文件或者.osu文件的时候,需要手动去dolphin找,非常麻烦,所以当winello凭借相差无几的性能(0.5ms,后来Lutris掉到了理论极致性能0.29ms)和默认打开系统自带文件管理器的特性,让我一度以为osu-winello可以直接替代lutris的osu让我正常进行游戏了。事实证明我又错了,osu-winello对于文件的更新非常奇怪,当我手动往Dolphin里面的对应文件夹拖入.osu文件的时候,游戏本身似乎不读取文件。F5刷新所有文件之后,mapset处于一个非常混乱的状态。思来想去,这个比手动打开文件管理器追溯路径要更无法接受,还是换回了Lutris。
Lutris (第二次)
这次没有幺蛾子了。老实安装,老实配置,用Wine 10.14打开,帧生成时间可以控制在一个非常好的水平:0.28ms,最低可以到0.23ms左右。但是还是有个问题,实际体验下来发现,音频延迟。
题外话:混合驱动的问题
我问过Google Gemini,试过配置NVIDIA PRIME渲染卸载。AI说这是NVIDIA官方支持的方法,兼容性比较好并且不需要频繁重启或者注销会话即可按需使用独立显卡。
首先确保安装了必要的软件包: sudo pacman -S nvidia-dkms nvidia-utils lib32-nvidia-utils nvidia-settings
nvidia-dkms适用于经常更新内核的滚动发行版,可以减少内核升级后驱动失效的风险。
为了让PRIME正常工作,需要为NVIDIA驱动启用DRM内核模式设置。我是systemd-boot而不是grub,进入/efi/loader/entries,找到自己内核的.conf内核文件。比如我用的是zen内核,名字就是
927809fe471445ebba7ed8b3860115c0-6.16.5-arch1-1.conf
927809fe471445ebba7ed8b3860115c0-6.16.5-arch1-1-fallback.conf
927809fe471445ebba7ed8b3860115c0-6.16.5-zen1-1-zen.conf
927809fe471445ebba7ed8b3860115c0-6.16.5-zen1-1-zen-fallback.conf第三个,格式是机器码-版本号-内核名称.conf。编辑.conf文件,修改options行,加入 nvidia_drm.modeset=1。更改完毕之后重启。
配置完成后,系统默认使用集成显卡,这个时候当需要用独立显卡运行程序的时候,要在命令前加上特定的环境变量。
# 对于Vulkan
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia application_name# 对于OpenGL
__NV_PRIME_RENDER_OFFLOAD=1 application_name为了方便实际上可以安装nvidia-prime包。直接 prime-run application_name 即可。
其实还有一个老牌应用是 optimus-manager ,但是社区普遍反馈说在Wayland会话下,尤其是在KDE Plasma 6下面的体验不佳。
配置好,重启之后,新问题又出来了。改成NVIDIA Advanced Optimus之后感觉整个系统都不流畅了。KDE界面倒还好,尤其是浏览器和electron的滚动都很卡。
❯ inxi -G
Graphics:
Device-1: Intel Alder Lake-S [UHD Graphics] driver: i915 v: kernel
Device-2: NVIDIA AD107M [GeForce RTX 4060 Max-Q / Mobile] driver: nvidia
v: 580.76.05
Device-3: Quanta HP True Vision FHD Camera driver: uvcvideo type: USB
Display: wayland server: X.org v: 1.21.1.18 with: Xwayland v: 24.1.8
compositor: kwin_wayland driver: X: loaded: modesetting,nvidia dri: iris
gpu: i915 resolution: 2560x1440~240Hz
API: EGL v: 1.5 drivers: iris,nvidia,swrast
platforms: gbm,wayland,x11,surfaceless,device
API: OpenGL v: 4.6.0 compat-v: 4.5 vendor: intel mesa v: 25.2.1-arch1.2
renderer: Mesa Intel UHD Graphics (ADL-S GT0.5)
API: Vulkan v: 1.4.321 drivers: nvidia,intel surfaces: N/A
Info: Tools: api: clinfo, eglinfo, glxinfo, vulkaninfo
de: kscreen-console,kscreen-doctor gpu: nvidia-settings,nvidia-smi
wl: wayland-info x11: xdpyinfo, xprop, xrandr
╭─░▒▓ ╱ ~ ───────────────────────────────────────────────────────────── ✔ ╱ 4s ╱ 23:27:46 ▓▒░
╰─系统配置是完全正确的, driver: X: loaded: modesetting,nvidia dri: iris 这一行明确指出,驱动显示器、负责渲染桌面的GPU是i915,也就是Intel集成显卡。iris是Intel最新且性能最好的OpenGL驱动。查看 nvidia-smi :
Wed Aug 27 23:28:25 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.76.05 Driver Version: 580.76.05 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 ... On | 00000000:01:00.0 Off | N/A |
| N/A 51C P8 1W / 80W | 15MiB / 8188MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1128 G /usr/lib/Xorg 4MiB |
+-----------------------------------------------------------------------------------------+这个时候怀疑硬件加速的问题,要么是回退到了软件渲染,要么是在通过XWayland运行。尝试强制应用以原生Wayland模式运行并且启用硬件加速:
cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications
nvim ~/.local/share/applications/google-chrome.desktop给Exec开头的那一行后面加上几个参数,比如这样:Exec=/usr/bin/google-chrome-stable --enable-features=UseOzonePlatform --ozone-platform=wayland %U
重启之后无效。仍然滚动卡顿。
安装vulkan-tools,验证后发现,vkcube默认以独显进行渲染。其实这个时候已经在怀疑,是不是NVIDIA OPTIMUS在Linux的适配,尤其是Arch这种滚动发行版的适配就是一坨屎了。但是还是再验证一下确认配置环境没错:
❯ ls /usr/share/vulkan/icd.d/
intel_hasvk_icd.i686.json intel_icd.i686.json nvidia_icd.json
intel_hasvk_icd.x86_64.json intel_icd.x86_64.json
❯ ls -l /usr/share/vulkan/icd.d/
.rw-r--r-- 184 root 20 8月 23:59 intel_hasvk_icd.i686.json
.rw-r--r-- 182 root 24 8月 22:02 intel_hasvk_icd.x86_64.json
.rw-r--r-- 178 root 20 8月 23:59 intel_icd.i686.json
.rw-r--r-- 176 root 24 8月 22:02 intel_icd.x86_64.json
.rw-r--r-- 140 root 16 8月 05:06 nvidia_icd.json
❯ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json vkcube
Selected WSI platform: wayland
Selected GPU 0: Intel(R) UHD Graphics (ADL-S GT0.5), type: IntegratedGpu
❯ ls -l /etc/X11/xorg.conf.d
.rw-r--r-- 263 root 23 8月 00:12 00-keyboard.conf
❯ ls -l /etc/modeprobe.d
"/etc/modeprobe.d": No such file or directory (os error 2)
╭─░▒▓ ╱ ~/.local/share/applications ──────────────────────────────────────── 2 ✘ ╱ 23:51:52 ▓▒░
╰─VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json vkcube 的运行结果成功在Intel集成显卡上运行了vkcube,所以问题不是出在系统的底层渲染上,而是出在Vulkan图形层。怀疑是Vulkan加载器在选择使用哪个GPU的时候,默认优先选择了NVIDIA显卡而不是集成显卡,这也有可能是导致浏览器等Electron应用(Chrome和LinuxQQ都是Electron应用)卡顿的根源,因为现代浏览器使用Vulkan或OpenGL进行硬件加速渲染。但这个时候发现,本地的配置文件已经相当混乱,envycontrol的配置文件又在和系统打架,Nvidia和Intel,尤其是Nvidia和Linux的集成本来就不好,思来想去还是放弃了。Discrete也不是不能用,更何况现代的Wayland(KDE可能相对会差一些,Hyprland之类的WM会好点)已经有针对全屏游戏渲染下的智能方案了,不大会占用显卡的显存。折腾双显卡估计也没啥好结果,插电使用的话无非噪音大一点,而这并不是什么大问题,不拔掉电源的话续航也是不必担心的问题。唯一需要顾虑的就是looking-glass这种依赖双显卡的工具用不了,不过反作弊的游戏反正我也不玩.jpg