Ratón y teclado USB a trompicones …

… y todo por no querer fijarme en los detalles.

Hasta hace poco tenía un portátil como máquina principal en casa. No recuerdo cuándo exactamente el ratón y el teclado, ambos externos y por conexión USB, mostraban un comportamiento errático: se quedaban congelados si nos los usabas durante unos instantes.

Desconectarlos y volver a conectarlos no funcionaba. O a veces parecía que sí y luego pues no. Hasta que no reiniciaba el sistema no conseguía que volviese en sí.

Entre este problema y que la batería mostraba todos los problemas que podía tener menos la combustión espontánea decidí cambiar a un sobremesa. Diferente arquitectura, diferentes dispositivos, … pero mismo sistema porque usé el disco SSD anterior. Luego lo traspasé a otro de mayor capacidad pero la configuración seguía siendo la misma.

Y, un día, vuelta a empezar. El ratón y el teclado se comportaban exactamente igual que con el portátil. Venga, ¿ en serio ?

Así que intenté reproducir el problema y me di cuenta de que era un problema de recuperación tras el paso a suspensión del sistema. Tras volver todo funcionaba pero a los pocos instantes ratón y teclado volvían a las andadas.

Así que tocó mirar la configuración del sistema, heredada del portátil, aunque antes hice alguna exploración por la red. Y sí, resulta que el núcleo tiene en el módulo USB (compilado estáticamente en Debian y Ubuntu) un mecanismo para suspender o no los dispositivos ociosos para ahorrar batería.

Basta con cambiar los valores del módulo y reconectar los dispositivos para que no vuelva a suceder hasta … sí, hasta que el sistema entre en suspensión de nuevo. Y vuelta a empezar.

Al fin, después de muchas recetas complejas y retorcidas con la configuración del núcleo y el módulo usbcore, encuentro una respuesta que da justamente en el clavo: laptop-mode-tools.

Este paquete, instalado en portátiles, ayuda a ahorrar batería pasando a suspensión los dispositivos sin uso.

# /etc/laptop-mode/conf.d/usb-autosuspend.conf
AUTOSUSPEND_USBTYPE_BLACKLIST="usbhid"

Esto es, los dispositivos de tipo HID no deben usarse para dicho ahorro.

En el ordenador de sobremesa ha bastado con quitar el paquete, obviamente, y con el portátil aún tengo que hacer la prueba, pero puedo imaginarme que si la batería está mal, tal vez incluso el circuito de alimentación que ya estaba también tonteando, el sistema entendiese que estaba siempre mal de energía y le diese por comportarse así con el ratón y el teclado.

No es de extrañar que tuviese que reiniciarlo después de cerrar y abrir la tapa, y que el sistema no indicase error alguno: era el comportamiento esperado.