Випадково знайшла, чому не працюють hotkeys. Щоб вони працювали, першою з розкладок, серед яких можна перемикатися, має бути розкладка з латинкою. Тобто, замість поодинокої ua треба виставляти, скажімо, "us,ua" та якось "перемикати розкладку". Нажаль, xkb не має функції "перемкнути розкладку", тому її доведеться емулювати. Скажімо, так
setxkbmap -layout us,ua -option grp:shifts_toggle
xte "keydown Shift_L" "key Shift_R" "keyup Shift_L"'
(Shift_L + Shift_R обрала як комбінацію, яка фізично є на клавіатурі, але не використовується навіть для hotkeys)
Щоб вийшло справді нециклічне перемикання, треба спочатку переконатися, що вибрано англійську розкладку, тобто загалом:
setxkbmap us
setxkbmap -layout us,ua -option grp:shifts_toggle
xte "keydown Shift_L" "key Shift_R" "keyup Shift_L"'
Тепер це все беремо всередину sh -c '...' і вішаємо на hotkeys (замінюючи ua на інші потрібні розкладки).
Недолік теж є: трохи повільно працює.
UPD:
Знайшла варіант без недоліку - утиліта перемикання все ж є, але вона "нестандартна", тобто не входить до дистрибутивів. Для Mint/Ubuntu пакет можна встановити з ppa:atareao/atareao. Для іншіх дистрів доведеться збирати з сирців. Зветься xkb-switch, використання:
xkb-switch -s ua
(там є й інші опції, але для нециклічного перемикання достатньо цієї)