Esta pregunta ya se ha formulado, pero nunca se respondió correctamente. Después de la autorización con @Seth, ahora lo vuelvo a preguntar. Esto me permitirá responder y posiblemente modificar la pregunta mucho más fácilmente. La pregunta original se puede encontrar aquí:
Asigne Ctrl y Alt a los botones del mouse
Problema:
Aunque es muy simple asignar cualquier pulsación de tecla a un botón del mouse usando xbindkeys
en conjunto xdotool
o xte
parece mucho más problemático asignarle una tecla modificadora (por ejemplo , ALT , CTRL , SHIFT , etc.).
La solución final debe permitir, entre otras cosas, un CTRL + clic (por ejemplo, para seleccionar múltiples entradas de una lista) con solo el mouse.
Puede encontrar un par de enfoques posibles para resolver esto aquí en Stack Exchange, así como en otros foros relacionados con Linux. Pero ninguno de ellos funciona como se esperaba, ya que conducen a otros problemas y efectos secundarios.
Notas:
Algunos de los ejemplos a continuación involucran la sintaxis de Guile con Scheme y dependen del .xbindkeysrc.scm
archivo, mientras que otros dependen del .xbindkeysrc
archivo con su sintaxis respectiva. Soy consciente de que no trabajarán juntos.
Además, los fragmentos a continuación se basan xdotool
únicamente, pero estoy abierto a enfoques que involucren otras aplicaciones como, por ejemplo xte
, también, aunque parece que ambos conducen a los mismos resultados y, por lo tanto, estoy usando solo xdotool
acciones aquí.
Enfoque A:
Actualizando el .xbindkeysrc
archivo con:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
Eso es lo que intenté inicialmente, pero tiene el efecto secundario de que el modificador se está reteniendo y no se puede liberar.
Enfoque B:
Actualizando el .xbindkeysrc.scm
archivo con:
(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 en http://www.linuxforums.org/forum/hardware-peripherals/169773-solved-map-mouse-button-modifier-key.html e intenta abordar el problema donde se mantiene el modificador (como se describe en el enfoque un).
Aunque corrige que solo funciona parcialmente, ya que no es posible realizar otros clics del mouse mientras se presiona el botón del pulgar.
Enfoque C:
Actualizando el .xbindkeysrc
archivo con:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
Probado por OP de la pregunta vinculada aquí en askubuntu. Mucho más simple y más sólido ya que no involucra estados modificadores. Sin embargo, el problema persiste, es decir, no se puede hacer clic CTRL + .
Parece que xbindkeys
el problema es en sí mismo ya que reconoce el clic pero no lo ejecuta. Esto se puede probar usando xev | grep button
y xbindkeys -v
:
Un clic normal del mouse según lo registrado xev
debería verse así:
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
Además del botón del pulgar:
state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES
Pero cuando tiene xbindkeys
habilitada la configuración anterior , no registra nada. Aunque tiene sentido para el botón del pulgar, ya que está asignado a CTRL y, por lo tanto, ya no es un botón del mouse, es extraño que el botón 1 no esté grabado también. Esto es probable porque xbindkeys
no lo ejecuta pero sí lo reconoce:
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
Enfoque D:
Actualizando el .xbindkeysrc
archivo con:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
"xdotool click 1"
b:1
Simplemente demasiado simple ... pero conduce a un bucle infinito de clics.
ACTUALIZAR:
Mientras tanto, compré un Logitech G502 y noté que una vez configurado a través del controlador en Windows, no solo el perfil en sí se almacena en la memoria del dispositivo, sino que la pulsación de tecla real se realiza con el mouse. ¡De hecho, eso resolvió mi problema en Linux!
El único otro mouse que recuerdo que pudo hacer eso fue el Razer Copperhead en aquellos días. Pero supongo que hay otros ratones disponibles hoy que pueden hacer lo mismo.