Вам нужно определить новый тип xkb. Вы можете увидеть примеры в вашем каталоге xkb / types (обычно /usr/share/X11/xkb/types
). Там вы можете определить произвольные комбинации модификаторов, чтобы получить разные уровни смещения. Для вашей проблемы вы можете использовать что-то вроде этого:
type "C_A_to_L3" {
modifiers = Control+Alt+Shift;
map[None] = Level1;
map[Shift] = Level2;
map[Control+Alt] = Level3;
map[Control+Alt+Shift] = Level4;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
};
Затем в вашем файле символов вы можете установить этот тип по умолчанию или установить для каждого ключа, какой это тип. Обратите внимание, что вам нужно, чтобы тип находился в файле в каталоге типов, а определение ключа в файле в каталоге символов - xkb использует строгую иерархию файловой системы для поиска каждого компонента.
Я сам немного взломал раскладки клавиатуры, чтобы создать свою собственную раскладку ( https://github.com/willghatch/hatchak ), которая прошла через различные итерации, где я экспериментировал со странными вещами. Иногда XKB может быть довольно странным и странным, но это все еще самая настраиваемая клавиатурная система, которую я когда-либо видел. Лучшие ссылки, если у вас есть больше проблем:
[edit: оригинальные ссылки в настоящее время не работают, но к счастью, archive.org существует]
https://web.archive.org/web/20150722164820/http://www.charvolant.org/~doug/xkb/html/index.html
а также
https://web.archive.org/web/20190419170426/http://pascal.tsu.ru/en/xkb/
Остерегайтесь - хотя это лучшая документация, которую я нашел, она оставляет множество темных крайних случаев. Удачи.