Я часто працюю на парних станціях, де встановлено кілька клавіатур. Я можу використовувати 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натиснете клавішу на відповідній клавіатурі, ви побачите "сміття", що відображається, тож ваші натискання клавіш дійсно спрямовані в один файл розробників, а не в інші.