Estou tentando transformar um Minitel em um computador com um Raspberry Pi.
Este é um minitel:
Então, soldei a matriz do teclado minitel em um pcb de teclado USB, assim:
Tudo está funcionando bem, recebo algumas teclas do meu teclado personalizado. Eu só preciso remapear as chaves adequadamente.
Então, estou tentando criar um programa que me peça 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 obter esse código de chave (e apenas isso!). Eu tentei, xev
mas há muitos dados exibidos para filtrá-los.
Eu sei que poderia rastrear todos os códigos de chave manualmente, mas transformarei 10 Minitels, então prefiro uma maneira mais rápida!
fonte
Respostas:
Presumo que você esteja tentando fazer isso no shell ou similar (caso contrário, você usaria as bibliotecas do X diretamente). Nesse caso, você pode achar
xinput --test «device-name»
muito mais fácil de analisar.Infelizmente, não é realmente compatível com scripts de shell. Mas você pode fazê-lo funcionar
stdbuf
. Ele funciona até você matá-lo, mas seu script de shell pode canalizá-loread
.Então, você pode fazer algo assim:
Você precisará usar o nome do teclado correto no lugar do "AT Translated Set 2 keyboard". Você pode encontrá-lo com
xinput list
:Infelizmente, você precisa usar um dispositivo específico - não pode usar o teclado principal.
(Além disso, você precisará encontrar uma maneira de eliminar o xinput acima, ou apenas se contentar em pressionar Control-C quando tiver inserido todas as chaves. E provavelmente desejará listar mais chaves do que qwerty. )
fonte
id
teclado em vez de seu nome, porque tive conflitos com dois mesmos nomes. Então,xinput test 18
onde 18 é o id do meu teclado.test.c
, parece que a função relevante éprint_events
. Talvez o xorg faça um patch para adicionar uma bandeira para parar após n eventos?xinput --query-state
fornece o estado atual e sai imediatamente. Você poderia fazer um loop ocupado.