LuchoWiki

Cosas que debería hacer más a menudo

User Tools

Site Tools


desarrollo:informatica:contenidos:linux-keymaps

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
desarrollo:informatica:contenidos:linux-keymaps [20080720 20:51]
manager
desarrollo:informatica:contenidos:linux-keymaps [20120526 10:54] (current)
Line 1: Line 1:
 +~~NOCACHE~~
 +====== 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 [[http://​www.jwz.org/​xkeycaps/​|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:
 +
 +<code bash>
 +xmodmap -pke > $HOME/​.Xmodmap.try
 +</​code>​
 +
 +El archivo resultante tiene la estructura siguiente:
 +
 +<​code>​
 +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
 +</​code>​
 +
 +===== 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__:​
 +
 +<​code>​
 +clear       mod1
 +clear       mod2
 +clear       mod3
 +clear       mod4
 +clear       mod5
 +</​code>​
 +
 +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'':​
 +
 +<​code>​
 +add         mod1 = Alt_L
 +add         mod2 = Num_Lock
 +add         mod4 = Super_L
 +add         mod5 = Mode_switch
 +</​code>​
 +
 +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:
 +<​code>​
 +...
 +keycode ​ 34 = Alt_L
 +keycode ​ 71 = Super_L
 +keycode ​ 73 = Mode_switch Multi_key
 +...
 +</​code>​
 +
 +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 [[.:​listado_keysyms|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 ((tecla física a la que es usualmente asignado en un teclado PC-105 distribución español)) ​ ^ 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 ====
 +
 +<code bash>
 +keycode X = key Shift+key ​    ​L2+Key L2+Shift+Key ​  ​L3+Key L3+Shift+Key ....
 +</​code>​
 +
 +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)?
 +
 +<​code>​
 +keycode 26 = e E     ​EuroSign EuroSign
 +keycode 29 = y Y     ​yen ​ yen
 +</​code>​
 +
 +===== 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:
 +
 +<​code>​
 +xmodmap $HOME/​.Xmodmap
 +</​code>​
 +
 +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 =====
 +
 +  * [[.:​linux-keymaps-compose]]
 +  * [[.:​emulando-teclas-multimedia]]
 +  * [[.:​XFCE-accesos-teclado]]
 +  * [[.:​xkeycaps]]
 +
 +====== Fuentes ======
 +
 +
 +  * [[http://​www.linuxquestions.org/​]]
 +  * ''​man xmodmap''​
 +  * ''​man xkb''​
 +  * Experimentación con el notebook de mi familia.
 +
 +
 +
 +====== Progreso ======
 +
 +<​progrecss 50% caption=Progreso;/>​
 +
 +
 +{{indexmenu_n>​10}}
 +{{tag>​informatica por_hacer linux}}
 +
  
desarrollo/informatica/contenidos/linux-keymaps.txt · Last modified: 20120526 10:54 (external edit)