# cat types/nx_types partial default xkb_types "nx_types" { include "complete" type "CAPS" { modifiers = Shift+Control; map[Shift] = Level2; map[Control] = Level3; level_name[Level1] = "Base"; level_name[Level2] = "Shift"; level_name[Level3] = "Control"; }; }; # cat symbols/nx_group partial modifier_keys xkb_symbols "nx_caps_toggle" { key { type = "CAPS", actions[Group1] = [ LockGroup(group=2), LockMods(mods=Lock), LockGroup(group=3) ], actions[Group2] = [ LockGroup(group=1), LockMods(mods=Lock), LockGroup(group=3) ], actions[Group3] = [ LockGroup(group=1), LockMods(mods=Lock), LockGroup(group=2) ] }; }; В конфиге иксов писать: XkbKeycodes "xfree86+aliases(qwerty)" XkbTypes "nx_types" XkbCompat "complete+leds(scroll)" ## для xorg 6.9.0 надо писать: complete+ledscroll(group_lock). -- 2006-07-12 XkbSymbols "pc/pc(pc105)+pc/us+pc/ru:2+pc/ua:3+nx_group(nx_caps_toggle)" ## для xorg 7.2 надо писать: pc+us+ru:2+ua:3+nx_group(nx_caps_toggle). -- 2007-08-10 XkbGeometry "pc(pc105)" Или подключать на ходу: /usr/local/bin/xkbcomp ~/lib/xkbmap1 "$DISPLAY" $ less lib/xkbmap1 xkb_keymap { xkb_keycodes { include "xfree86+aliases(qwerty)" }; xkb_types { include "nx_types" }; xkb_compat { include "complete+ledscroll(group_lock)" }; xkb_symbols { include "pc+us+ru:2+ua:3+nx_group(nx_caps_toggle)" }; xkb_geometry { include "pc(pc105)" }; }; У xxkb не забыть выключить two_state. P.S. А всё-таки путаница этот ваш XKB. P.P.S. До досовского драйвера не дотянул - там запоминалось, какая из местных групп была выбрана перед латинской, и восстанавливалась она же; у меня всегда переходит на русскую. Но сначала мне было облом думать это, а потом я чуть переделал схему и решил, что мне это не нужно. UPD: P.S.[3]: странно себя ведут приложения если на эту раскладку переключено на ходу: SIGSEGV, однако. UPD[2006-07-12]: см. выше про 6.9.0 UPD[2007-08-10]: для Xorg 7.2 на фряхе путь - /usr/local/share/X11/xkb