a melhor maneira seria não usar um script, mas carregar um teclado de duas camadas (por exemplo :) setxmodmap "us,se"
e redefinir o Ctrl- Escpara enviar ISO_Next_Group
Veja esta resposta no xkb para redefinir algumas chaves sem precisar editar os arquivos padrão principais (portanto, não precisa ser root). No arquivo de símbolos locais (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 chaves 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)" para que você tenha 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" indica para carregar as definições de 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
Ctrl-Esc alternará entre os layouts "us" e "se".
NOTA, no entanto, é necessário pressionar Ctrl (e segurar) antes de Esc; da outra maneira, não funciona (seria necessário definir um modificador virtual para o Escape, e não sei como fazê-lo)