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

10

Eu tenho um logitech MX400 sem fio. 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 o xev para encontrar o código de pressionamento do botão, mas isso não funciona no botão de pesquisa. usando xev e clicando no botão de pesquisa, 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

Não há eventos do ButtonPress. Parece que o botão de pesquisa é 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 uma caixa de diálogo de pesquisa, mas não há vestígios de um evento de clique no xev.

Editar

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

keycode 225 = XF86Paste NoSymbol XF86Paste``

A execução xmodmap ~/.Xmodmapagora desativa o botão completamente (ou pelo menos, não recebo nenhum resultado pressionando-o). Eu tentei xmodmap -pkee ele imprime:

keycode 225 = XF86Paste NoSymbol XF86Paste NoSymbol XF86Paste

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

Editar 2

Eu tentei rodar o xinput (nunca ouvi falar desse comando. Coisas incríveis). Existem duas entradas para a Logitech. Aqui está o resultado 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 atua como um teclado nesse sentido, mas, por alguma razão, o xmodmap não faz nada quando recebe a tecla 225.

** Editar **

Posso confirmar que adicionar keycode 225 = aimpressões asempre que clico no botão. Portanto, o problema parece estar relacionado à forma como o XF86Paste é realmente tratado. Estou enviando, mas não está colando.

Stefano Borini
fonte
Você xbindkeysconfigurou para executar quando inicializar, certo? Você pode desativá-lo e tentar novamente?
quer
@ iSeth: matou xbindkeys. Tentei novamente, mesmo resultado.
Stefano Borini 15/01
Abra um terminal e execute tail -f /var/log/dmesge tente pressionar o botão. Você obtém alguma saída referente a teclas / botões?
Seth
1
Antes de postar outra resposta sem sentido ... descubra o ID de entrada do mouse com xinput listo código do botão da sua chave de pesquisa xinput test <MOUSE ID>. Isto funciona?
Mrcktz
1
Parece haver um bug confirmado que permite xevmostrar os eventos XF86Paste / XF86Copy, mas nada acontece. Isso significa que você precisa usar a combinação de teclas CTRL + v para colar. O Xmodmap mapeia os botões 1: 1, mas você pode usar as configurações de atalhos do teclado para acionar a execução de um comando ao pressionar a tecla (veja minha resposta).
mrcktz

Respostas:

3

Para simular eventos de teclado, sugiro a ótima ferramenta xdotoolInstale o xdotool .

1. Instalexdotool via terminal ( CTRL+ ALT+ T):

sudo apt-get install xdotool

ou use o Software CenterInstale o xdotool .

2. Crie um script que use o xdotool para emular os eventos de pressionamento de tecla de CTRLe v. No terminal:

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

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

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

Agora torne o script executável:

chmod +x ~/bin/fakepaste

3. Faça logout e efetue login para recarregar seu PATH .

4. Crie o atalho personalizado

Vá para System Settings, então vá para Keyboard, então 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 preenchimento de comando em: fakepaste. Pressione OK.

Ao lado do seu novo atalho, você verá disabled. Clique no texto e pressione a tecla que deseja atribuir à emulação do teclado.

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

mrcktz
fonte
1
Não vejo como isso vai ajudar no botão do mouse, ele muda os atalhos do teclado .
Seth
2
@ iSeth: O ponto é que o mouse da Logitech é um teclado e um mouse. É um mouse para tudo , exceto para o botão de pesquisa, onde ele atua como um teclado
Stefano Borini
2

Solução xbindkeys com xdotool

Para esta solução, você precisará xbindkeysexdotool

Mate xbindkeys e despeje a configuração do botão

killall xbindkeys

e

xbindkeys --defaults >> ~/.xbindkeysrc

Adicione suas novas ligações

Agora você pode modificar esse arquivo para adicionar ligações personalizadas, estas têm o formato

"<command>"
  <key combination>

então se você adicionar

"gedit"
  m:0x0 +b:4

você abrirá gedittoda vez que rolar para cima.

Portanto, agora você pode tentar um dos seguintes, escolha o que melhor funciona para você. Em todo o caso xdotool click 2, será emulado, esta é a pressão do botão do meio do mouse e colará os terminais interno e externo.

  1. intercepte o 225 do seu mouse :

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

    "xdotool click 2"
      c:225
    
  3. substitua todos os XF86Searcheventos (reverta as configurações do mouse para as configurações originais primeiro, para obter a XF86Searchvolta):

    "xdotool click 2"
      XF86Search
    

Inicie o xbindkeys e teste

Corre

xbindkeys

e veja se funciona.

Gerhard Burger
fonte
Quero que você saiba que acho que vocês dois merecem a recompensa, pois me ajudaram bastante. Ainda não sei se suas soluções funcionam, vou testá-las amanhã, mas a recompensa está expirando e não quero que seja desperdiçada. Assim que tiver pontos suficientes, concederei a você a mesma recompensa. Graças
Stefano Borini
Oke, obrigado (embora eu não saiba se isso é possível). Fico feliz em ajudar;)
Gerhard Burger
uhm ... você está certo. Só posso premiar um aqui. Não se preocupe, assim que eu tiver representante suficiente, concederei uma de suas outras respostas.
Stefano Borini
Não, não, não se preocupe. Estou muito bem;)
Gerhard Burger