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.