blog.garaż.net

15 październik 2016

Problemy z klawiaturą/myszką USB pod pingwinkiem

Nie jest nowością, że część urządzeń dostępnych na rynku nie radzi sobie zbyt dobrze z obsługą wszystkich wytycznych, standardów, itd. i czasami trzeba się uciec do poprawiania niedogodności we własnym zakresie. Nie inaczej jest z klawiaturami mechanicznymi i niektórymi myszkami uważanymi za produkty z nieco wyższej półki. Kilka modeli klawiatur jakie aktualnie posiadam i jeszcze jeden, który niestety wrócił do fabryki oraz kilka starszych myszek, z których już nie korzystam mają problem z usypianiem pod pingwinkiem. Po pierwsze następuje to zbyt szybko i często, po drugie urządzenia w takim trybie nie są w stanie rejestrować poprawnie wciśnięcia klawiszy lub ruchu co objawia się wprowadzeniem losowych znaków, ich gubieniem, skokowym poruszaniem się kursora lub nie wybudzaniem się z uśpienia w ogóle. Podejrzewam, że problem dotyczy większej ilości urządzeń ale są to na tyle popularne konstrukcje albo konstrukcje korzystające z tych samych kontrolerów, że system zarządzania energią jest już odpowiednio skonfigurowany w systemie.

Tworzenie reguły

TL;DR Jeśli masz wrażenie, że klawiatura po naciśnieciu kolejnego klawisza poprzedzonego dłuższą chwilą bezczynności wprowadza błędne znaki lub myszka wyłącza się, nie chce się wybudzić i pomaga tylko fizyczne wypięcie i wpięcie z portu, to rozwiązanie tych problemów jest wyłączenie automatycznego usypiania dla tych urządzeń. Konfiguracja sprowadza się do utworzenia reguły dla systemu udev:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", ATTR{power/control}="on"

Gdzie 1234 to identyfikator producenta, a 5678 to id urządzenia. Regułę zapisujemy we własnym pliku w katalogu /etc/udev/rules.d, np. pod nazwą 10-local-powersave.rules. Dla pewności możemy zrestartować usługę udev1 ale nie powinno to być konieczne.

Odnajdywanie id producenta i urządzenia

Oba magiczne identifikatory można znaleźć korzystając z komendy lsusb, która wypisze wszystkie urządzenia aktualnie podpięte pod kontroler USB. Dla ułatwienia warto zrobić listę urządzeń przed i po podłączeniu, bo prawie na pewno będzie tam sporo wpisów, które mogą być trudne do zidentyfikowania. Przykładowo u mnie po podpięciu problematycznej klawiatury i wydaniu polecenia lsusb otrzymuję między innymi taką linijkę:

Bus 003 Device 004: ID 04d9:0024 Holtek Semiconductor, Inc. 

W powyższym przykładzie Holtek to nazwa producenta kontrolera, który został wykorzystany w klawiaturze i nijak się ma do nazwy producenta i modelu klawiatury. Natomiast szukane id to odpowiednio 04d9 oraz 0024.

I na koniec jak wygląda mój plik z regułami dla problematycznego sprzętu:

# Logitech
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="c408", ATTR{power/control}="on"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="c52b", ATTR{power/control}="on"

# A4Tech
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="09da", ATTR{idProduct}=="000a", ATTR{power/control}="on"

# Vortex Pok3r
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="04d9", ATTR{idProduct}=="0141", ATTR{power/control}="on"

# Magicforce 68
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="04d9", ATTR{idProduct}=="0024", ATTR{power/control}="on"

Dla jasności, linijki zaczynające się od znaku # oznaczają komentarz i nie są interpretowane, używamy ich tylko dla poprawy czytelności.


  1. Jesli udev w waszym systemie nie wykrywa zmian zachodzących na dysku powinno pomóc wykonanie polecenia udevadm control --reload-rules

Comments !