Często pracuję na parujących stacjach, na których jest zainstalowanych wiele klawiatur. Mogę użyć za setxkbmap
pomocą, -device <ID>
aby ustawić układ dla określonej klawiatury (używając identyfikatora zxinput
), ale często nie jest oczywiste, na której klawiaturze jestem. Lepiej byłoby uniknąć próbowania obu klawiatur, więc chciałbym napisać szybkie narzędzie do uzyskania tych informacji setxkbmap
. Oczekiwałbym typowego przypadku użycia takiego jak ten:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
Który interfejs udostępnia te informacje w systemie Linux? Idealnie powinno działać bez X, ale nie jest to wymagane (wydaje się, że nie ma wielu narzędzi, które obsługują to bez X).
Dotychczasowe ustalenia:
- Linux musi wiedzieć, na której klawiaturze piszę, aby obsługiwać różne układy wielu klawiatur jednocześnie.
xinput
→ lista. C →list_xi2
→XIQueryDevice
zapewnia identyfikatory urządzeń, których można używaćsetxkbmap
.showkey
ixev
nie drukuj identyfikatorów klawiatury.xinput list-props $ID
pokazuje, gdzie wysyłane są zdarzenia z klawiatury . Jednak przy użyciu kodu z innej odpowiedzi wydaje się, że to urządzenie nie drukuje niczego, aby zidentyfikować klawiaturę.Jednym prawie możliwym rozwiązaniem jest uruchomienie
xinput --test <ID> &
dla każdego identyfikatora klawiatury i sprawdzenie, który z nich coś zwraca jako pierwszy. Problem polega na tym, aby dowiedzieć się, które „klawiatury” są tak naprawdę klawiaturami:$ xinput | grep keyboard ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Power Button id=8 [slave keyboard (3)] ↳ Sleep Button id=9 [slave keyboard (3)] ↳ WebCam SC-13HDL10931N id=10 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
less -f /dev/input/eventX
klawisz na odpowiedniej klawiaturze, powinieneś zobaczyć „śmieci”, więc twoje naciśnięcia klawiszy są rzeczywiście skierowane do jednego pliku programisty, a nie do innych.