Ya sea porque tienes una tecla de tu teclado que no funciona o porque quieres cambiar el comportamiento de dos teclas. Veamos cómo «remapear» dos teclas especiales en GNU/Linux
Mi portátil ya tiene unos 7 años, y recientemente le he ampliado la memoria de 4Gb a 8Gb (cosa que tendría que haber hecho hace tiempo) pero ya sufre de ciertos achaques (como el dueño).
Le tuve que reparar el cargador, porque falseaba el cable, la batería ya dura bastante poco, tiene rota una bisagra, y ahora de manera esporádica fallan ciertas teclas.
Lo he limpiado y no están sucias, por lo que supongo que será cosa eléctrica, pero no me decido a abrirlo para ver si lo puedo solucionar. Mientras tanto voy tirando con un teclado externo por USB o un teclado virtual en la pantalla.
Me fallan las teclas Esc, 1, Tab, a. Teclas que utilizo bastante a diferencia del Shift izquierdo, o la tecla de Bloqueo de Mayúsculas (que sinceramente no creo haberla utilizado nunca).
Así que pensé que podía «remapear» la tecla Esc por la tecla Bloqueo de Mayúsculas y la tecla Tab por el Shift Izquierdo. Veamos cómo poder intercambiar el funcionamiento de esas teclas especiales en GNU/Linux.
Para hacer esto, deberemos editar un archivo del sistema, por lo que cuidado al hacerlo y antes de nada, vamos a crear una copia del archivo para poder restaurarla si fuera necesario. Ejecutamos:
sudo cp /usr/share/X11/xkb/symbols/pc /usr/share/X11/xkb/symbols/pc.bk
Hecho esto editamos con Vim (o tu editor preferido) dicho archivo:
sudo vim /usr/share/X11/xkb/symbols/pc
La parte inicial de mi archivo es la siguiente (el archivo es más largo, pero pego aquí esta parte, que es en la que he realizado las modificaciones):
default partial alphanumeric_keys modifier_keys xkb_symbols "pc105" { key <ESC> { [ Escape ] }; // The extra key on many European keyboards: key <LSGT> { [ less, greater, bar, brokenbar ] }; // The following keys are common to all layouts. key <BKSL> { [ backslash, bar ] }; key <SPCE> { [ space ] }; include "srvr_ctrl(fkey2vt)" include "pc(editing)" include "keypad(x11)" key <BKSP> { [ BackSpace, BackSpace ] }; key <TAB> { [ Tab, ISO_Left_Tab ] }; key <RTRN> { [ Return ] }; key <CAPS> { [ Caps_Lock ] }; key <NMLK> { [ Num_Lock ] }; key <LFSH> { [ Shift_L ] }; key <LCTL> { [ Control_L ] }; key <LWIN> { [ Super_L ] }; key <RTSH> { [ Shift_R ] }; key <RCTL> { [ Control_R ] }; key <RWIN> { [ Super_R ] }; key <MENU> { [ Menu ] };
Voy a intercambiar las teclas de Escape por la de Bloqueo Mayúsculas (Caps_Lock) y la Tabulador por la tecla Shift izquierda.
Por lo que después de la modificación mi archivo queda de la siguiente manera. Resalto en rojo el texto cambiado:
default partial alphanumeric_keys modifier_keys xkb_symbols "pc105" { key <ESC> { [ Caps_Lock ] }; // The extra key on many European keyboards: key <LSGT> { [ less, greater, bar, brokenbar ] }; // The following keys are common to all layouts. key <BKSL> { [ backslash, bar ] }; key <SPCE> { [ space ] }; include "srvr_ctrl(fkey2vt)" include "pc(editing)" include "keypad(x11)" key <BKSP> { [ BackSpace, BackSpace ] }; key <TAB> { [ Shift_L ] }; key <RTRN> { [ Return ] }; key <CAPS> { [ Escape ] }; key <NMLK> { [ Num_Lock ] }; key <LFSH> { [ Tab, ISO_Left_Tab ] }; key <LCTL> { [ Control_L ] }; key <LWIN> { [ Super_L ] }; key <RTSH> { [ Shift_R ] }; key <RCTL> { [ Control_R ] }; key <RWIN> { [ Super_R ] }; key <MENU> { [ Menu ] };
Guardamos el texto y salimos del editor. Ahora deberemos reiniciar nuestro equipo (no sé si sirve solo con cerrar la sesión).
Al volver a nuestra sesión, podremos comprobar cómo se ha efectuado el cambio de estas dos teclas.
Si algo no ha salido bien, podremos volver atrás, restaurando la copia .bk del archivo original que hemos creado al inicio.
Espero que os haya servido de utilidad. También de esta manera en Vim tendremos la tecla Esc, para cambiar de modos del editor, más cerca de la «zona caliente» de nuestro teclado y no deberemos desplazarnos hasta la esquina superior izquierda para presionarla.
¿Utilizas algún truco similar a la hora de «mapear» tu teclado? Compártelo en los comentarios…
He tenido que recurrir a bash_history para recordar algunos comandos que usé en el pasado para mapear algunas teclas en DWM:
dumpkeys
xmodmap
xev
xmodmap es uno de los más usados en Linux por los usuarios para mapear las teclas.
xmodmap -pke
(para obtener los KeyCodes), oxmodmap -pke | grep Caps_Lock
(si se el KeySym). El resultado: keycode 66 = Caps_Lock NoSymbol Caps_LockSe puede filtrar algunos términos, aunque la salida de xmodmap, en si, no es tan engorrosa como para filtrar:
xmodmap -pke | grep Escape | awk '{print $1, $2, $4}'
el resultado: keycode 9 Escapexmodmap -pke | grep Caps_Lock | awk '{print $1, $2, $4}'
el resultado: keycode 66 Caps_LockMapear:
xmodmap -e "keycode 66 = Escape"
a la inversa:
xmodmap -e "keycode 9 = Caps_Lock"
con el comando
xev
obtengo los valores oprimiendo las teclas (me ha sido muy útil, me gusta este comando).Interactivo:
Es ideal para los que no quieren usar la consola (no lo he usado)
xkeycaps
El método tuyo parece ser más amigable. Gracias por compartir esta idea.
Saludos.
Me alegro que te resulte interesante!!!
Gracias por compartir tu solución y por comentar!!