Diferencias

Muestra las diferencias entre dos versiones de la página.


desarrollo:informatica:contenidos:linux-keymaps [2012/05/26 10:54] (actual) – creado - editor externo 127.0.0.1
Línea 1: Línea 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}}
 +