我有一个无线 USB 鼠标,直到两天前才可以正常工作,然后我的笔记本电脑没电了,当我充电并重新打开它时,它不再工作了。
我正在运行 Ubuntu 22.04,当我运行时lsusb
,USB 在总线 002 设备 003 上被识别
~ lsusb
Bus 001 Device 005: ID 13d3:5a07 IMC Networks VGA UVC WebCam
Bus 001 Device 004: ID 13d3:3526 IMC Networks Bluetooth Radio
Bus 001 Device 003: ID 04f3:0903 Elan Microelectronics Corp. ELAN:Fingerprint
Bus 001 Device 002: ID 0438:7900 Advanced Micro Devices, Inc. Root Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 003: ID 3151:3020 YICHIP Wireless Device
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
但是,它没有出现在 上xinput
,并且不起作用。我给鼠标充电,更换了USB端口,并重新启动了计算机,但没有任何效果。
因此,经过几个小时的混乱,我已经能够解决这个问题:
连接USB加密狗后,等待几分钟,然后重新启动驱动程序
它为我解决了这个问题。
我以前尝试过这个,但之后没有等待足够的时间。我现在将尝试解释为什么会发生这种情况,以及为什么这个解决方案有效:
我注意到的第一件事是,如果我
lsusb
连接加密狗后立即运行,则需要一段时间(平均大约一分钟)才能完成输出。鼠标位于总线 02 上,接口 0 绑定到驱动程序 usbhid,而接口 1 未绑定。这显示在以下输出中
lsusb -t
:但是,当我尝试将其与
echo 2-1:1.1 > /sys/bus/usb/drivers/usbhid/bind
root 绑定时,它返回错误bash: echo: write error: Connection timed out
。这是我唯一无法弄清楚为什么它不起作用的部分。当我断开并重新连接加密狗时,它会在以下位置生成这些行
dmesg
:usbhid 无法添加接口 1,错误为 -110,根据此答案,这意味着“传输完成之前超时已过期”。我的假设是,由于连接加密狗和它被识别之间存在延迟
lsusb
,因此响应 usbhid 可能需要太长时间,并且会给出错误 -110。如果这个假设是正确的,那么在正确建立 USB 连接后初始化 usbhid 应该可以工作,而且确实如此。这并不能保证我的解释是正确的,也不能解释为什么我不能手动将驱动程序绑定到接口,因此如果对这里发生的情况有另一种解释,那就会很有趣。但重新启动驱动程序的解决方案是有效的,所以我现在认为这是一个令人满意的答案。