Obtenha o código de tecla de uma chave, a partir de um teclado personalizado

12

Estou tentando transformar um Minitel em um computador com um Raspberry Pi.

Este é um minitel:

Então,eusoldeiamatrizdotecladominitelemumtecladoUSB,assim: 

Tudo está funcionando bem, eu recebo algumas chaves do meu teclado personalizado. Eu só preciso remapear as chaves apropriadamente.

Então, estou tentando criar um programa que me pedirá para pressionar a e interceptar o código de tecla correspondente e, em seguida, com todas as teclas do meu teclado personalizado, para finalmente produzir um arquivo xmodmap.

O único problema que tenho é que não consigo descobrir como posso obter esse código de acesso (e apenas isso!). Eu tentei xev , mas há muitos dados exibidos para filtrá-lo.

Eu sei que eu poderia rastrear todos os códigos de tecla manualmente, mas vou transformar 10 Minitels, então eu preferiria um jeito mais rápido!

    
por xavier.seignard 28.06.2013 / 17:21

1 resposta

6

Suponho que você esteja tentando fazer isso no shell ou similar (senão, você usaria as bibliotecas X diretamente). Em caso afirmativo, você pode achar o xinput --test «device-name» muito mais fácil de analisar.

Infelizmente, ele não é compatível com scripts de shell. Mas você pode fazê-lo funcionar com stdbuf . Ele é executado até que você o mate, mas seu script de shell pode direcioná-lo para read .

Então, você pode fazer algo assim:

stty -echo
stdbuf -oL xinput test 'AT Translated Set 2 keyboard' \
    | perl -nE 'BEGIN {$| = 1} m/^key press\s+(\d+)/ and say $1' \
    | for key in q w e r t y; do
         echo -n "Please press $key: "
         read -r keycode
         echo "key $key = $keycode"
    done
stty echo

Você precisará usar o nome do teclado correto no lugar de "Teclado do Conjunto 2 Traduzido AT". Você pode encontrá-lo com xinput list :

anthony@Zia:~$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB-PS/2 Optical Mouse           id=8    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]

Infelizmente, você precisa usar um dispositivo específico - não é possível usar o teclado central.

(Além disso, você precisará encontrar uma maneira de matar o xinput acima, ou apenas se contentar em pressionar Control-C quando tiver digitado todas as teclas. E você provavelmente desejará listar mais teclas de qwerty.)

    
por 28.06.2013 / 18:45