Primeiro, localize o scancode da chave que precisa ser remapeada, por exemplo, com o utilitário evtest
. Uma linha como a seguinte (com MSC_SCAN
nela) deve ser exibida:
Event: time 1417131619.686259, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70068
seguido por um segundo dando o código chave atual. Se nenhuma linha MSC_SCAN
for gerada, isso é devido a um bug do driver do kernel, mas o scancode ainda pode ser encontrado com o utilitário input-kbd
; evtest
deveria ter dado o código da chave, para que seja fácil encontrar a linha correspondente na saída input-kbd
(por exemplo, usando grep
).
Uma vez que os scancodes das chaves a serem remapeadas forem determinados, crie um arquivo como /etc/udev/hwdb.d/98-custom-keyboard.hwdb
contendo os remapeamentos. O início do arquivo /lib/udev/hwdb.d/60-keyboard.hwdb
fornece algumas informações. No meu caso (que funciona), eu tenho:
evdev:input:b0003v05ACp0221*
KEYBOARD_KEY_70035=102nd # Left to z: backslash bar
KEYBOARD_KEY_70064=grave # Left to 1: grave notsign
KEYBOARD_KEY_70068=insert # F13: Insert
(Antes do udev 220, eu tinha que usar keyboard:usb:v05ACp0221*
para a primeira linha.)
A string evdev:
deve estar no início da linha e cada configuração de KEYBOARD_KEY_
deve ter exatamente um espaço antes (nota: uma linha sem espaços exibirá uma mensagem de erro e uma linha com dois espaços silenciosamente ignorado com versões antigas do udev). KEYBOARD_KEY_
é seguido pelo scancode em hexadecimal (como o que evtest
e input-kbd
fornecem). Os valores válidos podem ser obtidos da saída evtest
ou input-kbd
, ou até mesmo do arquivo /usr/include/linux/input.h
: por exemplo, KEY_102ND
daria 102nd
(removendo KEY_
e convertendo para minúscula ), que eu usei acima.
Após o arquivo ser salvo, digite:
udevadm hwdb --update
para (re) construir o banco de dados /etc/udev/hwdb.bin
(você pode verificar o timestamp). Então,
udevadm trigger --sysname-match="event*"
terá as novas configurações em consideração. Você pode verificar com evtest
.
Em 2014, o udev lançado tinha informações incompletas / com bugs em /lib/udev/hwdb.d/60-keyboard.hwdb
, mas você pode consultar a última versão de desenvolvimento do arquivo e / ou meu relato de bug e discussão sobre as questões de documentação e espaçamento.
Se isso não funcionar, o problema pode ser encontrado depois de aumentar temporariamente o nível de log de udevd
com udevadm control
(consulte a página do manual do udevadm (8) para obter detalhes).
Para versões antigas de udev
, como 204, esse método ainda deve funcionar.