Como faço para remapear o botão de pesquisa no meu Logitech MX400?

9

Eu tenho um sem fio logitech MX400. Ele tem um botão de pesquisa que eu gostaria de usar para colar (em vez da roda de rolagem extremamente sensível, mas difícil de pressionar). Eu já remapeei outros botões com xbindkeys, e usei xev para encontrar o código de pressionamento de botão, mas isso não funciona para o botão de pesquisa. usando xev e clicando no botão de pesquisa eu recebo os seguintes eventos

FocusOut event, serial 34, synthetic NO, window 0x3c00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 34, synthetic NO, window 0x3c00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 34, synthetic NO, window 0x0,
    keys:  4294967275 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   0   0   0   0   

PropertyNotify event, serial 34, synthetic NO, window 0x3c00001,
    atom 0x1d7 (_NET_WM_ICON_GEOMETRY), time 23653064, state PropertyNewValue

Nenhum evento ButtonPress. Parece que o botão de busca é interceptado em um nível abaixo dos eventos X. Alguma ideia? Eu tenho o Ubuntu 12.04. O Ubuntu realmente vê o clique e gera um diálogo de pesquisa, mas não há nenhum rastro de um evento de clique no xev.

Editar

Eu verifiquei o método fornecido com o xmodmap. Meu .Xmodmap agora contém a seguinte linha

keycode 225 = XF86Paste NoSymbol XF86Paste''

executando xmodmap ~/.Xmodmap agora desativa o botão (ou pelo menos, eu não obtenho nenhum resultado pressionando-o). Eu tentei xmodmap -pke e imprime:

keycode 225 = XF86Paste NoSymbol XF86Paste NoSymbol XF86Paste

Estranho o suficiente. Todas as outras entradas são formatadas de maneira semelhante. Estou perto da solução, mas ainda há algo estranho.

Editar 2

Eu tentei executar o xinput (nunca ouvi falar desse comando. coisas incríveis). Existem duas entradas para a Logitech. Aqui está a saída da listagem de cada um deles (id 9 e 10)

Logitech USB Receiver                       id=9    [slave  pointer  (2)]
    Reporting 7 classes:
        Class originated from: 9. Type: XIButtonClass
        Buttons supported: 24
        Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
        Button state:
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 0:
          Label: Rel X
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 1:
          Label: Rel Y
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 2:
          Label: Rel Horiz Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIValuatorClass
        Detail for Valuator 3:
          Label: Rel Vert Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 9. Type: XIScrollClass
        Scroll info for Valuator 2
          type: 2 (horizontal)
          increment: 1.000000
          flags: 0x0
        Class originated from: 9. Type: XIScrollClass
        Scroll info for Valuator 3
          type: 1 (vertical)
          increment: -1.000000
          flags: 0x2 ( preferred )


Logitech USB Receiver                       id=10   [slave  pointer  (2)]
    Reporting 6 classes:
        Class originated from: 10. Type: XIButtonClass
        Buttons supported: 7
        Button labels: "Button 0" "Button Unknown" "Button Unknown" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right"
        Button state:
        Class originated from: 10. Type: XIKeyClass
        Keycodes supported: 248
        Class originated from: 10. Type: XIValuatorClass
        Detail for Valuator 0:
          Label: Rel X
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 10. Type: XIValuatorClass
        Detail for Valuator 1:
          Label: Rel Y
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 10. Type: XIValuatorClass
        Detail for Valuator 2:
          Label: Rel Horiz Wheel
          Range: -1.000000 - -1.000000
          Resolution: 1 units/m
          Mode: relative
        Class originated from: 10. Type: XIScrollClass
        Scroll info for Valuator 2
          type: 2 (horizontal)
          increment: 1.000000
          flags: 0x0

O dispositivo de teste 9 não faz nada com o botão. Em vez disso, o dispositivo de teste 10 funciona e esta é a saída quando clico

$ xinput test 10
key press   225 
key release 225 
key press   225 
key release 225 
key press   225 
key release 225

Portanto, parece que o mouse funciona como um teclado nesse sentido, mas por algum motivo, o xmodmap não faz nada quando recebe a chave 225.

** Editar **

Posso confirmar que adicionar keycode 225 = a imprime a sempre que clico no botão. Portanto, o problema parece estar relacionado a como o XF86Paste é realmente manipulado. Estou enviando, mas não está colando.

    
por Stefano Borini 07.01.2013 / 11:34

2 respostas

3

Para simular eventos de teclado, sugiro a você a ótima ferramenta xdotool .

1. Instale xdotool via terminal ( CTRL + ALT + T ):

sudo apt-get install xdotool

ou use o Centro de Software .

2. Crie um script que use xdotool para emular os eventos de desativação da tecla CTRL e v . No terminal:

mkdir -p ~/bin  
gedit ~/bin/fakepaste

Copie o seguinte conteúdo na janela do editor que se abriu. Depois de copiar o código, salve e feche:

#!/bin/sh
exec /usr/bin/xdotool key CTRL+V  
EOF

Agora torne o script executável:

chmod +x ~/bin/fakepaste

3. Efetue logout e faça login para recarregar suas PATH .

4. Crie o atalho personalizado

Vá para System Settings e, em seguida, vá para Keyboard e, em seguida, Shortcuts .

Pressione o botão + na parte inferior da caixa de diálogo. Forneça um nome para o atalho que você está prestes a criar e para o comando preencha: fakepaste . Pressione OK .

Próximo ao novo atalho, você verá disabled . Clique nesse texto e depois pressione a tecla que você deseja atribuir à sua emulação de teclado.

Agora você deve poder usar sua chave de pesquisa para colar!

    
por mrcktz 16.01.2013 / 22:19
2
Solução de xbindkeys

com xdotool

Para esta solução, você precisará de xbindkeys e xdotool

Mate xbindkeys e faça o download da configuração do botão

killall xbindkeys

e

xbindkeys --defaults >> ~/.xbindkeysrc

Adicione suas novas ligações

Agora você pode modificar este arquivo para adicionar ligações personalizadas. Elas têm o formato

"<command>"
  <key combination>

então, se você adicionar

"gedit"
  m:0x0 +b:4

você abrirá gedit toda vez que você rolar para cima.

Agora, você pode tentar um dos seguintes, escolher o que funciona melhor para você. Em todos os casos xdotool click 2 será emulado, este é o botão do meio do mouse, e isso irá colar os terminais internos e externos.

  1. intercepte o 225 do seu mouse :

    "xdotool click 2"
      m:0x0 +b:225
    
  2. intercepta o código-chave 225 em geral :

    "xdotool click 2"
      c:225
    
  3. substitua todos os XF86Search events (reverta as configurações do seu mouse para as configurações originais primeiro, para obter o XF86Search de volta):

    "xdotool click 2"
      XF86Search
    

Iniciar xbindkeys e testar

Executar

xbindkeys

e veja se funciona.

    
por Gerhard Burger 17.01.2013 / 13:17