a melhor maneira seria não usar um script, mas carregar um teclado de duas camadas (por exemplo: setxmodmap "us,se"
) e redefinir a Ctrl - Esc para enviar ISO_Next_Group
Veja este responda no xkb para saber como redefinir algumas teclas sem precisar editar os arquivos padrão principais (assim, não é necessário ser root).
No arquivo de símbolos local (por exemplo: ~/.xkb/symbols/mysymbols
) coloque uma pequena seção como:
partial modifier_keys
xkb_symbols "ctrl_esc_toggle" {
key <ESC> {
type[Group1]="PC_CONTROL_LEVEL2",
symbols[Group1]= [ Escape, ISO_Next_Group ]
};
};
o PC_CONTROL_LEVEL2 informa que o símbolo sencond para essa chave é obtido com Control (em vez de Shift).
e no arquivo de mapa de teclado local (por exemplo: ~/.xkb/keymap/mykbd
; você pode criá-lo com setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd
) altere a linha xkb_symbols para adicionar "mysymbols (ctr_esc_toggle)"
então você terá algo como:
xkb_symbols { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)" };
(observe o "se: 2", o ": 2" informa para carregar as definições dos símbolos "se" como Grupo2; você pode empilhar vários grupos).
agora você pode carregá-lo com: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
então Ctrl-Esc alternará entre os layouts "us" e "se".
OBSERVE que você precisa pressionar Ctrl (e segurar) antes de Esc; Por outro lado, não funciona (seria necessário definir um modificador virtual para Escape e não sei como fazê-lo)