Linux 5.16 某些游戏手柄连接异常

Linux 内核 5.16 版本于前几天正式发布了,小山用的是 ArchLinux,自然是第一时间升级了内核。Linux 5.16 加入了很多令人兴奋的特性,比如帮助 Wine 更好的运行 Windows 游戏的 FUTEX2 系统调用。

还有一个针对游戏显著的变化是加入了 Nintendo Switch 系列手柄的支持,不需要第三方驱动便可以在 Linux 上使用 NS 的手柄。但就是这个功能,影响了那些即支持 PC,又支持 NS 的游戏手柄。

因为这些多平台支持的游戏手柄一般是先用 NS 手柄的协议进行通信协商,如果协商失败,再回退到传统的 Xbox 360 协议。由于 Linux 现在原生支持 NS 游戏手柄,当这些手柄连接到运行 Linux 5.16 内核的设备时,它们就会被系统识别为 NS 游戏手柄,因为 NS 协议协商成功了。虽然说识别为 NS 手柄并不影响这些手柄的使用,但是某些手柄可能会有些奇奇怪怪的问题,比如我手里的北通宙斯精英版,被识别为 NS 手柄后,摇杆会一直偏移在左下角,这就导致无法正常使用它游玩游戏。

解决方法也很简单,只需把支持 NS 手柄的内核模块 hid_nintendo 加入黑名单,防止系统自动加载该模块,这样游戏手柄进行协议协商时就会回退到传统的 Xbox 360 协议。

如果需要同时连接 NS 原生手柄和第三方手柄,可以先连接第三方手柄,当第三方手柄连接成功后,再手动加载 hid_nintendo 模块,然后连接 NS 原生手柄即可,因为连接成功后是不会再切换协议的,除非重新连接。

操作命令如下所示:

加入黑名单:echo "blacklist hid_nintendo" | sudo tee /etc/modprobe.d/no_ns_controllers.conf

移出黑名单:sudo rm /etc/modprobe.d/no_ns_controllers.conf

手动加载模块:sudo modprobe hid_nintendo

手动卸载模块:sudo modprobe -r hid_nintendo