Redefinición de teclas en linux – Introducción a XKB.
En un comienzo sólo quería contarles de un hack muy sencillo que encontré en un libro de trucos 100 Linux tips & Tricks que nos permite darle uso a esas teclas con el símbolo de MS-windows de nuestros teclados y que en linux generalmente no usamos.
También ya alguna vez habia intentado redefinir alguna tecla para acceder más rapidamente al slash (/) pero no entendí nada.
De algo vale la pena resistir la tentación de volver a la facilidad de uso de MS-windows. De tal manera que como en todo con lo que te vas familiarizando, las cosas aparecen más sencillas y claras con creciente celeridad.
Ahora no solo he podido redefinir varias teclas, sino que he aprendido bastante sobre XKB (X KeyBoard), la extensión para manejo de teclados en sistemas con X11 (Interfaz gráfica para Unix) como es el caso de linux.
Además descubrí una nueva (2005) distribución de teclado alternativa a QWERTY/Dvorak llamada Colemak que, si bien está diseñada para el inglés, sigue siendo muy superior a QWERTY y se aviene muy bien a las tareas de un programador, que esencialmente escribe en inglés, ya sean comandos o comentarios.
Me tiene bastante emocionado darme la opotunidad de aprender algo totalmente nuevo y desde cero que esté relacionado a mi pega/hobby. En cuanto lo haya practicado un poco me referiré más a él.
Volviendo a XKB, si tú también quieres acceder a información de primera mano:
Redefinición de teclas en linux
Los archivos involucrados son:
1 2 3 4 5 | /etc/X11/xorg.conf /etc/X11/xkb/geometry/pc /etc/X11/xkb/symbols/es /etc/X11/xkb/rules/xorg.lst /etc/X11/xkb/rules/xorg.xml |
De los cuales sólo modificaremos /etc/X11/xkb/symbols/es para español. Para otros idiomas busca en el mismo directorio /etc/X11/xkb/symbols/.
Esto está basado en slackware/zenwalk. Otra locación común para encontrar estos archivos es /usr/share/X11/xkb. Para encontrarlos en tu sistema puedes hacer:
1 2 3 | locate xorg.conf locate geometry/pc locate symbols/es |
En el archivo /etc/X11/xorg.conf se configura tu teclado:
1 2 3 4 5 6 7 8 9 10 11 12 13 | # ********************************************************************** # Keyboard section # ********************************************************************** Section "InputDevice" Identifier "Keyboard1" Driver "kbd" Option "XkbRules" "xorg" Option "XkbModel" "pc105" Option "XkbLayout" "es" # Option "XkbVariant" "us" Option "XkbOptions" "" EndSection |
Es tarea del instalador de tu distribución de linux asignar correctamente esos datos. Para obtenerlos sin buscar en el anterior archivo, puedes ejecutar:
1 2 3 4 5 | # xprop desliega las propiedades de X11 # queremos las de la ventana raiz (root) # filtramos la info específica para el teclado (XKB) con grep xprop -root | grep XKB [ENTER] _XKB_RULES_NAMES(STRING) = "xorg", "pc105", "es", "", "" |
En el archivo /etc/X11/xkb/geometry/pc:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | xkb_geometry "pc105" { description= "Generic 105"; width= 470; height= 180; # ... etc ... }; // End of "Function" section section "Alpha" { top= 61; # quinta fila de teclas alfanuméricas (AE**) # TILDE, 1, 2, ... row { top= 1; keys { <tlde>, <ae01>, <ae02>, <ae03>, <ae04>, <ae05>, <ae06>, <ae07>, <ae08>, <ae09>, <ae10>, <ae11>, <ae12>, { <bksp>, "BKSP", color="grey20" } }; }; # cuarta fila de teclas alfanuméricas (AD**) # TAB, Q, W, E... row { top= 20; keys { { <tab>, "TABK", color="grey20" }, <ad01>, <ad02>, <ad03>, <ad04>, <ad05>, <ad06>, <ad07>, <ad08>, <ad09>, <ad10>, <ad11>, <ad12>, { <bksl>, "BKSL" } }; }; # tercera fila de teclas alfanuméricas (AC**) # CAPS-LOCK, A, S, D... row { top= 39; keys { { <caps>, "CAPS", color="grey20" }, <ac01>, <ac02>, <ac03>, <ac04>, <ac05>, <ac06>, <ac07>, <ac08>, <ac09>, <ac10>, <ac11>, { <rtrn>, "RTRN", color="grey20" } }; }; # segunda fila de teclas alfanuméricas (AB**) # LEFT-SHIFT, < (LEFT GREATER THAN), Z, X, C... row { top= 58; keys { { <lfsh>, "LFSH", color="grey20" }, <lsgt>, <ab01>, <ab02>, <ab03>, <ab04>, <ab05>, <ab06>, <ab07>, <ab08>, <ab09>, <ab10>, { <rtsh>, "RTSH", color="grey20" } }; }; # primera fila de teclas alfanuméricas # LEFT-CONTROL, LEFT-WIN, LEFT-ALT, SPACE, ... row { top= 77; key.shape= "SMOD"; key.color= "grey20"; keys { { <lctl>, "MODK" }, <lwin>, <lalt>, { <spce>, "SPCE", color="white" }, <ralt>, <rwin>, <menu>, <rctl> }; }; }; // End of "Alpha" section section "Editing" { # ... etc ... }; // End of "pc105" geometry |
Como ves describe muy claramente la posición de todas las teclas y su nombre genérico. En la última sección row hay algunas llamadas LWIN, RWIN y MENU. Esas son las que no interesan.
En el archivo /etc/X11/xkb/symbols/es tenemos (fíjate en los comentarios que he hecho):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | // $XKeyboardConfig$ // based on a keyboard // Modified for a real Spanish Keyboard by Jon Tombs // // $XFree86: xc/programs/xkbcomp/symbols/es,v 1.2 2002/11/22 dawes Exp $ partial default alphanumeric_keys xkb_symbols "basic" { include "latin(type4)" name[Group1]="Spain"; # En las siguientes lineas se definen todas las combinaciones para cada # tecla de la siguiente manera: # Grupo 1 Nivel 1 : presión directa # Grupo 1 Nivel 2 : conbinando con [SHIFT] # Grupo 2 Nivel 1 : conbinando con [ALT-GR] # Grupo 2 Nivel 2 : conbinando con [SHIFT] y [ALT-GR] # Lo que en el caso de la tecla 1 es: # # G-1 N-2 G-2 N-2 # ! ¡ # # 1 | # G-1 N-1 G-2 N-1 # El modelo de cada tecla es: # key <****> { [ G-1 N-1, G-1 N-2, G-2 N-1, G-2 N-2 ] }; key <ae01> { [ 1, exclam, bar, exclamdown ] }; key <ae03> { [ 3, periodcentered, numbersign, sterling ] }; key <ae04> { [ 4, dollar, asciitilde, dollar ] }; key <ae06> { [ 6, ampersand, notsign, fiveeighths ] }; key <ae11> { [apostrophe, question, backslash, questiondown ] }; key <ae12> { [exclamdown, questiondown, asciitilde, asciitilde ] }; key <ad11> { [dead_grave, dead_circumflex, bracketleft, notsign ] }; key <ad12> { [ plus, asterisk, bracketright, dead_macron ] }; # Por ejemplo AC10 produce ñ, Ñ, ~, ˝ key <ac10> { [ ntilde, Ntilde, asciitilde, dead_doubleacute ] }; key <ac11> { [dead_acute, dead_diaeresis, braceleft, braceleft ] }; key <tlde> { [ masculine, ordfeminine, backslash, backslash ] }; key <bksl> { [ ccedilla, Ccedilla, braceright, dead_breve ] }; # AQUI VIENE LO BUENO. ATENCION: # Configuración personal para las teclas de MS-WINDOWS # ---------------------------------------------------- key <rwin> { [ asciitilde ] }; // produce ~ key <lwin> { [ backslash ] }; // produce \ key <menu> { [ slash ] }; // produce / # ---------------------------------------------------- include "level3(ralt_switch)" }; |
Para que los cambios tengan efecto deberás reiniciar tu sistema.
Definición de cada tecla
Como hemos visto el modelo para definir cada tecla es:
1 | # key <****> { [ G-1 N-1, G-1 N-2, G-2 N-1, G-2 N-2 ] } |
En donde:
y los asteriscos en: key <****> representan:
*1: Grupo de teclas
Posibilidades:
A: teclas alfanuméricas
F: teclas de funciones
K: teclado numérico
*2: Fila de teclas empezando desde la inferior
Posibilidades:
A. B, C, D, E …
*34: Posición de izquierda a derecha sin contar teclas especiales como [TAB]
Posibilidades:
1, 2, 3 …
Ejemplos de redefinición
De esta manera puedes redifinir las teclas que tu quieras. Con las que yo te indico puedes, por ejemplo, acceder rápidamente a tu directorio HOME (~):
1 | cd ~/downloads |
Escapar caracteres especiales dentro de strings:
1 2 | echo "<span class=\"$highligt\">PHP expande las variables que se "; echo "encuentran entre comillas dobles.</span>"; |
Teclas muertas
Los caracteres cuyo nombre empieza con dead_ como dead_acute y dead_diaeresis se obtienen con las teclas muertas. Las teclas muertas son las que permiten modificar caracteres como por ejemplo, para obtener la a con tilde (á) primero apretas (‘) y luego la letra a. Para escribir la ü en desagüe: (“) y luego la letra u.
De la misma manera los teclados sin eñe (ñ) pueden ser configurados para obtenerla apretando tilde (~) y luego n.
<dead_tilde> <N> : Ntilde
<dead_tilde> <n> : ntilde
Alguna vez anduve buscando como escribir el tilde circumflejo (^) que se usa mucho en expresiones regulares. Esta tambien es una tecla muerta. En general puedes obtener el caractér de cada tecla muerta apretándola y a continuación la barra espaciadora.
Conclusión
Una vez más linux demuestra una de sus características que más nos gustan, su versatilidad. Lo que al final hace que lo sientas más tuyo y que quieras continuar dándole tu tiempo a cambio de estas pequeñas satisfacciones.
Posts relacionados:
RSS feed para comentarios en este post
TrackBack URL




