il modo migliore sarebbe di non usare uno script, ma di caricare una tastiera a due livelli (ad es . :) setxmodmap "us,se"
e ridefinire il Ctrl- Escper inviare ISO_Next_Group
Guarda questa risposta su xkb per come ridefinire alcune chiavi senza la necessità di modificare i file predefiniti principali (quindi, non è necessario essere root). Nel file dei simboli locali (ad esempio:) ~/.xkb/symbols/mysymbols
inserisci una piccola sezione come:
partial modifier_keys
xkb_symbols "ctrl_esc_toggle" {
key <ESC> {
type[Group1]="PC_CONTROL_LEVEL2",
symbols[Group1]= [ Escape, ISO_Next_Group ]
};
};
PC_CONTROL_LEVEL2 indica che il simbolo sencond per quel tasto è ottenuto con Control (anziché Shift).
e nel file keymap locale (es :; ~/.xkb/keymap/mykbd
puoi crearlo con setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd
) cambia la riga xkb_symbols per aggiungere "mysymbols (ctr_esc_toggle)" così avrai qualcosa come:
xkb_symbols { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)" };
(notare "se: 2", ": 2" indica di caricare le definizioni dei simboli "se" come Gruppo2; è possibile impilare vari gruppi).
ora puoi caricarlo con: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
quindi Ctrl-Esc passerà tra i layout "us" e "se".
NOTA tuttavia che è necessario premere Ctrl (e tenere premuto) prima di Esc; nell'altro modo non funziona (richiederebbe la definizione di un modificatore virtuale per Escape e non so come farlo)