¿Cómo reasignar códigos clave sin ‘/ usr / lib / keymap’ (que desapareció en Saucy, y en Trusty, …)?

X11 no ve los códigos clave por encima de 255, entonces, ¿cómo volver a asignar esas pocas claves a los huecos por debajo de 255?

/usr/lib/keymap existía en raring, que funcionaba así:

1. Identificación de claves:

 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. Teclas de reasignación:

 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 

Fue genial, sencillo y rápido …

xmodmap funciona para las teclas <255 como la tecla de mi 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 + 

** EDITAR: He encontrado la solución en esta publicación de ubuntuforum .

Los keymappings todavía se hacen con udev en trusty (y salchicha, supongo), pero el mecanismo cambió.

Para volver a asignar una clave, solo se necesita un ioctl (EVIOCSKEYCODE), pero ya no existe ningún progtwig simple que lo haga. – Ahora es interno a udev. Así que haz esto:

  1. dile a udev los mapeos
    1. crear un archivo /etc/udev/hwdb.d/keyboard.hwdb
    2. escriba solo el identificador de teclado allí y las asignaciones que desee cambiar (el formato es como en /lib/udev/hwdb.d/60-keyboard.hwdb , donde también encontré esos identificadores confusos para mi teclado); por ejemplo:
       teclado: nombre: ThinkPad Botones adicionales: dmi: bvn *: bvr *: bd *: svnLENOVO *: pn *
        KEYBOARD_KEY_00 = msdos
        KEYBOARD_KEY_09 = prog3
        KEYBOARD_KEY_0a = panel de control
      
    3. udevadm hwdb --update
    4. compruebe si ve sus actualizaciones a través de udevadm hwdb --test='keyboard:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*' (cambie su ID de teclado)
    5. udevadm control --reload se necesita udevadm control --reload incluso si la página de manual dice lo contrario, lo intenté.
  2. desencadenar su ejecución (o simplemente reiniciar)
    1. con un udev monitor --property ejecución de udev monitor --property puede ver el efecto del siguiente paso, la opción --property revelará las remappings
    2. para mi teclado hago un udevadm trigger --verbose --sysname-match=event6 --action=add La “acción add” es importante, porque los eventos “change” se ignoran en las reglas actuales del teclado.
    3. en su caso, un --sysname-match=event3 lo haría, pero puede jugar con él a través de estos tres:
      • udevadm trigger --dry-run --verbose muestra todos los dispositivos
      • inspire su fantasía para la construcción de udevadm info /sys/devices/platform/thinkpad_acpi/input/input12/event6 con udevadm info /sys/devices/platform/thinkpad_acpi/input/input12/event6 o cualquiera que sea su dispositivo
      • udevadm trigger --help le dará una pista sobre cómo reducir el siguiente desencadenador en seco