Anule algunos códigos clave con XKB

10

Quiero barajar algunas teclas con XKB. (¿Por qué? En una computadora portátil donde algunas teclas están ubicadas de manera inconveniente). Actualmente utilizo xmodmap:

keycode 110 = Prior
keycode 115 = Delete
keycode 112 = Next
keycode 117 = Insert
keycode 119 = End
keycode 118 = Home

En cambio, quiero usar XKB y asignar diferentes nombres simbólicos para ciertas teclas físicas, en lugar de asignar diferentes símbolos de teclas a ciertos códigos de teclas. ( Es por eso.) Quiero que el código clave 110 envíe en PGUPlugar de HOME, el código clave 115 que envíe en DELElugar de END, etc. El resto de la configuración no debe verse afectada (por PGUPlo tanto, es seguir enviando el keyym Prior, etc., y todas las demás claves permanecen ya que son).

¿Cómo puedo cambiar la asignación de estos códigos de teclas específicos? Cargaré un archivo xkbcomp somefile.xkb $DISPLAY, ¿qué necesito poner somefile.xkb?

Gilles 'SO- deja de ser malvado'
fuente

Respuestas:

13

Cree un archivo que contenga los cambios de su código clave y guárdelo como (por ejemplo) ~/.xkb/keycodes/local. (El keycodesdirectorio está codificado; el directorio base puede ser otra cosa, y el nombre de archivo también). Esto contendrá en su caso

xkb_keycodes {
  <PGUP> = 110;
  <PGDN> = 112;
  <DELE> = 115;
  <INS> = 117;
  <HOME> = 118;
  <END> = 119;
};

Para cargar esto, ejecute

setxkbmap -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.xkb - $DISPLAY

Esto genera su configuración actual, la agrega +locala la xkb_keycodes includedeclaración y la carga en el compilador XKB, agregando ~/.xkba la ruta de inclusión. (Si nombró a su archivo como algo diferente ~/.xkb/keycodes/local, obviamente necesitará cambiar +localy -I${HOME}/.xkb}.) De esa forma, se conservan todas las demás configuraciones.

Stephen Kitt
fuente
1
¡Así que este es el camino esperado y la forma de pasarlo al -Iswitch! Gracias, no pude resolver esto desde la página de manual.
L. Levrel
¡trabajado como un encanto! funcionó si desea actualizar xkb_symbols, simplemente reemplace xkb_keycodes con él, funcionó
zw963
5

Puede comenzar por setxkbmap -print > somefile.xkbobtener el mapa de teclas que está utilizando como base y luego redefinir los nombres de teclas que desea en la xkb_keycodessección siguiente:

xkb_keymap {
 xkb_keycodes {
  include "evdev+aliases(azerty)"
  // Custom <key name> = keycode
  <INS> = 117;
  <HOME> = 118;
  <PGUP> = 110;
  <DELE> = 115;
  <END> = 119;
  <PGDN> = 112;
 };
 xkb_types { include "complete"};
 xkb_compatibility { include "complete"};
 xkb_symbols { include "pc+fr+inet(evdev)"};
 xkb_geometry { include "pc(pc104)"};
};

Esto genera advertencias de que algunos nombres clave se asignan varias veces, pero funciona porque solo cuenta el último (por lo que es importante colocar la configuración personalizada después de la inclusión). Y el archivo tiene la ventaja de ser legible.

Otra forma es volcar el mapa de teclas que usa en un archivo: xkbcomp $DISPLAY somefile.xkby modificar las mismas líneas (es el mismo mapa de teclas con las inclusiones evaluadas). De esta manera no hay advertencias para múltiples definiciones, pero es menos legible.

Leiaz
fuente
1
¿De dónde vienen todos estos nombres ( evdev+aliases(azerty), etc.)? Quiero explícitamente realizar un cambio relativo, no una reconfiguración completa. Las claves que no sean las 6 enumeradas en las preguntas no deben verse afectadas, deben permanecer en el estado en que se encontraban cuando emití el comando.
Gilles 'SO- deja de ser malvado'
1
Vienen de setxkbmap -print, son archivos de /usr/share/X11/xkb/. Creo que tiene que dar un xkbcomp
mapa de teclas