Você pode usar isso com o mapa XKB personalizado. Eu recomendo que você copie o mapa atual com xkbcomp $DISPLAY dump.xkb , edite e carregue com xkbcomp newmap.xkb $DISPLAY . O arquivo de despejo é muito grande e tem muitas informações supérfluas.
A maneira mais fácil de editar é ver como o altgr é usado no mapa atual. Geralmente é o modificador ISO_LEVEL3. Se o seu mapa de chaves atual não usa altgr, você pode tentar carregar um que faça para ver como isso pode ser feito. Por exemplo, -layout us -variant altgr-intl é bastante extenso e tem a maioria das chaves européias, se não todas. Abaixo está um pequeno resumo do que está acontecendo.
O xkb obtém os códigos-chave do kernel, define um rótulo para cada um e usa esse rótulo e as teclas modificadoras para decidir que keysym ele deve produzir. Cada chave tem um tipo atribuído a ela que define quais teclas modificadoras ela espera e o que deve ser enviado para cada combinação. Olhando para o despejo que você obteve com xkbcomp : os rótulos estão definidos em xkb_keycodes , tipos em xkb_types e label-to-keysym em xkb_symbols . Destes, xkb_symbols é o que você deseja editar e referenciar os outros dois para saber o que alterar. Você também pode simplesmente olhar para o xkb_symbols e descobrir como ele está sendo feito no momento e editá-lo conforme apropriado.
xkb_types contém diferentes níveis de modificadores para definições de chave e você desejará um que tenha modos altgr e shift. Exemplo:
type "FOUR_LEVEL_ALPHABETIC" {
modifiers= Shift+Lock+LevelThree;
map[Shift]= Level2;
map[Lock]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Lock+LevelThree]= Level4;
map[Shift+Lock+LevelThree]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
Isso significa que a chave marcada como FOUR_LEVEL_ALPHABETIC tem quatro modos. Normal, shift / caps, altgr, altgr-shift que soa como o que você está procurando.
Agora você quer descobrir qual é o código-chave para w se ainda não o conhece.
xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/ /p' fornece o código-chave para as teclas que você pressiona. grep está lá para tornar a saída mais legível.
Faça referência cruzada ao código que você obteve com a seção xkb_keycodes do mapa de dump que você recebeu anteriormente. Para mim, w dá keycode 25. less o despejo e encontra o keycode correto em forma de <LABEL> = ##; , exemplo <AD02> = 25; . Ou cat dump.xkb| grep ' = 25;' Label é apenas um nome que o xkb usa para referenciar a chave em seções posteriores.
Agora que você tem o marcador, vá para xkb_symbols , que realmente mapeia os marcadores para os teclados. O formato é
key <AD02> {
type= "FOUR_LEVEL_ALPHABETIC",
symbols[Group1]= [ w, W, aring, Aring ]
};
type= é o tipo que você quer da seção xkb_types , symbols[Group1]= tem um keysym para cada um dos modos exigidos pelo tipo. Novamente, normal, shift / caps, altgr, shift-altgr para esse tipo. [Group1] , até onde entendi, é um método de usar vários mapas de teclado que você pode alterar rapidamente com uma chave de bloqueio configurada. Eu não uso grupos, então tudo é group1 para mim.
para encontrar todos os diferentes teclados que você pode usar aqui, confira /usr/include/X11/keysymdef.h . Os dois símbolos que você está procurando são ae para æ e AE para Æ.
key <AD02> {
type= "FOUR_LEVEL_ALPHABETIC",
symbols[Group1]= [ w, W, ae, AE ]
};
Eu posso ter divagado um pouco. Confira a página do Arch Wiki no XKB, é bom, não importa qual OS ou distro você esteja usando.