O que essa saída de xev significa?

4

Estou interessado em remapear algumas teclas no meu teclado. Em particular, quero manter pressionada a tecla de função, pressionar a tecla F1 e ativar esse script. Eu sei que xev é útil para descobrir qual código está associado a um pressionamento de tecla. Por exemplo, quando pressiono a tecla x , obtenho:

KeyPress event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1597243, (-190,43), root:(910,336),
    state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
    XLookupString gives 1 bytes: (78) "x"
    XmbLookupString gives 1 bytes: (78) "x"
    XFilterEvent returns: False

KeyRelease event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1597363, (-190,43), root:(910,336),
    state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
    XLookupString gives 1 bytes: (78) "x"
    XFilterEvent returns: False

Isso faz sentido para mim.

No entanto, quando pressiono a tecla Função-F1, não entendo o que acontece. Por que pressionar a tecla Função-F1 parece se comportar como se eu também tivesse pressionado o botão do Windows e digitado a letra l ?

xev output quando pressiono a função F1:

KeyPress event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735349, (-157,221), root:(943,514),
    state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735350, (-157,221), root:(943,514),
    state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
    XLookupString gives 1 bytes: (6c) "l"
    XmbLookupString gives 1 bytes: (6c) "l"
    XFilterEvent returns: False

MappingNotify event, serial 41, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyPress event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735356, (-157,221), root:(943,514),
    state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 41, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735357, (-157,221), root:(943,514),
    state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

MappingNotify event, serial 42, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyRelease event, serial 42, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735463, (-157,221), root:(943,514),
    state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
    XLookupString gives 1 bytes: (6c) "l"
    XFilterEvent returns: False

KeyRelease event, serial 43, synthetic NO, window 0x2600001,
    root 0xae, subw 0x0, time 1735470, (-157,221), root:(943,514),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Quando pressiono a tecla Função-F1 com uma janela de texto focada, ela digita a letra l .

Informações básicas: Executando o Lubuntu 11.10 em um Toshiba r835. Prazer em fornecer mais detalhes que possam ser úteis.

EDITAR:

Para comparação, quando digito Function-F12, recebo:

KeyPress event, serial 41, synthetic NO, window 0x2200001,
    root 0xae, subw 0x0, time 8369184, (-620,473), root:(480,766),
    state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 41, synthetic NO, window 0x2200001,
    root 0xae, subw 0x0, time 8369344, (-620,473), root:(480,766),
    state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Eu queria verificar se há algo especial sobre as teclas F1-F12, mas parece que pelo menos algumas delas funcionam como eu esperava.

    
por Andrew 04.03.2012 / 00:11

2 respostas

3

Quando você diz Function-F1, eu suponho que você queira pressionar aquela pequena tecla Fn no canto de um laptop, seguida da tecla F1 no canto superior esquerdo do teclado. E que você está tentando mapear uma das teclas extras, como Sleep, que alguns teclados de laptop têm. Parece que essa tecla está literalmente pressionando várias teclas para você. Primeiro eu vejo Win + L como um combo. No Windows, esse atalho bloqueia a tela, mas não inicia o protetor de tela. Em seguida, vejo um mapeamento para o XF86ScreenSaver, que pode significar que o X está vendo algum tipo de código de tecla do sono. Eu estou supondo que essa chave no teclado do seu laptop está enviando fisicamente os três códigos de tecla Win + L + Sleep como uma conveniência para os usuários do Windows bloquear rapidamente a tela e ativar o protetor de tela. Eu não tenho certeza de uma boa maneira de filtrar isso. A tecla Fn nos teclados normalmente não é vista pelo kernel do Linux. Em vez disso, altera os códigos que o teclado informa ao kernel. Quando eu estava tentando usar um controle remoto USB RF PowerPoint com o OOo no Linux, descobri que o botão para iniciar / parar a apresentação era apenas um controle coxo para enviar códigos alternativos de tecla F5 e ESC. Outros botões eram tão idiotas quanto mandar b para apagar a tela.

    
por 04.03.2012 / 00:35
0

Eu usei xbindkeys para essa finalidade. Simplesmente execute xbindkeys -k e pressione os botões desejados. Você deve obter uma saída como:

"(Scheme function)" 
    m:0x0 + c:244
    XF86Battery

cole isso no arquivo .xbindkeysrc no seu diretório pessoal. Agora você deseja substituir a parte (Scheme Function) pelo comando que deseja executar, por exemplo, perl /home/my_script.pl para executar seu script. Isso deve tornar sua tarefa de remapear as chaves muito mais fácil

    
por 05.03.2012 / 14:44