Eu quero mapear keypresses para atalhos no Lubuntu, mas a saída de xev me confunde

3

Estou usando um Toshiba r835 com Lubuntu. Após uma instalação limpa, pressionar o botão liga / desliga enquanto a máquina estiver ligada não faz nada. Eu consertei o botão de energia seguindo este aviso :

Eu adicionei estas linhas em ~ / .config / openbox / lubuntu-rc.xml

<keybind key="XF86PowerOff">
<action name="Execute">
<command>lubuntu-logout</command>
</action>
</keybind>

Isso faz sentido para mim.

Eu quero mapear várias outras chaves para atalhos semelhantes. Por exemplo, quando pressiono Fn-F1, quero bloquear a tela. Eu imagino que gostaria de acrescentar algo como

<keybind key="XF86ScreenSaver">
<action name="Execute">
<command>xscreensaver-command -lock</command>
</action>
</keybind>

No entanto, quando pressiono Fn-F1, ele abre o menu Lubuntu, como se eu tivesse pressionado a tecla Super_L . Ele também digita a letra l se eu tiver um terminal aberto. Meu atalho desejado xscreensaver-command -lock parece ser ignorado. O que está acontecendo? Por que meu atalho não está funcionando?

Eu pensei que poderia descobrir isso com xev, mas a saída do xev me confunde:

FocusOut event, serial 41, synthetic NO, window 0x2000001,
mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 41, synthetic NO, window 0x2000001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 41, synthetic NO, window 0x0,
    keys:  0   0   0   0   0   64  0   0   0   0   0   0   0   0   0   0   
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

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

KeyPress event, serial 41, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525549, (289,-138), root:(341,155),
    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 0x2000001,
    root 0xae, subw 0x0, time 16525550, (289,-138), root:(341,155),
    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 0x2000001,
    root 0xae, subw 0x0, time 16525639, (289,-138), root:(341,155),
    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 0x2000001,
    root 0xae, subw 0x0, time 16525646, (289,-138), root:(341,155),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Parece que estou recebendo o keycode 160, que eu acho que é o XF86ScreenSaver, mas também é como se eu tivesse pressionado a tecla Super_L e a l . Eu acho que toda essa saída vem da tecla Fn-F1. Isso me confunde. Como posso fazer com que o Fn-F1 bloqueie a tela em vez de abrir o menu Lubuntu e digitar a letra 'l'?

    
por Andrew 28.02.2012 / 07:10

2 respostas

2

Você pode fazer isso com o aplicativo xbindkeys. Abra uma janela de terminal e digite o seguinte:

sudo apt-get install xbindkeys

Uma vez instalado, você quer criar dois arquivos no seu diretório pessoal chamado:

.xbindkeysrc

Este arquivo conterá suas configurações para suas combinações de teclas

.xbindkeys.noauto

Este será apenas um arquivo em branco, mas quando existir, impedirá que o Xserver inicie xbindkeys na inicialização. Apesar de querermos que ele seja iniciado na inicialização, queremos começar por meio de aplicativos de inicialização. A razão para isso é que o Xserver o inicia no início do processo de inicialização, o que às vezes faz com que nossas configurações sejam colocadas em nosso arquivo .xbindkeysrc para não funcionar.

Agora adicione as seguintes linhas ao seu arquivo .xbindkeysrc

"xscreensaver-command -lock"
c:160

Salve o arquivo

Agora crie um pequeno script para iniciar o xbindkeys que colocaremos em nossos aplicativos de inicialização:

Abra seu editor de texto favorito e copie e cole ou digite as seguintes linhas:

#!/bin/bash

sleep 10
/usr/bin/xbindkeys &

Salve em seu diretório home como xbstart.sh ou o que você quiser

Torne-o executável

chmod 755 xbstart.sh

Agora basta adicionar esse script aos seus aplicativos de inicialização e reinicializar.

O que acontece é que quando você faz login, xbindkeys é chamado e lê seu arquivo .xbindkeysrc e é executado em segundo plano. Ele monitora constantemente seus toques de tecla e quando keycode 160 é pressionado, ele o captura antes que o Xserver tenha a chance de fazer com que ele execute xscreensaver-command -lock ao invés de abrir o menu.

    
por Scott Stookey 28.02.2012 / 08:04
2

Eu adicionei isto

<keybind key="C-A-L">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

então quando eu faço Crt + Alt + L meu screebscaver inicia ... como @fossfreedom mostre-me

então eu suponho que você tem que fazer algo semelhante

<keybind key="C-F1">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

mas primeiro verifique se essa tecla já não está sendo usada.

... Sobre a opção fn que você queria: vou citar wikipedia .

  

Ao contrário de outras teclas modificadoras, como Ctrl, Shift e AltGr, o   microcontrolador dentro do teclado normalmente envia um diferente   keycode dependendo se a tecla Fn está pressionada. Isso permite que o   teclado para emular um teclado de tamanho normal, para que os mapas de teclado especializados   não precisa ser criado; o sistema operacional pode usar padrão   mapas de teclado projetados para um teclado de tamanho completo. Porque o funcionamento   sistema não tem noção da tecla Fn, a chave não pode ser remapeada em   software, ao contrário de todas as outras teclas padrão do teclado.

    
por maniat1k 28.02.2012 / 10:56