Tecla de menu de mapeamento para alt usando setxbdmap

3

Em um Asus X551M executando o Xubuntu 14.04, gostaria de definir a seguinte configuração de teclado:

O par de teclas modificadoras imediatamente adjacentes à barra de espaços são mapeadas para controle. O próximo par mais próximo é mapeado para Alt .

Ou seja, a linha inferior do meu teclado é assim:

[ctrl] [fn] [win] [alt] [    space    ] [alt] [menu] [ctrl]

Considerando que eu quero que ele se comporte logicamente assim:

[ctrl] [fn] [alt] [ctrl] [    space    ] [ctrl] [alt] [ctrl]

(Eu nunca uso o par mais externo de teclas Ctrl , então seu mapeamento é arbitrário.)

No passado, fiz isso editando manualmente o arquivo xmodmap , que nunca funciona na primeira tentativa. Além disso, xmodmap é bloqueado ao carregar arquivos de configuração, o que aparentemente é um problema conhecido. Tudo o que li sobre o assunto sugere que xmodmap está obsoleto e devo usar setxbdmap .

Então eu tentei pela primeira vez:

setxbdmap -option altwin:ctrl_alt_win

que funciona quase perfeitamente. Agora meu teclado é logicamente:

[ctrl] [fn] [alt] [ctrl] [    space    ] [ctrl] [menu] [ctrl]

i.e. Eu só preciso mapear a tecla Menu para Alt . Existe uma maneira de fazer isso usando setxbdmap ?

Em seguida, procurei por /usr/share/X11/xbd/rules/evdev.lst até encontrar a linha:

altwin:menu     Add the standard behavior to Menu key

e tentou isso, mas parece não ter feito diferença. Existe uma opção:

ctrl:menu_rctrl   Menu as Right Ctrl

que é quase o que eu quero, exceto, naturalmente, que mapeia Menu para Ctrl ao invés de Alt . Então, existe alguma maneira de fazer isso com setxbdmap ?

    
por Patrick O'Neill 24.08.2014 / 22:38

1 resposta

2

Você pode criar um arquivo ~/.xkb/symbols/local contendo:

xkb_symbols "local" {
    key <LWIN> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <MENU> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <LALT> {         [       Control_L ] };
    key <RALT> {         [       Control_R ] };
};

ou

xkb_symbols "local" {
    key <LWIN> {
        type= "ONE_LEVEL",
        symbols[Group1]= [            Alt_L ]
    };
    key <MENU> {
        type= "ONE_LEVEL",
        symbols[Group1]= [            Alt_R ]
    };
    key <LALT> {         [       Control_L ] };
    key <RALT> {         [       Control_R ] };
};

(ou algo entre), dependendo do tipo de Alt desejado. E faça cada vez que você iniciar o X (por exemplo, no seu arquivo ~/.xsession se você tiver um):

mkdir -p .xkb/keymap
setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' > $HOME/.xkb/keymap/custom
xkbcomp -w0 -I$HOME/.xkb -R$HOME/.xkb keymap/custom $DISPLAY

A segunda linha cria um arquivo ~/.xkb/keymap com xkb_symbols { include "...+local" }; , ou seja, que inclui ~/.xkb/symbols/local quando xkbcomp (terceira linha) é usado com a opção -I$HOME/.xkb . Você pode verificar este arquivo antes de executar xkbcomp .

Eu não tentei exatamente isso, mas isso é baseado no que estou fazendo: link ( sem o diretório types ).

    
por 25.08.2014 / 02:26