¿Cómo reasignar permanentemente el bloqueo de mayúsculas a esc en X11?

9

Quiero reasignar el bloqueo de mayúsculas para escapar en X11 (es decir, presionar el botón de bloqueo de mayúsculas físico será interpretado como esc por las aplicaciones y el comportamiento de esc no cambiará). La solución debe sobrevivir a un reinicio X . xmodmap y setxkbmap son soluciones aceptables (como lo son los programas similares). No quiero tratar con una GUI, ya que quiero que la solución sea portátil y una parte de mis archivos de puntos. Si me falta una solución mejor / más fácil / más obvia, dígame, aunque tenga en cuenta que no estoy usando un DE (probando i3wm).

Hasta ahora he intentado usar xmodmap y setxkbmap con poco éxito.

Aquí está mi intento de usar xmodmap:

# ~/.xinitrc
xmodmap ~/.xmodmap

y

# ~/.xmodmap
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

Ejecutar $ xmodmap ~/.xmodmapdesde la línea de comandos funciona y hace lo que quiero. El problema es que esto se restablece cada vez que x se reinicia. Ahí es donde espero que llegue el xinitrc, ¿no debería cargarse cada vez que x se inicia y ejecuta el comando xmodmap? Si el comando funciona, ¿por qué no hace nada cuando se lee desde un archivo?

He intentado un par de cosas con setxkbmap, ninguno de los cuales funcionó. Los dos intentos a continuación estaban en el archivo en momentos separados.

# ~/.xinitrc
setxkbmap -option caps:esc     # attempt 1
setxkbmap -option esc:nocaps   # attempt 2

Ninguno de los comandos hizo nada perceptible desde la línea de comandos, por lo que supongo que he entendido mal el comando. Me gusta la idea de esta solución porque es de una sola línea y no requiere nada en otro archivo. Si tan solo funcionara.

¿Es .xinitrc el archivo incorrecto para usar? Sé que startx se está cargando desde ~ / .xinitrc.

Solicito que las posibles soluciones contengan el (los) archivo (s) completo (s), no solo una línea (si se requiere más de una en el archivo) para no estropear algunos pasos intermedios. Por ejemplo, si necesito algo en .xinitrc y algo en .xcapsrebind, muestre ambos archivos y todo el contenido requerido (también puedo manejar que me digan que agregue algo al final, pero si se requiere un & o similar, por favor dime).

ethanmad
fuente
2
En .xinitrc:setxkbmap -option caps:escape
jasonwryan
1
Correr xmodmapen .xinitrcdebería funcionar. Es lo que hago. ¿Tal vez mapear algo inusual, para asegurarse de que realmente se está ejecutando cuando comienza x? Además, ¿qué entorno de escritorio / administrador de ventanas utiliza? KDE periódicamente "corrige" la asignación de mi teclado sin que yo se lo diga. Tal vez verifique la configuración de su escritorio para asegurarse de que nada se esté ejecutando xmodmapa sus espaldas.
yellowantphil
jasonwryan: Probé eso en ambos .xinitrc; no funcionó ¡Funcionó desde la línea de comando! Entonces hay un comienzo. Creo que yellowantphil tiene razón, ~/.xinitrcno se está ejecutando. Estoy usando i3wm y no DE en este momento, aunque lo mismo estaba sucediendo en Pantheon cuando lo intenté. Por lo que puedo decir, i3 no se mete con el xinitrc ni carga el suyo (pero soy un novato, entonces, ¿qué sé?).
ethanmad
También puede intentar incluir Option "XkbOptions" "caps:escape"en un Xarchivo de configuración del teclado, por ejemplo/etc/X11/xorg.conf.d/10-keyboard.conf
don_crissti

Respuestas:

5

EDITAR: Como ha señalado un usuario útil, mi solución inicial no sobrevivirá a una actualización. Su solución en los comentarios debería funcionar. Si prefiere intercambiar Caps Lock y Escape en su lugar, recomendaría agregar los siguientes comandos desde su .xinitrc o desde la configuración de i3:

.xinitrc:

