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.Respostas:
Desativar dispositivo
Aqui está uma idéia para identificar qual teclado é qual. Você pode usar o comando xinput para ativar e desativar dispositivos.
Exemplo
A saída acima mostra os vários dispositivos que tenho no meu laptop Thinkpad. Eu só tenho 1 teclado conectado, este:
Agora dê uma olhada nas propriedades disponíveis neste dispositivo:
Do exposto acima, você pode ver que ele está ativado, então vamos desativá-lo:
Para habilitá-lo:
A ideia?
Você pode ativar a desativação de um dos teclados usando este comando para determinar em qual deles está.
Referências
fonte
A pergunta parece um pouco contraditória, pois você está citando as ferramentas do X, mas pede uma solução que "idealmente funcione sem o X".
Sobre sua 4ª descoberta:
xinput
você receberá a correspondênciapelo menos com a seguinte versão
Primeiro passo: detectando o dispositivo de evento do teclado em C
Muito obrigado a esta página . Retirei a maioria das verificações de segurança do código emprestado lá, para fins de clareza, no código real você provavelmente as deseja.
Observe que as teclas pressionadas são repetidas, portanto, você pode realmente pedir ao usuário que pressione uma tecla modificadora (Shift, Control ...) em vez de qualquer tecla.
Segundo passo: use xinput para obter o X ID do nome do dispositivo
Compile a fonte C acima e use desta maneira:
xinput list --id-only "keyboard:$(sudo ./a.out /dev/input/event*)"
fonte
/dev/input/by-id
/dev/input/event*
- tenteitail
ting, mas sem sucesso.Mais pesquisas revelaram outra solução usando o Bash comum e uma conta de usuário normal. Script :
fonte