Script para alternar setxkbmap

8

Me gustaría un script bash que alterna entre: setxkbmap sey setxkbmap us.

Entonces, mis intenciones son asignar ese script a CtrlEsctravés del Teclado> atajos personalizados.

El punto es que quiero cambiar la distribución del teclado CtrlEscape. ¿Cómo puedo implementar eso?

Fredrik
fuente
1
¿Qué DE usas?
Margarita
3
XKB puede configurar una clave para cambiar entre diseños. Esto no es algo que quieras escribir, pero probablemente haya una configuración precocinada en algún lugar donde solo necesites seleccionar qué par de diseños y qué combinación de teclas prefieres.
Gilles 'SO- deja de ser malvado'

Respuestas:

3

No sé qué entorno de escritorio está ejecutando, cómo va a asignar una tecla de acceso directo puede variar, pero este script funciona a nivel mundial, al menos en mi Ubuntu 12.04 boxy Arch Linux:

#!/bin/bash

(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us
margarita
fuente
Desafortunadamente, esto no funciona si cambia el diseño utilizando un método gui. Al menos, no lo hace en mi caja xfce. Solo funciona si usa setxkbmap para cambiar diseños. La única forma en que siempre he encontrado que siempre funciona consistentemente es analizando xmodmapcomo en mi respuesta a continuación.
terdon
@terdon funciona al menos en mi caja Ubuntu 12.04, ¿has probado eso en tu sistema?
margarita
Sí, créame, he pasado mucho tiempo lidiando con este tipo de problema. Regularmente cambio entre 3 diseños de teclado (us, fr, es) y entre dos teclados físicos, uno con diseño de EE. UU. Y otro con español. Si uso el applet en mi panel tint2 para cambiar la distribución del teclado, no hay ninguna diferencia en la salida de setxkbmap. Lo mismo ocurre si cambio de diseño usando un acceso directo configurado a través de la keyboard shortcutsGUI en mi LMDE. setxkbmapsolo cambia cuando cambio de usarlo.
terdon
Muy ordenado con una solución de línea. Gracias.
Fredrik
Lo que terminé haciendo fue guardar la línea en un archivo .sh en mi directorio de inicio. Luego mapeado ./toggleLayout.sh a ctrl-esc
Fredrik
4

Hay varias respuestas a preguntas similares . Sin embargo, ninguno de ellos funciona de manera sólida para mí.

El siguiente script debería funcionar en todos los casos. Ciertamente funciona en mi sistema Debian al cambiar diseños con setxkbmap:

#!/bin/bash
seven=`xmodmap -pke | grep "keycode  16" | awk '{print \$5}'` 
## If this is the "us" layout
if [ $seven == "ampersand" ]; then
    setxkbmap se
else
  setxkbmap us
fi

El script analiza la salida de xmodmap para ver si el diseño actual es "us" o "se". En el diseño "nosotros", SHIFT+ 7se asigna a "ampersand". Si solo va a alternar entre los diseños "nos" y "se", tener "ampersand" activado 7significa que está utilizando el diseño "nos" y el guión cambiará a "se". Si no tiene "ampersand" activado 7, el script cambia a "nosotros".

terdon
fuente
4

la mejor manera sería no usar un script, sino cargar un teclado de dos capas (por ejemplo :) setxmodmap "us,se"y redefinir el Ctrl- Escpara enviar ISO_Next_Group

Mire esta respuesta en xkb para ver cómo redefinir algunas claves sin necesidad de editar los archivos predeterminados principales (por lo tanto, no es necesario ser root). En el archivo de símbolos locales (por ejemplo:) ~/.xkb/symbols/mysymbolsponga una pequeña sección como:

partial modifier_keys 
xkb_symbols "ctrl_esc_toggle" {
    key <ESC> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Escape,     ISO_Next_Group ]
    };
};

PC_CONTROL_LEVEL2 dice que el segundo símbolo de esa tecla se obtiene con Control (en lugar de Shift).

y en el archivo de mapa de teclas local (por ejemplo: ~/.xkb/keymap/mykbdpuede crearlo con setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd) cambie la línea xkb_symbols para agregar "mysymbols (ctr_esc_toggle)" para que tenga algo como:

xkb_symbols   { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)"   };

(tenga en cuenta que "se: 2", el ": 2" le indica que cargue las definiciones de símbolos "se" como Grupo2; puede apilar varios grupos).

ahora puede cargarlo con: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY luego Ctrl-Esc cambiará entre los diseños "nos" y "se".

Sin embargo, tenga en cuenta que debe presionar Ctrl (y mantener) antes de Esc; Por otro lado, no funciona (requeriría definir un modificador virtual para Escape, y no sé cómo hacerlo)

Pablo Saratxaga
fuente
1
¿Cómo se leftwin+leftalt+spacevería?
Hotschke
@Hotschke, gracias{ include "pc+us+ru:2+inet(evdev)+group(win_space_toggle)" };
contributorpw