这是 8BitDo SN30 pro+ 控制器。它通过 USB 蓝牙适配器连接。它以前工作得很好。但在最近的升级之后的某个时候,整个行为都变差了。它以前在连接时会振动 - 现在再也不会了。它可以在连接后立即随机断开连接。不知何故,通过重新启动和重新配对,我最近确实让它在 Steam 游戏中工作了几次。但这太痛苦了。
blueman-applet
我看到它在和 中已配对、信任并连接bluetoothctl
info
。但 Steam 检测不到它:Steam > 设置 > 控制器显示“未检测到控制器”。
而且我没有在 下看到任何与控制器相关的内容/dev
。即根据Arch Gamepad wiki,它应该在 下显示为/dev/input/jsX
和/dev/input/by-id/
。在我的情况下,没有jsX
设备,/dev/input/
只包含eventX
和mice
。mouse0
我在下面看到的/dev/input/by-id/
只有我的键盘和鼠标。 下还有更多内容/dev/input/by-path/
:
$ ls /dev/input/by-path/ -l
total 0
lrwxrwxrwx 1 root root 9 Feb 8 03:31 pci-0000:09:00.4-usb-0:2:1.1-event-mouse -> ../event3
lrwxrwxrwx 1 root root 9 Feb 8 03:31 pci-0000:09:00.4-usb-0:2:1.1-mouse -> ../mouse0
lrwxrwxrwx 1 root root 9 Feb 8 03:31 pci-0000:09:00.4-usbv2-0:2:1.1-event-mouse -> ../event3
lrwxrwxrwx 1 root root 9 Feb 8 03:31 pci-0000:09:00.4-usbv2-0:2:1.1-mouse -> ../mouse0
lrwxrwxrwx 1 root root 9 Feb 8 03:31 platform-eeepc-wmi-event -> ../event4
lrwxrwxrwx 1 root root 9 Feb 8 03:31 platform-i8042-serio-0-event-kbd -> ../event2
我认为i8042
是键盘驱动程序。我不确定是什么platform-eeepc-wmi-event
。
所以,我猜测,蓝牙连接了设备,但控制器无法被识别。
当我journalctl -f
通过蓝牙连接时,我得到了这个:
dunst[10327]: CRITICAL: Source ID 73 was not found when attempting to remove it
kernel: nintendo 0005:057E:2009.0008: unknown main item tag 0x0
kernel: nintendo 0005:057E:2009.0008: hidraw3: BLUETOOTH HID v80.01 Gamepad [Pro Controller] on 44:01:bb:ad:a0:55
kernel: nintendo 0005:057E:2009.0008: Failed to get joycon info; ret=-110
kernel: nintendo 0005:057E:2009.0008: Failed to retrieve controller info; ret=-110
kernel: nintendo 0005:057E:2009.0008: Failed to initialize controller; ret=-110
kernel: nintendo 0005:057E:2009.0008: probe - fail = -110
kernel: nintendo: probe of 0005:057E:2009.0008 failed with error -110
那么,它被识别为任天堂控制器但无法初始化?我该如何解决这个问题?我应该为控制器安装一些驱动程序吗?
更新:我还将控制器上的 FW 更新为最新支持的版本 v6.01。但仍然nintendo ... failed to initialize the controller
出现相同的错误journalctl -f
。
看起来,将任天堂驱动程序列入黑名单以让通用驱动程序接管似乎有效,就像这个 Arch 论坛帖子中所说的那样。我会对其进行更多测试,但似乎控制器在列入黑名单后可以正常工作,尽管它在蓝牙连接上仍然不会晃动。我猜,晃动是任天堂驱动程序的一部分,当时它确实运行良好。
所以,我做了以下事情:
blacklist hid_nintendo
到/etc/modprobe.d/blacklist.conf
(我通过 找到了驱动程序名称$ lsmod | grep -i nintendo
) - 最好为此创建一个单独的文件,因为 Ubuntu 更新将与blacklist.conf
系统中的用户更改相冲突$ lsmod | grep -i nintendo
什么都没有显示,没有hid_nintendo
,但是你可以看到hid_generic
那里journalctl -f
显示以下内容:/dev/input/js0
设备确实存在/dev/input/by-id
jstest-gtk
工作/dev/input/js0