История изменений
Исправление Zubok, (текущая версия) :
Можно вот так примерно. Но есть проблемка одна:
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_geometry { include "pc(pc105)" };
xkb_compatibility { include "complete" };
xkb_types { include "complete" };
xkb_symbols {
replace key <AE01> {
type = "EIGHT_LEVEL",
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=1) ],
actions[Group2] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=1) ],
actions[Group3] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=1) ]
};
replace key <AE02> {
type = "EIGHT_LEVEL",
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=2) ],
actions[Group2] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=2) ],
actions[Group3] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=2) ]
};
replace key <AE03> {
type = "EIGHT_LEVEL",
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=3) ],
actions[Group2] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=3) ],
actions[Group3] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=3) ]
};
include "pc+us+ru:2+de:3+inet(evdev)+level5(caps_switch)+level3(ralt_switch)"
};
};
Что тут сделано. CapsLock вешаем на level5. На Level3 не стал вешать, так как в базовой немецкой раскладке на третьем уровне на кнопках <1>, <2>, <3> есть символы какие-то, хоть и специфичные. На level3 повесил правый Alt.
Закидываем на сервер xkbcomp caps_1_2_3.xkb $DISPLAY
, можно потом еще холостой setxkbmap без параметров. В общем-то, работает. Но теперь проблема. Я проверил у себя на каких-то приложениях Qt5, Emacs, GTK3 (Inkscape), GTK2 (Gimp), Blender. но вот Firefox перед переключением раскладки печатает 1, 2 или 3. У меня какое-то впечатление, что FF как-то по-своему обрабатывает кнопки.
Исходная версия Zubok, :
Можно вот так примерно. Но есть проблемка одна:
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_geometry { include "pc(pc105)" };
xkb_compatibility { include "complete" };
xkb_types { include "complete" };
xkb_symbols {
replace key <AE01> {
type = "EIGHT_LEVEL",
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=1) ],
actions[Group2] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=1) ],
actions[Group3] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=1) ]
};
replace key <AE02> {
type = "EIGHT_LEVEL",
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=2) ],
actions[Group2] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=2) ],
actions[Group3] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=2) ]
};
replace key <AE03> {
type = "EIGHT_LEVEL",
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=3) ],
actions[Group2] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=3) ],
actions[Group3] = [ NoAction(), NoAction(), NoAction(), NoAction(), LockGroup(group=3) ]
};
include "pc+us+ru:2+de:3+inet(evdev)+level5(caps_switch)+level3(ralt_switch)"
};
};
Что тут сделано. CapsLock вешаем на level5. На Level3 не стал вешать, так как в базовой немецкой раскладке на третьем уровне на кнопках <1>, <2>, <3> есть символы какие-то, хоть и специфичные. На level3 повесил правый Alt.
Закидываем на сервер xkbcomp caps_1_2_3.xkb $DISPLAY
, можно потом еще холостой setxkbmap без параметров. В общем-то, работает. Но теперь проблема. Я проверил у себя на каких-то приложениях Qt5, Emacs, GTK3 (Inkscape), GTK2 (Gimp), Blender. но вот Firefox перед переключением 2раскладки печатает 1, 2 или 3. У меня какое-то впечатление, что FF как-то по-своему обрабатывает кнопки.