这两天配了台27寸的显示器,发现小红点在大屏幕下的移动速度和操作精度都跟不上我的要求,便买个蓝牙鼠标,刚好iPad也能用。
到货以后发现鼠标在iPad上能用,但是我的arch下怎么也用不了,无论是蓝牙还是用USB适配器,我以为是鼠标的问题,于是又买了个廉价的有线鼠标,结果也不能用,让我大吃一惊,明明Arch的内核都是最新的呀。
于是我开始了一整个上午的排错,具体过程可以看这里:[solved]usb mouse not working
先是手写了个udev rules放在 /etc/udev/rules.d/,试图用udev来处理这个鼠标,事实证明并没有用;期间我还选择用了不同的kernel modules来处理,包括(mousedev, psmouse, libps2,serio)
然后呢,我想是不是我的内核太新了,对太老的usb设备已经不支持了?我想考虑下重新编译下驱动。可是我的usb鼠标是最廉价的山寨鼠标,他的vendorID 居然是0000, 根本没有专用固件,更何况编译对我而言太麻烦了。
接着在论坛大神的指点下,我检查了是不是对usb设备开启了autosuspend也就是省电模式,又尝试禁用省电模式,事实证明这也没有用。
无奈呀,绝望呀,折腾了一上午,居然什么都没搞定,我留到晚上再搞吧。
不过回头想想,也至少了解了这些命令比如
用 `udevadm control - -reload && udevadm trigger` 来重载udev
`udvadm control - -log-priority=debug` 把udevadm设成debug模式,然后用`journalctl -f`来查看事件,或者用udevadm monitor来检查事件
到了晚上,狗血却又柳暗花明的事情发生了,在我上网搜了一圈之后,我发现正常Linux处理usb鼠标的都是`hid-generic`或者是`usbhid`,似乎用不上我自己来写udev rules的,难道我的内核没有加载这两个模块,于是我手动尝试加载
`modprobe hid_generic && modprobe usbhid`
结果系统提示我这两个模块不存在
```
sudo modprobe usbhid
modprobe: FATAL: Module usbhid not found in directory /lib/modules/5.6.11-arch1-1
sudo modprobe hid_generic
modprobe: FATAL: Module hid_generic not found in directory /lib/modules/5.6.11-arch1-1
```
这就有意思了,据我所知我在编译内核的时候应该是可能包含了usb驱动的内核模块的,怎么可能会会加载不了呢?百思不得其解,我把这个发现update在论坛上面
论坛中的大佬一语中地:你怕不会是更新了内核没有reboot吧??
果然!一波重启之后,鼠标已经能用了,连我祖传的十几岁的webcam都用被驱动了, `lsmod | grep hid ` 里面usbhid和hid-generic都在,鼠标直接由hid-generic驱动了。
事实证明啊,linux的内核驱动向来是最完善的,很少有不能驱动的硬件哪
refer: 配置usb设备省电模式 Arch Linux省电模式可能引发的问题