重启后 USB 鼠标停止工作

重启后 USB 鼠标停止工作

我有一个无线 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 端口并重新启动了计算机,但没有任何效果。

答案1

因此,经过几个小时的努力,我终于解决了这个问题:

连接 USB 加密狗后,等待几分钟,然后重新启动驱动程序

sudo rmmod usbhid
sudo modprobe usbhid

它为我解决了这个问题。

我以前也尝试过这个,但没有等待足够长的时间。现在我将尝试解释为什么会发生这种情况,以及为什么这个解决方案有效:

  • 我注意到的第一件事是,如果我lsusb在连接加密狗后立即运行,则需要一段时间(平均大约一分钟)才能完成输出。

  • 鼠标位于总线 02 上,接口 0 已绑定到驱动程序 usbhid,而接口 1 未绑定。这显示在输出中lsusb -t

    /:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
        |__ Port 1: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 1: Dev 3, If 1, Class=Human Interface Device, Driver=, 12M
    /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
        |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=, 12M
            |__ Port 3: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
            |__ Port 3: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
            |__ Port 4: Dev 5, If 0, Class=Video, Driver=uvcvideo, 480M
            |__ Port 4: Dev 5, If 1, Class=Video, Driver=uvcvideo, 480M
    
  • 但是,当我尝试以 root 身份绑定它时echo 2-1:1.1 > /sys/bus/usb/drivers/usbhid/bind,它返回错误bash: echo: write error: Connection timed out。这是我唯一无法弄清楚为什么它不起作用的部分。

  • 当我断开并重新连接加密狗时,它会生成以下几行dmesg

    [ 8390.096097] usb 2-1: USB disconnect, device number 2
    [ 8395.540313] usb 2-1: new full-speed USB device number 3 using xhci_hcd
    [ 8395.714320] usb 2-1: New USB device found, idVendor=3151, idProduct=3020, bcdDevice= 0.02
    [ 8395.714336] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [ 8395.714340] usb 2-1: Product: Wireless Device
    [ 8395.714344] usb 2-1: Manufacturer: YICHIP
    [ 8395.730764] input: YICHIP Wireless Device as /devices/pci0000:00/0000:00:10.0/usb2/2-1/2-1:1.0/0003:3151:3020.0004/input/input18
    [ 8395.789546] hid-generic 0003:3151:3020.0004: input,hidraw1: USB HID v2.00 Keyboard [YICHIP Wireless Device] on usb-0000:00:10.0-1/input0
    [ 8421.452199] usbhid 2-1:1.1: can't add hid device: -110
    [ 8421.452241] usbhid: probe of 2-1:1.1 failed with error -110
    

    usbhid 添加接口 1 失败,错误号为 -110,根据答案的意思是“传输完成前超时已过”。我的假设是,由于连接加密狗和被识别之间存在延迟lsusb,因此它可能需要太长时间才能响应 usbhid 并给出错误 -110。

如果这个假设是正确的,那么在正确建立 usb 连接后初始化 usbhid 应该可以工作,而且确实如此。这并不能保证我的解释是正确的,也不能解释为什么我不能手动将驱动程序绑定到接口,所以如果有另一种解释来解释这里发生的事情会很有趣。但重新启动驱动程序的解决方案有效,所以我现在认为这是一个令人满意的答案。

相关内容