Esta pergunta já foi feita, mas nunca foi respondida corretamente. Após a liberação com @Seth, agora estou perguntando novamente. Isso me permitirá responder e possivelmente modificar a pergunta muito mais facilmente. A pergunta original pode ser encontrada aqui:
Mapeie Ctrl e Alt para os botões do polegar do mouse
Questão:
Embora seja muito simples mapear qualquer pressionamento de tecla para um botão do mouse usando xbindkeys
em conjunto com xdotool
ou xte
pareça muito mais problemático mapear uma tecla modificadora (por exemplo , ALT , CTRL , SHIFT etc.) para ela.
A solução final deve permitir um clique CTRL + (por exemplo, para selecionar várias entradas de uma lista) com apenas o mouse.
Algumas abordagens possíveis para resolver isso podem ser encontradas aqui no Stack Exchange e em outros fóruns relacionados ao Linux. Mas nenhum deles funciona como esperado, pois leva a outros problemas e efeitos colaterais.
Notas:
Alguns dos exemplos abaixo envolvem a sintaxe do Guile com Scheme e dependem do .xbindkeysrc.scm
arquivo, enquanto outros dependem do.xbindkeysrc
arquivo com sua respectiva sintaxe. Estou ciente de que eles não vão trabalhar juntos.
Além disso, os trechos abaixo dependem xdotool
apenas, mas estou aberto a abordagens que envolvam outros aplicativos como, por exemplo xte
, também - embora pareça levar aos mesmos resultados e, portanto, estou usando apenas xdotool
ações aqui.
Abordagem A:
Atualizando o .xbindkeysrc
arquivo com:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
Foi o que eu tentei inicialmente, mas tem o efeito colateral de que o modificador está sendo mantido e não pode ser liberado.
Abordagem B:
Atualizando o .xbindkeysrc.scm
arquivo com:
(xbindkey '("b:8") "xdotool keydown ctrl")
(xbindkey '(release "b:8") "xdotool keyup ctrl")
(xbindkey '("m:0x14" "b:8") "xdotool keydown ctrl")
(xbindkey '(release "m:0x14" "b:8") "xdotool keyup ctrl")
Encontrado em http://www.linuxforums.org/forum/hardware-peripherals/169773-solved-map-mouse-button-modifier-key.html e tenta resolver o problema em que o modificador está sendo mantido (conforme descrito na abordagem uma).
Embora conserte que ele funciona apenas parcialmente, pois não é possível executar outros cliques do mouse enquanto o botão do polegar é pressionado.
Abordagem C:
Atualizando o .xbindkeysrc
arquivo com:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
Tentei pelo OP da questão vinculada aqui no askubuntu. Muito mais simples e mais sólido, pois não envolve estados modificadores. No entanto, o problema permanece, ou seja, um clique CTRL + não é possível.
Parece que esse xbindkeys
é o problema aqui, pois reconhece o clique, mas não o executa. Isso pode ser testado usando xev | grep button
e xbindkeys -v
:
Um clique normal do mouse, conforme registrado por, xev
deve se parecer com:
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
Bem como para o botão do polegar:
state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES
Mas ao xbindkeys
ativar a configuração acima, ela não registra nada. Embora faça sentido para o botão do polegar, pois ele é mapeado para CTRL e, portanto, não é mais um botão do mouse, é estranho que o botão 1 também não seja gravado. Provavelmente, porque xbindkeys
não o executa, mas ele próprio o reconhece:
Button press !
e.xbutton.button=8
e.xbutton.state=16
"xdotool keydown ctrl"
m:0x0 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Button press !
e.xbutton.button=1
e.xbutton.state=20
Button release !
e.xbutton.button=1
e.xbutton.state=276
Button release !
e.xbutton.button=8
e.xbutton.state=20
"xdotool keyup ctrl"
Release + m:0x4 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Abordagem D:
Atualizando o .xbindkeysrc
arquivo com:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
"xdotool click 1"
b:1
Simples demais ... mas leva a um loop infinito de cliques.
ATUALIZAR:
Enquanto isso, comprei um Logitech G502 e notei que, uma vez configurado através do driver no Windows, não apenas o perfil em si é armazenado na memória do dispositivo, mas o pressionamento de tecla real é feito pelo mouse. Isso de fato resolveu meu problema no Linux!
O único outro mouse que me lembro que foi capaz de fazer isso foi o Razer Copperhead na época. Mas acho que existem outros ratos disponíveis hoje que podem fazer o mesmo.