como obter o ID HID USB das teclas do teclado pressionadas

2

O que eu quero fazer: Obtenha os IDs USB HID quando eu pressionar as teclas do meu verdadeiramente ergonômico teclado para reprogramar o firmware do o teclado.

Sei que existe essa lista da microsoft com vários IDs USB HID.

Mas seria mais fácil encontrar o ID de uma chave digitando-a e vendo-a em um programa. Especialmente para algumas chaves de mídia, que eu não encontro na lista da Microsoft.

Existe tal programa? Pode ser um programa de linha de comando. O Linux preferia, mas o Windows seria uma opção.

PS: Eu vi, que esta pergunta no stackoverflow tem uma resposta interessante. Mas não consigo encontrar /dev/usb/hiddev0 no meu sistema (Fedora 17).

Atualizar

Em esta pergunta , a resposta de @Andy Ross ajudou-me para pelo menos obter alguma saída, ao pressionar uma tecla. Eu fiz

xxd -c 144 /dev/input/by-path/pci-0000:00:1a.0-usb-0:1.1:1.0-event-kbd

Mas ainda não é legível. E nem sempre é o mesmo, quando pressiono a mesma tecla.

Update2

Em esta questão está ligado um script python , que lê o dispositivo de entrada e deve imprimi-lo. Mas neste computador no trabalho eu não tenho direitos para acessar o dispositivo com este script python.

    
por erik 14.02.2013 / 01:30

2 respostas

3

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 sai od 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
    
por 14.02.2013 / 12:12
0

xev no Linux irá ajudá-lo.

Boa sorte.

    
por 14.02.2013 / 01:46