Desde que encontre a solução adequada, responderei a minha própria pergunta.
Existe um programa chamado keyfuzz que pode alterar os mapas de teclado usados pelo kernel, com base nos dispositivos de entrada - ou seja, separadamente para cada teclado conectado ao computador.
Existem dois problemas com este programa que não estão descritos corretamente na documentação:
- Os teclados USB geram códigos de verificação, além dos códigos de verificação dos teclados conectados à porta ps / 2. Dessa forma, se você precisar remapear o teclado USB, precisará de uma maneira de saber os códigos de verificação das teclas. A ferramenta "showkey", normalmente recomendada para testar scancode e keycode, não fará o trabalho, porque lê o formulário
/dev/console
que emite códigos de verificação "padrão", independentemente do teclado.
Para testar os códigos de verificação do teclado com base no seu endereço /dev/input/KEYBOARD
, você precisa usar o programa chamado getscancodes . Observe que o arquivo baixado do link acima não está compactado corretamente. É denominado getscancodes.tar.gz
, mas é compactado com o algoritmo ZIP. O pacote contém o código-fonte, assim como os binários pré-compilados.
No meu caso, o arquivo de configuração do keyfuzz parece assim:
### evdev 1.0.0., driver 'TK Stealth keyboard'
### Proper old-style numpad handling
0x70059 107
0x7005A 108
0x7005B 109
0x7005C 105
0x7005D 108
0x7005E 106
0x7005F 102
0x70060 103
0x70061 104
0x70062 110
0x70063 111
- O programa "keyfuzz" inicia como um serviço durante a inicialização, a fim de corrigir as tabelas o mais cedo possível. Infelizmente, os teclados USB são adicionados aos dispositivos mais tarde, portanto, quando o keyfuzz é iniciado, não há teclado a ser corrigido, mesmo se o teclado USB estiver conectado durante a inicialização.
A solução é usar os arquivos de regras udev
e iniciar o keyfuzz ao adicionar o teclado necessário.
Para fazer isso, você precisa adicionar um arquivo /etc/udev/rules.d/mykeyboard.rules
, contendo (no meu caso):
ACTION=="add", ATTRS{idVendor}=="2516", RUN+="/usr/lib/systemd/scripts/keyfuzz start"
Agora, depois de conectar o teclado, o script de início do keyfuzz iniciará e corrigirá as tabelas de decodificação do teclado.