Я часто працюю на парних станціях, де встановлено кілька клавіатур. Я можу використовувати setxkbmap
з , -device <ID>
щоб встановити макет для конкретної клавіатури (використовуючи ідентифікатор зxinput
), але часто це не очевидно , яка клавіатура я в. Було б краще уникати спроб обох клавіатур, тому я хотів би написати швидкий інструмент для отримання цієї інформації дляsetxkbmap
. Я очікую типового випадку використання, наприклад:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
Який інтерфейс надає цю інформацію в Linux? В ідеалі він повинен працювати без X, але це не є вимогою (не здається, що існує багато інструментів, які підтримують це без X).
Результати наразі:
- Linux повинен знати, на якій клавіатурі я набираю для підтримки різних макетів для декількох клавіатур одночасно.
xinput
→ list.c →list_xi2
→XIQueryDevice
надає ідентифікатори пристрою, якими можна скористатисяsetxkbmap
.showkey
іxev
не друкувати ідентифікатори клавіатуриxinput list-props $ID
показує, куди надсилаються події на клавіатурі . Однак, використовуючи код з іншої відповіді, схоже, цей пристрій нічого не друкує для ідентифікації клавіатури.Одне майже можливе рішення - запустити
xinput --test <ID> &
кожен ідентифікатор клавіатури і побачити, хто з них повертає щось першим. Проблема в тому, що з'ясувати, які "клавіатури" є насправді клавіатурами:$ 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
натиснете клавішу на відповідній клавіатурі, ви побачите "сміття", що відображається, тож ваші натискання клавіш дійсно спрямовані в один файл розробників, а не в інші.