Eu freqüentemente trabalho em estações de emparelhamento onde existem vários teclados instalados. Posso usar setxkbmap
com -device <ID>
para definir o layout de um teclado específico (usando um ID dexinput
), mas geralmente não é óbvio em que teclado estou. Seria melhor evitar a tentativa e a tentativa de ambos os teclados, então eu gostaria de escrever uma ferramenta rápida para obter essas informações setxkbmap
. Eu esperaria um caso de uso típico como o seguinte:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
Qual interface fornece essas informações no Linux? Idealmente, ele deve funcionar sem o X, mas isso não é um requisito (não parece haver muitas ferramentas que suportem isso sem o X).
Resultados até agora:
- O Linux deve saber em qual teclado estou digitando para oferecer suporte a diferentes layouts para vários teclados simultaneamente.
xinput
→ list.c →list_xi2
→XIQueryDevice
fornece IDs de dispositivos utilizáveis porsetxkbmap
.showkey
exev
não imprima os IDs do teclado.xinput list-props $ID
mostra para onde os eventos do teclado são enviados . No entanto, usando o código de outra resposta , parece que este dispositivo não imprime nada para identificar o teclado.Uma solução quase possível é executar
xinput --test <ID> &
cada ID de teclado e ver qual retorna algo primeiro. O problema disso é descobrir quais "teclados" são realmente teclados:$ 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
pressionar uma tecla no teclado correspondente, deverá ver "lixo" aparecendo, para que as teclas sejam realmente direcionadas para um arquivo dev e não para os outros.