A resposta é :
su -c "while true; do od --read-bytes=144 --width=144 -x /dev/input/event3 | awk 'NF > 1 { print \ }'; done"
Explicação
Com o comando tree, encontrei isto
$ tree /dev/input/by-path
/dev/input/by-path/
├── pci-0000:00:1a.0-usb-0:1.1:1.0-event-kbd -> ../event3
├── pci-0000:00:1a.0-usb-0:1.1:1.1-event -> ../event4
├── pci-0000:00:1d.2-usb-0:1:1.0-event-mouse -> ../event2
└── pci-0000:00:1d.2-usb-0:1:1.0-mouse -> ../mouse0
Ok, então /dev/input/event3
é meu teclado .
O comando od
despeja arquivos em formatos octal e outros.
- Com a opção
-x
, elimina hexadecimal. - E com a opção
--width=144
, ele despeja apenas uma linha por tecla (uma linha é 144 bytes de comprimento). - A opção
--read-bytes=144
saiod
depois de 144 bytes.
O comando awk
imprime o 12º campo de toda a linha. Apenas isso, se o número de campos NF
for maior que 1, porque cada segunda linha é apenas uma quebra de linha.
O loop while true
em torno da coisa toda é porque, se eu digitar algumas teclas de letras, elas quebram. Não obtenho mais resultados, apenas 0000
. Mas o comando od
fecha a leitura após 144 bytes (um pressionamento de tecla). Depois disso, ele é reiniciado. Há certamente uma solução melhor para isso, mas essa é uma boa solução alternativa.
Exemplo de saída (pressionei algumas vezes Retornar , RightCtrl e Backspace , o que me dá a resposta correta números em comparação com este documento da microsoft (PDF) ou este documento de arquivo de texto )
0028
0028
0028
00e4
00e4
00e4
002a
002a
002a