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 .Xmodmap
agora contém a seguinte linha
keycode 225 = XF86Paste NoSymbol XF86Paste``
A execução xmodmap ~/.Xmodmap
agora desativa o botão completamente (ou pelo menos, não recebo nenhum resultado pressionando-o). Eu tentei xmodmap -pke
e 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 = a
impressões a
sempre que clico no botão. Portanto, o problema parece estar relacionado à forma como o XF86Paste é realmente tratado. Estou enviando, mas não está colando.
xbindkeys
configurou para executar quando inicializar, certo? Você pode desativá-lo e tentar novamente?tail -f /var/log/dmesg
e tente pressionar o botão. Você obtém alguma saída referente a teclas / botões?xinput list
o código do botão da sua chave de pesquisaxinput test <MOUSE ID>
. Isto funciona?xev
mostrar 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).Respostas:
Para simular eventos de teclado, sugiro a ótima ferramenta xdotool .
1. Instale
xdotool
via terminal ( CTRL+ ALT+ T):ou use o Software Center .
2. Crie um script que use o xdotool para emular os eventos de pressionamento de tecla de CTRLe v. No terminal:
Copie o seguinte conteúdo na janela do editor que se abriu. Após copiar o código, salve-o e feche-o:
Agora torne o script executável:
3. Faça logout e efetue login para recarregar seu PATH .
4. Crie o atalho personalizado
Vá para
System Settings
, então vá paraKeyboard
, entãoShortcuts
.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
. PressioneOK
.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!
fonte
Solução xbindkeys com xdotool
Para esta solução, você precisará
xbindkeys
exdotool
Mate xbindkeys e despeje a configuração do botão
e
Adicione suas novas ligações
Agora você pode modificar esse arquivo para adicionar ligações personalizadas, estas têm o formato
então se você adicionar
você abrirá
gedit
toda 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.intercepte o 225 do seu mouse :
interceptar o código de chave 225 em geral :
substitua todos os
XF86Search
eventos (reverta as configurações do mouse para as configurações originais primeiro, para obter aXF86Search
volta):Inicie o xbindkeys e teste
Corre
e veja se funciona.
fonte