Como remapear códigos-chave sem '/ usr / lib / keymap' (que desapareceu em Saucy e em Trusty,…)?

6

O X11 não vê códigos de teclas acima de 255, então, como remapear essas poucas chaves nos intervalos abaixo de 255?

/usr/lib/keymap existia em raring, que funcionava assim:

1. Identificação das chaves:

sudo /lib/udev/keymap input/event3
> scan code: 0xC1021   key code: zoomreset => 100%
> scan code: 0xC101F   key code: zoomin => zoom -
> scan code: 0xC1020   key code: zoomout => zoom +
> scan code: 0xC0192   key code: calc => calculator

2. Remapear chaves:

sudo /lib/udev/keymap input/event3 0xC1021 phone
sudo /lib/udev/keymap input/event3 0xC101F sport
sudo /lib/udev/keymap input/event3 0xC1020 shop
sudo /lib/udev/keymap input/event3 0xC0192 www

Foi ótimo, simples e rápido ...

xmodmap funciona para chaves & lt; 255 como a minha tecla calculadora (código 148)

sudo evtest /dev/input/event3 
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc517 version 0x110
Input device name: "Logitech USB Receiver"
...
Testing ... (interrupt to exit)
> Event: time 1381940761.592647, type 1 (EV_KEY), code 140 (KEY_CALC), value 1 => calculator
> Event: time 1381940790.224658, type 1 (EV_KEY), code 420 (KEY_ZOOMRESET), value 1 => 100%
> Event: time 1381940810.928667, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 1 => Zoom -
> Event: time 1381940836.216678, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 1 => Zoom +

** EDIT: Eu encontrei a solução neste post do ubuntuforum .

    
por Hizoka 20.10.2013 / 12:24

1 resposta

4

Keymappings ainda são feitos com udev em trusty (e atrevido, eu acho), mas o mecanismo mudou.

Para remapear uma chave, apenas um ioctl (EVIOCSKEYCODE) é necessário, mas nenhum programa simples que exista já existe. - Agora é interno para o udev. Então faça isso:

  1. diga ao udev os mapeamentos
    1. crie um arquivo /etc/udev/hwdb.d/keyboard.hwdb
    2. escreva somente o identificador do teclado e os mapeamentos que você deseja alterar (o formato é como em /lib/udev/hwdb.d/60-keyboard.hwdb , onde também encontrei esses identificadores confusos para o meu teclado); por exemplo:
      keyboard:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*
       KEYBOARD_KEY_00=msdos
       KEYBOARD_KEY_09=prog3
       KEYBOARD_KEY_0a=dashboard
      
    3. udevadm hwdb --update
    4. verifique se você vê suas atualizações por meio de udevadm hwdb --test='keyboard:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*' (mude para o seu ID de teclado)
    5. udevadm control --reload é necessário mesmo que a página do manual diga o contrário - eu tentei.
  2. acionar sua execução (ou simplesmente reinicializar)
    1. com um udev monitor --property em execução, você pode ver o efeito da próxima etapa, a opção --property revelará os remapings
    2. para o meu teclado, faço um udevadm trigger --verbose --sysname-match=event6 --action=add A "ação de adição" é importante, porque os eventos de "alteração" são ignorados nas regras atuais do teclado.
    3. no seu caso, um --sysname-match=event3 faria isso, mas você pode brincar com isso por meio desses três:
      • udevadm trigger --dry-run --verbose mostra todos os dispositivos
      • inspire você a criar fantasia com o udevadm info /sys/devices/platform/thinkpad_acpi/input/input12/event6 ou qualquer dispositivo seu
      • udevadm trigger --help lhe dará dicas de como reduzir a próxima execução de acionamento
por Robert Siemer 27.04.2014 / 20:38