Eu tenho um mouse USB sem fio que funcionou até dois dias atrás, então meu laptop ficou sem bateria e quando carreguei e liguei novamente, ele não estava mais funcionando.
Estou rodando o Ubuntu 22.04 e quando executo lsusb
, o usb é reconhecido no Bus 002 Device 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
No entanto, ele não aparece xinput
e não está funcionando. Recarreguei o mouse, mudei a porta USB e reiniciei o computador, mas nada funcionou.
Então, depois de horas brincando, consegui resolver o problema:
Depois de conectar o dongle USB, aguarde alguns minutos e reinicie o driver
E isso resolveu o problema para mim.
Eu já havia tentado isso antes, mas sem esperar o suficiente depois. Tentarei agora explicar por que isso aconteceu e por que essa solução funciona:
A primeira coisa que notei foi que, se eu executasse
lsusb
assim que conectasse o dongle, demoraria um pouco (cerca de um minuto em média) para finalizar a saída.O mouse está no barramento 02 e enquanto a interface 0 está vinculada ao driver usbhid, a interface 1 está desvinculada. Isso é mostrado na saída de
lsusb -t
:No entanto, quando tento vinculá-lo
echo 2-1:1.1 > /sys/bus/usb/drivers/usbhid/bind
como root, ele retorna o errobash: echo: write error: Connection timed out
. Esta é a única parte que não consegui descobrir por que não funciona.Quando eu desconecto e reconecto o dongle, ele gera estas linhas em
dmesg
:usbhid falha ao adicionar a interface 1 com erro -110, que de acordo com esta resposta significa "Tempo limite expirou antes da transferência ser concluída". Minha hipótese é que como há um atraso entre a conexão do dongle e sua identificação por
lsusb
, provavelmente está demorando muito para responder ao usbhid e dá o erro -110.Se esta hipótese estiver correta, inicializar o usbhid após a conexão USB ser estabelecida corretamente deverá funcionar, e de fato funciona. Isso não garante que minha explicação esteja correta, nem explica por que não posso simplesmente vincular o driver à interface manualmente, então seria interessante se houvesse outra explicação sobre o que está acontecendo aqui. Mas a solução de reiniciar o driver funciona, então considerarei esta uma resposta satisfatória por enquanto.