Modificar Teclados en Linux

La Idea

El propósito de esta entrada es ver cómo asignar distintos significados a las teclas del teclado bajo sistemas Linux. Con esta técnica es posible lograr cosas como:

  • identificar y asignar símbolos especiales a cada tecla física del teclado.
  • asignar funciones al gestor de ventanas ante el uso de ciertas teclas modificadoras.
  • Dar usos personalizados a teclas que no tienen mucho uso en Linux, como las “teclas Windows” y el teclado numérico.
  • etc.

En Linux, específicamente bajo X.org, a cada tecla física del teclado, se le asigna un conjunto de símbolos llamados en inglés keysyms. Estos keysyms son “nombres comunes” que son interpretados por todas las aplicaciones, como por ejemplo: “a”, “A”, “Enter”, “Tab”, “Shift_L” o “F7”.

La configuración de qué símbolos están asociados a cada tecla depende de la distribución de teclado y de las banderas modificadoras disponibles, siendo las más comunes Shift y Control, y existiendo otras como “Meta”, “Super” e “Hyper”.

La aplicación responsable de asignar esos símbolos a cada tecla e informar los cambios es xmodmap, por tanto, modificando las opciones generadas por este programa, es posible cambiar los símbolos asignados a cada tecla física. Estos símbolos se guardan bajo el archivo $HOME/.Xmodmap. Una interface gráfica para desarrollar este mismo trabajo existe, el programa de Jamie Zawinski llamado XKeyCaps. Está disponible en los repositorios de Ubuntu.

Si podemos asignar los keysyms o símbolos de teclado que deseamos, luego es cuestión de usar las opciones de atajos globales que incluya nuestro gestor de ventanas (Gnome, KDE, XFCE), para asignarles funciones de alto espectro (como ejecutar aplicaciones o enviar comandos), o podemos asignarles significados específicos dentro de las opciones de cada aplicación.

Prerequisitos

Los siguientes paquetes y aplicaciones deben estar instalados en el sistema antes de continuar:

  • xmodmap, xev y xkb, que aparecen bajo estos nombres en la mayoría de los Gestores de Paquete.
  • Para los usuarios de KDE, KDE 3.0 o superior, y SCIMd eshabilitado.
  • Para los usuarios de XFCE, XFCE 4.4.0 o superior, y GTK 2.10 o superior para evitar un bug de Compose.
  • Para los usuarios de GNome, GTK+ 2.4 o superior, recomendado 2.10 o superior para evitar un bug de Compose.

Los pasos a continuación asumen que se está utilizando el archivo .Xmodmap directamente; los usuarios de XKeyCaps lo encontrarán fácil de utilizar y se explicarán los pasos más adelante.

Lo primero es obtener la configuración actual del teclado. Desde una consola gráfica ejecutar lo siguiente:

xmodmap -pke > $HOME/.Xmodmap.try

El archivo resultante tiene la estructura siguiente:

keycode   8 =
keycode   9 = Escape Multi_key


keycode  10 = 1 exclam bar brokenbar bar exclamdown
keycode  11 = 2 quotedbl at oneeighth at oneeighth
keycode  12 = 3 periodcentered numbersign sterling numbersign sterling
keycode  13 = 4 dollar asciitilde dead_tilde asciitilde dollar
keycode  14 = 5 percent onehalf threeeighths onehalf threeeighths
keycode  15 = 6 ampersand notsign ampersand notsign fiveeighths
keycode  16 = 7 slash braceleft seveneighths braceleft seveneighths
keycode  17 = 8 parenleft bracketleft trademark bracketleft trademark
keycode  18 = 9 parenright bracketright plusminus bracketright plusminus
keycode  19 = 0 equal braceright degree braceright degree
...
add         mod1 = Alt_L
add         mod2 = Num_Lock
add         mod4 = Super_L
add         mod5 = Mode_switch

Modificando la Configuración de Teclado

Para modificar la configuración del teclado, solo debemos modificar a nuestro gusto el archivo generado anteriormente y luego recargarlo con xmodmap .Xmodmap.try.

Dependiendo de lo que queramos hacer las estrategias son claramente diferentes.

Las Teclas Modificadoras

Linux dispone de varias teclas modificadoras, es decir teclas que cambian el significado de otras cuando se presionan en conjunto. Las más conocidas son shift (Shift para levantar mayúsculas), alt (para los menús), numlock, capslock y meta (conocida de los fanáticos de Emacs). Hay otras como super e hyper, y cinco valores lógicos reservados llamados desde Mod1 a Mod5. Son estos valores lógicos los que reciben significado especial en un archivo Xmodmap.

En un archivo de configuración de Xmodmap lo primero que se hace es limpiar los significados de las modificadoras:

clear       mod1
clear       mod2
clear       mod3
clear       mod4
clear       mod5

Y después les asignamos el significado que deseemos, el cual debe ser el conjunto de Keycodes que “levantan” la señal modificadora. De modo que otra tecla responda solo en conjunto con éstas. Aquí debes tomar nota que si escoges un keycode como modificadora, esa tecla no puede usarse para levantar un keysym de tecla normal, es decir: no puedes hacer como en Windows, que la “Tecla Windows” sola te abre el menú, pero como modificadora te abre el Explorer (<key>'Win'-e</key>), el escritorio (<key>Win-d</key>) o te bloquea la estación (<key>Win-l</key>).

