Questa domanda è già stata posta ma non è mai stata data una risposta adeguata. Dopo l'autorizzazione con @Seth ora lo sto chiedendo di nuovo. Questo mi permetterà di rispondere e, eventualmente, di modificare la domanda molto più facilmente. La domanda originale può essere trovata qui:
Mappa Ctrl e Alt per i pulsanti del pollice del mouse
Problema:
Sebbene sia molto semplice mappare qualsiasi sequenza di tasti a un pulsante del mouse usando xbindkeys
insieme xdotool
o xte
sembra molto più problematico mappare un tasto modificatore (ad esempio ALT , CTRL , SHIFT ecc.) Su di esso.
L'assolo finale dovrebbe consentire tra l'altro un CTRL + clic (ad es. Per selezionare più voci di un elenco) con il solo mouse.
Un paio di possibili approcci per risolvere questo problema possono essere trovati qui su Stack Exchange e in altri forum relativi a Linux. Ma nessuno di questi funziona come previsto poiché porta ad altri problemi ed effetti collaterali.
Appunti:
Alcuni degli esempi seguenti riguardano Guile con la sintassi dello Schema e si basano sul .xbindkeysrc.scm
file, mentre altri si basano sul .xbindkeysrc
file con la relativa sintassi. Sono consapevole che non funzioneranno insieme.
Inoltre, i seguenti frammenti si basano xdotool
solo su, ma sono aperto ad approcci che coinvolgono anche altre applicazioni come ad xte
esempio, anche se sembra che conducano entrambi agli stessi risultati e quindi sto usando solo xdotool
azioni qui.
Approccio A:
Aggiornamento del .xbindkeysrc
file con:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
Questo è quello che ho provato inizialmente, ma ha l'effetto collaterale che il modificatore viene trattenuto e non può essere rilasciato.
Approccio B:
Aggiornamento del .xbindkeysrc.scm
file 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")
Si trova su http://www.linuxforums.org/forum/hardware-peripherals/169773-solved-map-mouse-button-modifier-key.html e cerca di risolvere il problema in cui si tiene il modificatore (come descritto nell'approccio un).
Anche se risolve che funziona solo parzialmente in quanto non è possibile eseguire altri clic del mouse mentre si preme il pulsante del pollice.
Approccio C:
Aggiornamento del .xbindkeysrc
file con:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
Testato dall'OP della domanda collegata qui su askubuntu. Molto più semplice e più solido in quanto non coinvolge stati modificatori. Tuttavia, il problema persiste, ovvero un CTRL + non è possibile clic .
Sembra che questo xbindkeys
sia il problema in quanto riconosce il clic ma non lo esegue. Questo può essere testato usando xev | grep button
exbindkeys -v
:
Un normale clic del mouse registrato da xev
dovrebbe apparire come:
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
Oltre che per il pulsante pollice:
state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES
Ma quando la xbindkeys
configurazione sopra abilitata non registra nulla. Sebbene abbia senso per il pulsante pollice in quanto è mappato su CTRL e quindi non è più un pulsante del mouse, è strano che anche il pulsante 1 non sia registrato. Ciò è probabilmente dovuto al fatto che xbindkeys
non lo esegue ma lo riconosce di per sé:
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
Approccio D:
Aggiornamento del .xbindkeysrc
file con:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
"xdotool click 1"
b:1
Semplicemente troppo semplice ... ma porta a un ciclo infinito di clic.
AGGIORNARE:
Nel frattempo ho comprato un Logitech G502 e ho notato che una volta configurato tramite il driver su Windows non solo il profilo stesso è archiviato nella memoria del dispositivo, ma l'attuale pressione dei tasti viene eseguita dal mouse. Che in realtà ha risolto il mio problema su Linux!
L'unico altro topo che ricordo che fu in grado di fare fu il Razer Copperhead ai tempi. Ma immagino ci siano altri topi disponibili oggi che possono fare lo stesso.