xmodmap -e "clear lock"
xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
xmodmap -e "keycode 66 = Escape NoSymbol Escape"

archivo de configuración de i3 (normalmente ubicado en .config / i3 / config o en .i3 / config)

# swap caps lock and escape
exec_always --no-startup-id xmodmap -e "clear lock"
exec_always --no-startup-id xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
exec_always --no-startup-id xmodmap -e "keycode 66 = Escape NoSymbol Escape"

Me doy cuenta de que esta pregunta es bastante antigua, pero pensé que podría agregar una respuesta para aquellos de nosotros que todavía estamos tratando de resolver esto.

Después de tener problemas similares con algunos DE que no se cargan ~/.xinitrc, evité por completo xmodmap, fui /usr/share/X11/xkb/symbolsy modifiqué la asignación de símbolos key => directamente.

Para hacerlo, edité el archivo de configuración para mi teclado ubicado en /usr/share/X11/xkb/symbols. Para la mayoría de los teclados, este debería ser el pcarchivo.

Después de abrir el archivo, cambié manualmente Escape y Caps_Lock para sus respectivas teclas, el resultado se muestra a continuación). Como esto afecta la forma en que X asigna el hardware al símbolo clave, debería funcionar independientemente de si está en GNOME o i3 o algo así.

Un fragmento de mi archivo resultante es el siguiente:

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> {        [ Tab,  ISO_Left_Tab    ]       };
    key <RTRN> {        [ Return                ]       };

    key <CAPS> {        [ Escape                ]       };
    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                  ]       };

Esto funcionó como un encanto para mí.

Al mirar alrededor de los archivos relacionados, encontré repetidas menciones e implementaciones parciales de algún tipo de indicador utilizado para cambiar ciertas teclas, como intercambiar Escape y Bloqueo de mayúsculas. Supongo que esto es lo que usan la herramienta Gnome Tweak Tool y setxkbmap; sin embargo, no pude encontrar la manera de mantener estas marcas con el administrador de ventanas i3. La solución anterior debería funcionar bien.

Espero que esto solucione el problema!

capsloch
fuente
en su configuración i3:exec --no-startup-id setxkbmap -layout whatever -variant whatever -option caps:escape
quijotesco
tenga en cuenta que sus cambios en el ...xkb/symbols/pcarchivo del sistema se sobrescribirán la próxima vez xkeyboard-configo xkb-dataque se actualicen los paquetes.
Quijotesco
1

Dos posibilidades:

1) .xinitrcno se está ejecutando: lo utilizan xinit, startx y algunos otros métodos para iniciar sesiones X, pero no es universalmente compatible; es posible que esté utilizando un administrador de pantalla que no lo ejecuta. Agregar algo a .xinitrc como touch /tmp/xinitrc-was-runpuede ayudar a determinar si ese es el caso.

2) Xorg se restablece automáticamente a la configuración predeterminada cuando no hay clientes conectados: si el .xinitrc finaliza antes de que el administrador de ventanas o cualquier otra cosa comience a ejecutarse, se perderán los cambios de xmodmap o setxkbmap.

Si ya hay una opción XKB definida que desea usar, en lugar de ejecutar programas para cambiar la configuración cada vez que Xorg se inicia, puede decirle a Xorg que ya inicie con la configuración correcta. Por ejemplo, para habilitar las teclas Ctrl-Alt-Retroceso para matar mi servidor X, he instalado un archivo llamado /etc/X11/xorg.conf.d/90-zap.confque contiene:

# This configuration snippet enables the Ctrl-Alt-Backspace server kill key
# 
# To use it, link or copy into /etc/X11/xorg.conf.d/
#
# Note that only the last XkbOptions setting seen for a device will be used,
# so to use multiple options, copy this file and add options into the Option
# string, such as "terminate:ctrl_alt_bksp,ctrl:swapcaps"

Section "InputClass"
    Identifier "keyboard zap by default"
    MatchIsKeyboard "on"

    Option "XKbOptions" "terminate:ctrl_alt_bksp"
EndSection

Puede leer más sobre esto en los documentos de X.Org en https://www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.html .

alanc
fuente