Você precisa definir um novo tipo de xkb. Você pode ver exemplos em seu diretório xkb / types (geralmente /usr/share/X11/xkb/types
). Lá você pode definir combinações arbitrárias de modificadores para obter diferentes níveis de mudança. Para o seu problema, você pode usar algo como isto:
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";
};
Em seu arquivo de símbolos, você pode definir esse tipo como padrão ou definir por tipo de chave. Observe que você precisa que o tipo esteja em um arquivo no diretório types e a definição da chave em um arquivo no diretório dos símbolos - xkb usa uma hierarquia estrita do sistema de arquivos para encontrar cada componente.
Eu próprio fiz alguns hackers nos layouts de teclado para criar meu layout personalizado ( https://github.com/willghatch/hatchak ), que passou por várias iterações nas quais experimentei coisas estranhas. O XKB pode ser bastante sofisticado e estranho às vezes, mas ainda é o sistema de teclado mais configurável que já vi de longe. As melhores referências se você tiver mais problemas são:
[editar: os links originais estão inativos no momento, mas felizmente archive.org existe]
https://web.archive.org/web/20150722164820/http://www.charvolant.org/~doug/xkb/html/index.html
e
https://web.archive.org/web/20190419170426/http://pascal.tsu.ru/en/xkb/
Cuidado - embora essa seja a melhor documentação que encontrei, ela deixa muitos casos obscuros. Boa sorte.