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.