O que é pegar minha tecla Ctrl + s?

3

Tendo acabado de atualizar para o Linux Mint 18.1, o KDE (Plasma 5.8.5, Qt 5.6.1) está funcionando bem, exceto por um problema estranho que eu nunca encontrei antes. Algo está pegando minha sequência "Ctrl + s" no que parece no nível X-window, uma vez que nunca atinge o nível do aplicativo. Por exemplo, nem as teclas emacs "Ctrl + s" nem "Ctrl + x Ctrl + s" funcionam. Mesmo no programa mais típico do KDE, a sequência "Ctrl + s" está inativa. Eu acho que isso poderia ser o framework KDE também, mas não existe uma tecla de atalho global como Ctrl + S (eu movi o Ctrl + S global para Ctrl + Shift + S)

E aqui está o toque; É apenas a seqüência "Ctrl + s" que está morta. Todos os outros, para mim conhecidos, as teclas Ctrl funcionam como esperado.

Alguma pista do que está acontecendo é obtida executando xev . Digitar Ctrl + s gera a seguinte sequência

KeyPress event, serial 40, synthetic NO, window 0x3400001,
    root 0x4c4, subw 0x0, time 14783934, (-711,685), root:(1159,750),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 40, synthetic NO, window 0x3400001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 40, synthetic NO, window 0x3400001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 40, synthetic NO, window 0x0,
    keys:  2   0   0   0   4294967200 0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 40, synthetic NO, window 0x3400001,
    root 0x4c4, subw 0x0, time 14784998, (-711,685), root:(1159,750),
    state 0x4, keycode 39 (keysym 0x73, s), same_screen YES,
    XLookupString gives 1 bytes: (13) ""
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x3400001,
    root 0x4c4, subw 0x0, time 14785566, (-711,685), root:(1159,750),
    state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Isso é bem diferente de, digamos, pressionar, digamos Ctrl + y. A seqüência Ctrl + s gera tanto um "FocusOut" quanto um "FocusIn", que é o problema central. Isso indica que algum processo está pegando a seqüência, possivelmente o gerenciador de janelas do KDE. No entanto, não posso, para minha vida, identificar qual processo está pegando a chave.

Minha teoria é confirmada executando showkey -a em um terminal. Isso claramente confirma que o aplicativo elevel nunca recebe o Ctrl + s. Todos os outros Ctrl + fornecem um código de acesso, por exemplo

^Y       25 0031 0x19
^R       18 0022 0x12
^T       20 0024 0x14
^T       20 0024 0x14

No entanto, tente digitar Ctrl + s e nada acontece.

Além disso, tenho o dobro (e o triplo) verificado que não existem teclas de atalho globais no KDE mapeadas para Ctrl + s, nem as teclas Ctrl + s realmente fazem nada. Parece ser enviado diretamente para / dev / null ...

Eu também tentei

xdotool keydown Ctrl+s;xdotool key XF86LogGrabInfo; xdotool keyup Ctrl+s;

para ver se consigo encontrar o processo que está pegando a tecla Ctrl + s. A partir dos logs, no entanto, não consigo identificar nenhum processo desse tipo.

Estou começando a ficar sem ideias e esperava que alguém tivesse uma ideia de onde procurar em seguida?

    
por Johan 26.02.2017 / 20:12

1 resposta

4

A análise do Xorg.0.log em mais detalhes mostrou que Ctrl+s foi consumido pelo processo kglobalaccel5 , que é o gerenciador global de teclas de atalho do Wayland / KDE.

No entanto, como eu sabia que não havia uma chave Ctrl+s definida como uma tecla de atalho global, a única solução era que se tratava de uma colisão de keymaps (ou melhor, uma colisão de acordes chave).

Aconteceu (após alguns testes de tentativa e erro) que os eventos chave resultantes para Ctrl+§ no meu teclado eram os mesmos que para Ctrl+s (eu costumava mapear Ctrl+§ para abrir o "Widget do painel")

O mais provável é que eu use um mapeamento de teclado genérico e não seja específico para o meu teclado de digitação rápida "rapoo". Eu não tenho o conhecimento detalhado de como a interação de teclas + modificador pode resultar nessa colisão. As teclas normais, ou seja, 's' e '§' funcionam individualmente, mas, aparentemente, usá-las juntamente com o modificador 'Ctrl' fornece o mesmo valor de acorde.

A solução foi remover o mapeamento global para Ctrl+§

Problema interessante!

    
por 27.02.2017 / 00:30