Como forçar o servidor X a produzir um keysym e um estado específicos?

1

Eu tenho um Macbook que eu quero mapear a tecla "command" (também conhecida como Super_R, RWIN) para AltGr. As razões que eu quero isso é devido a como um teclado norueguês normal tem suas chaves de colchetes e chaves de colchetes mapeadas, entre outras coisas.

No entanto, isso é um problema.

Eu mapeei a chave primeiro com o xmodmap, isso funciona bem na maioria dos programas. Mas não em certos programas, em particular, ele não funciona no Firefox.

Questões relevantes, mas não me ajudam:

link

link :

Como fazer o AltGr + i, j, k, l funcionam corretamente como teclas de cursor?

Solução Xmodmap:

keycode 134 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift

Suspeitando que era um problema com o Xmodmap, tentei com o XKB (X KeyBoard Extension): link

key <RWIN> {         [ ISO_Level3_Shift ] };

No entanto, o mesmo problema persiste.

Por "problema", quero dizer que simplesmente não funciona. Pressionando, e. meu novo AltGr + 4 deve produzir um cifrão, mas isso não acontece. Funciona bem na maioria dos programas (por exemplo, xterm), mas não no Firefox. No Firefox, ele produz um "4" em vez de um "$".

Como o post em link explica:

"Alguns aplicativos rastreiam keysyms como Control_L por si mesmos, outros apenas procuram os bits modificadores no estado."

"Muito provavelmente, aqueles programas que não funcionam, observam os modificadores e não querem trabalhar quando alguns estão ativos."

Acredito que o Firefox faça o mesmo.

Minha pergunta é: como posso forçar um estado exato a ser enviado para um aplicativo pelo servidor X quando pressiono uma combinação de teclas específica?

Isso é o que eu tenho:

KeyPress event, serial 37, synthetic NO, window 0x4200001,
    root 0x2de, subw 0x0, time 1100024, (222,-357), root:(1005,749),
    state 0xc0, keycode 13 (keysym 0x24, dollar), same_screen YES,
    XLookupString gives 1 bytes: (24) "$"
    XmbLookupString gives 1 bytes: (24) "$"
    XFilterEvent returns: False

Isto é o que eu quero (de um laptop diferente com um teclado adequado, ... é só que eu não me incomodei em digitá-lo à mão, já que não é relevante):

KeyPress event, serial 37, synthetic NO, window ...
   root 0x233, subw 0x0, time ...
   state 0x90, keycode 13 (keysym 0x24, dollar), same_screen YES,
   XLookupString gives 1 bytes: (24) "$"
   XmbLookupString gives 1 bytes: (24) "$"
   XFilterEvent returns: False

A parte relevante, creio eu, é o "estado". O estado especifica as teclas modificadoras.

Como posso forçar o X a produzir este estado e o keysym quando pressiono Super_R + 4? Se eu puder descobrir isso, provavelmente posso mapear as outras chaves que preciso também e, finalmente, ter um teclado que eu possa usar.

    
por AttributedTensorField 27.08.2015 / 20:40

0 respostas