Para asignar los significados se usa la sintaxis add modificador listado de keysyms:

add         mod1 = Alt_L
add         mod2 = Num_Lock
add         mod4 = Super_L
add         mod5 = Mode_switch

En este ejemplo, se usa “Alt Izquierdo” como el modificador 1, “Super Izquierdo” como el 4, y “Mode Switch” (a.k.a. “Alt-Gr”) como el 5. Si vamos a buscar estos keysyms a la tabla:

...
keycode  34 = Alt_L
keycode  71 = Super_L
keycode  73 = Mode_switch Multi_key
...

Veremos que las teclas corresponden físicamente como sigue (por ejemplo):

  • Alt Izquierdo a la izquierda de la Barra Espaciadora
  • Super Izquierdo es la Tecla Windows Izquierdo
  • Mode Switch es la tecla AltGr

una vez grabado entonces el .Xmodmap y puesto en acción, se activarán las modificadoras: Alt funcionará con los menús, AltGr con los símbolos de teclado y Super puede asignarse con combinaciones en el Gestor de Ventanas (ej.: Super+X para invocar a XKill).

En el ejemplo se ha visto que existe la señal (por poner un ejemplo) Alt_L; similarmente existe Alt_R que puede ser asignada físicamente al keycode de la tecla Alt Derecho. Es importante, para poder asignar correctamente las teclas modificadoras, que las combinaciones del mismo tipo (Alt_L con Alt_R, etc) deben aparecer en la misma línea y en ninguna otra.

Valores de keysyms disponibles

Para chequear los valores de keysyms disponibles puedes revisar este listado, o buscar la cabecera <tt>keysym.h</tt> en los archivos include de tu distribución. Esto puede requerir instalar algún paquete del gestor de paquetes llamado xorg-devel o similar.

Algunos de los keysyms especiales más comunes los he reproducido en esta lista:

Keysym Tecla 1) Propósito
Enter <key>Enter</key> La función clásica de la tecla Enter.
ISO_Left_Tab <key>Shift-Tab</key> Tabulación inversa (usualmente en interfaces gráficas, saltar al control anterior)
Mode_switch <key>AltGr</key> Acceder a la segunda columna (grupo III y IV) de símbolos de cada tecla.
Menu Tecla <key>Menú</key> En entornos gráficos, acceder al menú contextual.
Alt_L, Alt_R Teclas <key>Alt</key> Modificador “ALT” (funciona solamente como modificador).
Meta_L, Meta_R Teclas <key>Win</key> Modificador “META” (utilizado usualmente por Emacs).

El formato de .Xmodmap

keycode X = key Shift+key     L2+Key L2+Shift+Key   L3+Key L3+Shift+Key ....

En otras palabras, una línea como la siguiente:

keycode 41 = f F Greek_phi Greek_PHI ordfeminine masculine

Es interpretada de la siguiente forma:

Tecla 41 (“f”) Normal Shift+ Significado
Level 1 f F Letras “f” minús y mayús, alfabeto latino
Level 2 (“AltGr”) φ Φ Letras “phi” minús y mayús, alfabeto griego clasico
Level 3 (“ISO_Level3_Shift”) ª º Símbolos demarcadores de género femenino y masculino

El modificador AltGr funciona invocando el llamado “Grupo 2”, mientras que el modificador ISO_Level3_Shift, cuando está habilitado, actúa desplazando un grupo nuevo de caracteres a la tecla, es decir un nuevo Nivel, sustituyendo el primer y segundo grupos. Con este modificador trabajaremos más adelante.

En este punto ya estás capacitado para asigna caracteres especiales a cualquier combinación AltGr+tecla, por ejemplo ya que tienes AltGr+e = € (euro), ¿por qué no poner AltGr+y = ¥ (yen)?

keycode 26 = e E     EuroSign EuroSign
keycode 29 = y Y     yen  yen

Cargando con la Sesión

Dependiendo del entorno gráfico utilizado, cambia la estrategia para cargar las nuevas reglas de xmodmap al inicio. La forma más conveniente de hacer esto es agregar una llamada a Xmodmap en tu archivo de inicio del Servidor X (xinitrc) de la forma siguiente:

xmodmap $HOME/.Xmodmap

La locación del archivo xinitrc depende del gestor de escritorio que estés utilizando.

Otras formas, dependiendo del escritorio utilizado, son:

XFCE

  • Editar el startup en $HOME/.conig/xfce4/xinitrc
  • Agregar la invocación xmodmap $HOME/.Xmodmap en un punto específico, antes de la llamada a xfdesktop.

GNome

  • Actualizar las bibliotecas GTK+ a 2.8 o superior.
  • Editar el startup en $HOME/.xinitrc
  • Agregar la invocación xmodmap $HOME/.Xmodmap en un punto específico antes de la invocación de gnome-panel.

KDE

Fluxbox

Temas Relacionados

Fuentes

Progreso

<progrecss 50% caption=Progreso;/>

indexmenu_n_10

1)
tecla física a la que es usualmente asignado en un teclado PC-105 distribución español