¿Cómo cambiar el mapa de teclas de la consola en Linux?

36

Me gustaría intercambiar Escy CapsLocken la consola (no en X y usar xev), ¿cómo puedo hacerlo?

Mi sistema operativo es Ubuntu.

Vayn
fuente

Respuestas:

60

Las herramientas para manipular la distribución del teclado en las consolas virtuales son loadkeys, dumpkeysy showkey. Lea sus páginas de manual e infórmese sobre sus complejidades.

Tenga en cuenta que estas herramientas solo funcionan en una consola virtual, no en un emulador de terminal en un entorno gráfico como gnome. Para conocer la diferencia, lea esta pregunta y sus respuestas: https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal .

Aquí hay una breve guía para hacer lo que quieras:

  1. Guarde su distribución de teclado actual:

    $ dumpkeys > backup.kmap
    

    En caso de que algo salga mal, puede restaurar su mapa de teclas con el comando:

    $ sudo loadkeys backup.kmap
    

    Si el teclado está tan desordenado que ni siquiera puede hacer esto, entonces su única opción que no involucra magia antigua del núcleo es reiniciar.

  2. Compruebe qué códigos de teclas están asignados a sus llaves:

    $ showkey
    

    Ahora presione la tecla ESC y la tecla BLOQ MAYÚS. Los códigos clave deberían aparecer en la pantalla. Tenga en cuenta los códigos clave. En mi sistema, el ESC tiene el código clave 1 y CAPSLOCK tiene el código clave 58. showkeyfinalizará después de 10 segundos de inactividad (al menos en mi ubuntu 10.04).

  3. Tenga en cuenta los nombres de las teclas ESC y CAPSLOCK de dumpkeys:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. Tenga en cuenta la línea de mapa de teclas de dumpkeys:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. Cree un archivo de mapa de teclas que cambie ESC y CAPSLOCK:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. Cargue el mapa de teclas:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. Prueba: probar la tecla BLOQ MAYÚS es obvio. Simplemente presione la tecla BLOQ MAYÚS y compruebe si otras teclas salen en mayúscula. Para probar la tecla ESC, puede usar CTRL + V seguido de ESC. Debería imprimir ^[. CTRL + V hace que el shell imprima textualmente la siguiente clave en lugar de interpretarla.

Para que esta modificación se cargue en cada reinicio, coloque la siguiente línea en su /etc/rc.localarchivo:

/usr/bin/loadkeys /path/to/swap_esc_capslock.kmap

Información recopilada de varias páginas, que incluyen, entre otras:

lesmana
fuente
55
También puede usar sudo setupcon --savepara hacer cambios permanentes, en lugar de editar rc.local. Eso es esencialmente lo mismo quedumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
bukzor
Es más seguro utilizar /usr/bin/loadkeysen /etc/rc.localya que la variable de entorno de ruta no se garantiza que se fije en esta etapa. Y sudono es necesario en rc.local.
August Karlstrom
@AugustKarlstrom El comando se rc.localejecuta cada vez que se inicia el sistema. @ bukzor's nosudo setupcon está en , es un comando de configuración de una sola vez, que reemplaza el mapa de teclas predeterminado del sistema, sin agregar ningún código de inicio de tiempo de ejecución. Añadiendo a , añade extra de la puesta en marcha de código y duplicados lo que ya fue hecho por el loadkeys por defecto del sistema. El método en realidad podría ser menos seguro porque depende de una ruta no estándar al mapa de teclas. rc.localloadkeysrc.localrc.local
RobertL
@RobertL por favor elabore el setupconmétodo. Agregue su propia respuesta o edite la mía si lo desea.
lesmana
No puedo verificar la declaración de @bukzor sobre setupcon. Parece que Augusto hizo la suposición de que el sudo setupcon --saveentraría en rc.localla que no creo que es cierto, pero si lo hace, no es necesario sudoen rc.local. Creo que necesitamos más información antes de actualizar su respuesta. La pregunta principal es "¿Cómo instalar el mapa de teclas modificado para que se cargue automáticamente durante el proceso de arranque?" Realmente no sé cuál es una mejor manera, rc.localo instalar un mapa de teclas, o incluso si la instalación de un mapa de teclas funcionará. He estado investigando esto últimamente y volveré a consultar aquí.
RobertL
4

Use 'ctrl: nocaps' en lugar de 'ctrl: swapcaps' si solo desea tener dos teclas de bloqueo de mayúsculas (el bloqueo de mayúsculas por otro nombre sigue siendo súper inútil).

X11: (ver también: /usr/share/X11/xkb/rules/base.lst)

sudo vim /etc/default/keyboard
    XKBOPTIONS="ctrl:swapcaps"
udevadm trigger --subsystem-match=input --action=change
sudo restart lightdm

Consola de texto: (robado de setupcon)

#!/bin/sh
. /etc/default/console-setup 
. /etc/default/keyboard
ckbcomp $acm_option $rules_option -model "$XKBMODEL" \
            "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \
            | gzip -9 2>/dev/null >/etc/console-setup/cached.kmap.gz
loadkeys /etc/console-setup/cached.kmap.gz
bukzor
fuente