keybindings xmodmap não funcionam

4

Estou tentando usar o Xmodmap para adicionar alguns diareses / umlauts alemães ao meu teclado, mas o Xmodmap não está trabalhando com eles (mas com outros remapings).

Estou seguindo este guia: alemão Umlauts no teclado dos EUA no X (Ubuntu 10.04) .

Xmodmap

Eu adicionei isso ao meu ~/.Xmodmap :

keysym a = a A adiaeresis Adiaeresis
keysym o = o O odiaeresis Odiaeresis
keysym u = u U udiaeresis Udiaeresis
keysym s = s S ssharp ssharp

xev

No entanto, isso não funciona. Aqui está a saída de xev quando eu pressionar o , mantenha pressionado AltGr , pressione o , pressione x :

KeyPress event, serial 34, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 642618, (108,138), root:(173,190),
    state 0x10, keycode 32 (keysym 0x6f, o), same_screen YES,
    XLookupString gives 1 bytes: (6f) "o"
    XmbLookupString gives 1 bytes: (6f) "o"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 642644, (108,138), root:(173,190),
    state 0x10, keycode 32 (keysym 0x6f, o), same_screen YES,
    XLookupString gives 1 bytes: (6f) "o"
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 643792, (108,138), root:(173,190),
    state 0x10, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 645365, (108,138), root:(173,190),
    state 0x90, keycode 32 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 645409, (108,138), root:(173,190),
    state 0x90, keycode 32 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 647660, (108,138), root:(173,190),
    state 0x90, keycode 53 (keysym 0xd7, multiply), same_screen YES,
    XLookupString gives 2 bytes: (c3 97) "×"
    XmbLookupString gives 2 bytes: (c3 97) "×"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 647722, (108,138), root:(173,190),
    state 0x90, keycode 53 (keysym 0xd7, multiply), same_screen YES,
    XLookupString gives 2 bytes: (c3 97) "×"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 650223, (108,138), root:(173,190),
    state 0x90, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Você notará que pressionar AltGr é interpretado como ISO_Level3_Shift , e quando isso e x é pressionado, recebo keysym 0xd7, multiply , ou seja, × , que é definido como o meu terceiro nível para x . Então AltGr funciona.

$ xmodmap -pke | grep 53
keycode  53 = x X x X multiply approximate

No entanto, quando pressiono o , recebo keysym 0x0, NoSymbol , apesar do meu terceiro nível configurado:

$ xmodmap -pke | grep 32
keycode  32 = o O odiaeresis Odiaeresis

A mesma coisa acontece quando tento usar AltGr + ( a | u | s ). / p>

Xmodmap funciona para outros remapeamentos

Como minha chave PgUp no meu laptop é pequena, eu remapeei o teclado numérico + para Page Up no meu ~/.Xmodmap , e isso funciona bem. Então meu arquivo XModmap está sendo lido (parcialmente).

Por que minhas reatribuições para o / a / u não funcionam?

Estou usando o Ubuntu 14.0.1 confiável com o Ubuntu Unity.

    
por Rory 20.12.2014 / 11:09

2 respostas

1

Nota preliminar: parece que xmodmap foi alterado recentemente; configurações antigas não funcionam.

Para o seu caso, observe o número de valores para o código de tecla 53 (6 valores: x X x X multiply approximate ), que funciona, e para o código de tecla 32 (4 valores: o O odiaeresis Odiaeresis ), que não funciona.

ISO_Level3_Shift selecionará o 5º ou 6º valor, mas eles não estão configurados para o código-chave 32 no seu caso. Daí o resultado keysym 0x0, NoSymbol .

O que você precisa é:

keysym a = a A a A adiaeresis Adiaeresis
keysym o = o O o O odiaeresis Odiaeresis
keysym u = u U u U udiaeresis Udiaeresis
keysym s = s S s S ssharp ssharp

Mas talvez seja melhor usar o XKB diretamente ( exemplo ).

    
por 21.12.2014 / 01:21
0

Para que a macro Alt funcione como Alt Gr , ela precisa ser mapeada para Mode_switch em vez de ISO_Level3_Shift , adicionando a linha

keycode 108 = Mode_switch

para ~/.Xmodmap :

keycode 108 = Mode_switch
keycode  38 = a A adiaeresis Adiaeresis
keycode  30 = u U udiaeresis Udiaeresis
keycode  32 = o O odiaeresis Odiaeresis
keycode  39 = s S ssharp

Se você quiser os umlauts nas teclas que eles têm no teclado alemão, use:

keycode 108 = Mode_switch
keycode 48 = apostrophe quotedbl adiaeresis Adiaeresis
keycode 47 = semicolon colon odiaeresis Odiaeresis
keycode 34 = bracketleft braceleft udiaeresis Udiaeresis
keycode 20 = minus underscore ssharp

(Você pode combiná-los, é claro.)

    
por 18.04.2015 / 03:02