Kali Linux: замръзваща клавиатура и USB autosuspend
Купих си нов лаптоп, инсталирах му Kali Linux, гладка инсталация, всичко си работи, но ?!?! След 20-30 минути забелязах едно досадно заспиване на клавиатурата за няколко секунди през съвсем случаен период. Опитах се да не му обръщам внимание, защото от време на време направо изчезва, после за 5 минути може да заспи три пъти по 5 секунди — пиша, а на екрана букви няма, после изведнъж се появяват.
Търсенето на причината
sudo cat /var/log/messages | grep usb

Първото, което установих, е че в логовете се появяват странни неща — клавиатурата ми изчезва и след това се разпознава отново. Същото се вижда и с dmesg, което е по-удобно, защото може да се следи в реално време, докато проблемът се случва:
sudo dmesg -w | grep -i usb
Редовете, които издават проблема, изглеждат като usb 1-3: USB disconnect, последвани секунда по-късно от ново usb 1-3: new full-speed USB device. Устройството не е повредено — системата само го приспива и после го буди.
Причината: USB autosuspend
Ядрото приспива USB устройства, които не се използват, за да пести ток. За външен диск това е разумно. За вградена клавиатура е точно грешното решение: пауза при писане от няколко секунди се тълкува като бездействие, портът заспива и първите натиснати клавиши се губят, докато се събуди.
Решението
sudo vim /etc/default/grub
Променям параметъра:
GRUB_CMDLINE_LINUX_DEFAULT="quiet usbcore.autosuspend=-1"
След което обновявам grub и рестартирам системата:
sudo update-grub
sudo reboot
Проверка, че е сработило
cat /sys/module/usbcore/parameters/autosuspend
Трябва да върне -1. Стойността по подразбиране е 2 — тоест две секунди бездействие са достатъчни, за да заспи устройството.
По-щадящият вариант
usbcore.autosuspend=-1 изключва приспиването за всички USB устройства, което на лаптоп означава малко по-кратка батерия. Ако това има значение, същото се постига само за проблемното устройство. Първо се намира кой порт е:
lsusb
grep . /sys/bus/usb/devices/*/product
После се изключва точково — тук за устройството на 1-3:
echo on | sudo tee /sys/bus/usb/devices/1-3/power/control
Това не оцелява рестарт. За постоянно се прави с udev правило в /etc/udev/rules.d/, което хваща устройството по производител и модел от lsusb.
Когато причината е друга
Ако в лога няма USB disconnect, търсенето е в грешната посока. Тогава кандидатите са драйверът на тъчпада, който при някои модели дели контролер с клавиатурата, или i8042 параметрите на ядрото при вътрешна PS/2 клавиатура — там помага i8042.nomux=1 или i8042.reset, добавени по същия начин в grub.