лучшим способом было бы не использовать скрипт, а загрузить двухслойную клавиатуру (например :) setxmodmap "us,se"
и переопределить Ctrl- Escдля отправки ISO_Next_Group
Посмотрите на этот ответ на xkb, чтобы узнать, как переопределить некоторые ключи без необходимости редактировать основные файлы по умолчанию (таким образом, не нужно быть пользователем root). В файле локальных символов (например:) ~/.xkb/symbols/mysymbols
поместите небольшой раздел как:
partial modifier_keys
xkb_symbols "ctrl_esc_toggle" {
key <ESC> {
type[Group1]="PC_CONTROL_LEVEL2",
symbols[Group1]= [ Escape, ISO_Next_Group ]
};
};
PC_CONTROL_LEVEL2 сообщает, что второй символ для этого ключа получен с помощью Control (вместо Shift).
и в локальном файле раскладки (например:; ~/.xkb/keymap/mykbd
вы можете создать его с помощью setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd
) измените строку xkb_symbols, добавив «mysymbols (ctr_esc_toggle)», так что вы получите что-то вроде:
xkb_symbols { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)" };
(обратите внимание на «se: 2», «: 2» говорит загружать определения символов «se» как Group2; вы можете составлять различные группы).
теперь вы можете загрузить его с помощью: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
тогда Ctrl-Esc будет переключаться между макетами «us» и «se».
Обратите внимание, что вам нужно нажать Ctrl (и удерживать) перед Esc; с другой стороны, это не работает (это потребует определения виртуального модификатора для Escape, и я не знаю, как это сделать)