Use setxkbmap para intercambiar el Shift izquierdo y el Control izquierdo

17

¿Es posible intercambiar las teclas izquierda Shifty izquierda CTRLusando en setxkbmaplugar de xmodmap?

EDITAR

Me cambié a Fcitx , que funciona mucho mejor con la distribución de mi teclado y el mapa de teclas personalizado que IBus en todos los aspectos. Lo recomiendo altamente.

día
fuente

Respuestas:

28

xmodmapes obsoleto; así que de hecho debería hacerse con las xkbherramientas.

El intercambio que desea parece no estar incluido por defecto con los archivos X11; así que tienes que escribirlo tú mismo.

La página http://madduck.net/docs/extending-xkb/ me ayudó a comprender y encontrar una manera de hacerlo.

Cree un archivo ~/.xkb/keymap/mykbddonde coloque la salida setxkbmap, será su definición de teclado base; p.ej:

setxkbmap -print > ~/.xkb/keymap/mykbd

luego, cree un archivo de símbolos para definir su intercambio de claves, póngalo por ejemplo en ~/.xkb/symbols/myswap

allí, ponga las siguientes líneas:

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key <LCTL>  { [ Shift_L ] };
    replace key <LFSH> { [ Control_L ] };
};

luego, edite el ~/.xkb/keymap/mykbdarchivo y cambie la xkb_symbolslínea para agregar

+myswap(swap_l_shift_ctrl)

finalmente, puede cargarlo con xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY(no puede usar "~" para el -Iparámetro). Probablemente arrojará muchas advertencias sobre símbolos indefinidos para algunas teclas raras, pero puede ignorarlas (por ejemplo, error de redireccionamiento a dave:) 2> /dev/null.

Si desea poder intercambiar fácilmente entre un ctrl / shift normal y uno invertido; simplemente cree bajo ~/.xkb/keymap/otro archivo, sin la opción adicional "myswap", y cárguelo con xkbcomp. Puede hacer dos pequeños scripts para cargarlos.

Pablo Saratxaga
fuente
1
Gracias. Funciona, pero por una vez. El problema es que estoy usando un motor de entrada llamado IBus. Cada vez que cambié el método de entrada y luego presioné la tecla "Ctrl + Espacio", Shift Izquierdo y Control Izquierdo se vuelven a activar. Cualquier sugerencia sobre cómo evitarlo.
día
mmn, quizás IBus hace algunas redefiniciones de teclado. intente xkbcomp $DISPLAY some.dumpdespués y antes de llamar a IBus, y haga una diferencia de los dos volcados (son la definición completa del teclado); probablemente verás diferencias.
Pablo Saratxaga
Hmm, sí, qué molesto. ¿Alguna idea para deshacerse del problema? Tenga en cuenta que el comando setxkbmap -option caps:escapefunciona. IBus recordó las teclas intercambiadas Esc y las teclas Bloq Mayús, pero no sirve para las teclas intercambiadas Left Shift y Left Control.
día
quizás IBus leyó el teclado cuando se lanzó. Intente descargar IBus, cambiar su teclado y cargarlo nuevamente. Si el problema persiste, entonces se debe hacer una pregunta específica de IBus (y tal vez informar un error; en mi opinión, IBus debería detectar cambios en el teclado y honrarlos)
Pablo Saratxaga
Hola. ¿Alguien puede decirme cómo usaría la misma técnica para cambiar la tecla Alt izquierda con la tecla Control izquierda? Intenté cambiar el archivo myswap a: modifier_keys parcial xkb_symbols "swap_l_shift_ctrl" {reemplazar clave <LCTL> {[Alt_L]}; reemplazar clave <LALT> {[Control_L]}; }; Pero no funcionó. TIA !!!
Neil Girardi
3

Me encontré con algunos problemas de mapeo LALTpara Control_Lusar la solución de Pablo , parece que también debes configurar las modifier_mapopciones.

Copié una plantilla de /usr/share/X11/xkb/symbols/altwin- busque xkb_symbols "ctrl_alt_win"- y la modifiqué para establecer los siguientes cambios:

  • Tecla LALT para controlar **
  • Tecla LWIN a Alt
  • Tecla MENÚ a tecla Windows

El ~/.xkb/symbols/myswaparchivo final fue:

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};

También agregué -w0al xkbcompcomando para evitar cualquier salida de advertencia al abrir un nuevo shell.

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY

** Al cambiar mucho entre Mac y Linux, me gusta tener dos teclas de control en Linux para aproximar el teclado de Mac para mi memoria muscular.

Jo-el
fuente