Ho lottato con questo durante il fine settimana e ho bisogno di rimappare i miei pulsanti del mouse.
Ho lottato con questo durante il fine settimana e ho bisogno di rimappare i miei pulsanti del mouse.
Risposte:
Ho un mouse Logitech con 9 pulsanti e la pressione del "pulsante centrale" (# 2) implica il clic della rotella di scorrimento. Non mi piace perché sono goffo e in genere finisco per scorrere la finestra in cui mi trovo quando provo a fare clic sulla rotellina. Quindi volevo rimappare automaticamente il pulsante laterale superiore (n. 9 in questo caso) sul pulsante centrale (n. 2). Volevo anche mappare il pulsante in basso (# 8) in modo che eseguisse un doppio clic sul pulsante sinistro (# 1).
Sebbene i miei obiettivi fossero specifici, le soluzioni seguenti possono essere generalizzate a qualsiasi situazione in cui si desidera rimappare automaticamente i pulsanti del mouse all'avvio.
Sarà necessario xinput
installato per questa attività. Questo può essere fatto interamente nel tuo .xsessionrc
file. Innanzitutto, utilizzare xinput
per scoprire il nome assegnato al mouse, che è quindi correlato a un ID dispositivo di input. Di seguito sono riportati alcuni esempi di output dal mio laptop:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
Il mio mouse si chiama Logitech USB Laser Mouse
e viene mostrato come id=11
. Il tuo mouse avrà un nome diverso; capire che è lasciato fuori come esercizio per il lettore.
Mentre conosci ancora l'ID del dispositivo in questa sessione, scopri quanti pulsanti pensa che il gestore di input abbia il tuo mouse, usando . Questo potrebbe essere diverso dal numero di pulsanti che appare sul dispositivo.xinput list
deviceID
Logitech USB Laser Mouse id=11 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 11. Type: XIButtonClass
Buttons supported: 16
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"
Con il mio mouse, ci sono solo 9 pulsanti fisici ovvi, ma xinput
riporta 16.
Data la natura dell'USB, questo ID può cambiare ogni volta che riavvii, quindi non è sufficiente eseguire lo script di qualcosa che è staticamente codificato su un ID che scopri una volta. Dovrai analizzarlo dinamicamente all'avvio ed eseguire la tua nuova mappa sulla base dell'ID corrente.
Ora che conosci il suo nome, puoi usare xinput test
per capire quale chiave rimappare. Premi i pulsanti del mouse che desideri mappare da e verso, per ottenere i loro indici. (Per riferimento, 1, 2 e 3 "sempre" (cioè, di solito) si riferiscono ai pulsanti sinistro, centrale e destro di un mouse a 3 pulsanti. Una comune re-map li inverte per rendere il mouse mancino. )
button press 2
button release 2
button press 9
button release 9
In questo caso ho scoperto che voglio mappare il pulsante # 9 (lato, in alto) al pulsante # 2 (al centro).
Ora che sai come si chiama il tuo mouse e quali pulsanti vuoi modificare, puoi scrivere uno ~/.xsessionrc
script che invoca xinput
per eseguire la mappatura dei pulsanti all'avvio. Di seguito è il mio script completo.
# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
La prima riga qui imposta una variabile di sessione temporanea uguale all'ID del mouse come riportato da xinput
. Questo viene fatto grep
ing dal nome noto del mouse nel report da xinput
, quindi usando sed
per estrarre il numero ID da quel id=xxx
token nel report. Questo valore viene quindi utilizzato in una xinput set-button-map
direttiva, che esegue la nuova mappatura. Nell'esempio sopra, l'unica modifica è che il pulsante n. 9 viene mappato nuovamente per simulare il pulsante n. 2. Tutti gli altri rimangono alle impostazioni predefinite.
Aggiornamento: come indicato da @Lokasenna di seguito , se il dispositivo si segnala sia come mouse che come tastiera, potrebbe essere necessario limitare il conteggio dei risultati grep
dell'utilizzo -m 1
.
Vedi anche questa risposta .
Avrete bisogno xinput
, xbindkeys
e xautomation
(compreso xte
) installato per questo compito.
Utilizzare xinput list
e xinput test
per scoprire l'ID del dispositivo del mouse e il numero del pulsante che si desidera assegnare. Nel mio caso, volevo mappare il pulsante laterale in basso (# 8) con un doppio clic sul pulsante sinistro (# 1).
Crea o modifica ~/.xbindkeysrc
. Il formato di questo file è una serie di linee accoppiate. La prima riga è un comando da eseguire per un evento; la seconda riga è la descrizione dell'evento. Utilizzeremo il xte
componente di xautomation
per inviare eventi direttamente al gestore di input.
Per creare un evento doppio clic quando viene rilasciato un pulsante, ho aggiunto quanto segue:
"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
Questa configurazione associa una sequenza di due clic del mouse sul pulsante n. 1 al rilascio del pulsante n. 8. (In teoria immagino che tu possa mappare qualsiasi comando a un pulsante del mouse, ma questo è il caso più comune. Vedi questa risposta per altri esempi pratici.)
Per gli utenti con più mouse collegati al sistema, è necessario passare anche l'ID del dispositivo. Questo potrebbe non essere applicabile a tutti gli utenti ed è stato scoperto su Ubuntu 16.04 con Unity.
xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Kensington Kensington Expert Mouse id=9 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
Quindi modificare il file .xbindkeysrc facendo riferimento al valore id = dall'output del comando (id = 9 in questo esempio):
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
awk
affermazione con la tua sed
affermazione nei miei esempi. Grazie per il miglioramento!
xinput set-button-map "Logitech Trackball" 1 3 3
xinput
mostra il mio mouse due volte, in questo modo: ↳ MOUSE OTTICO USB id = 12 [puntatore slave (2)] ↳ MOUSE OTTICO USB id = 13 [puntatore slave (2)] Solo l'ID 13 catturerà i comandi con xinput test
. Lo script rileverà sempre il primo ID. Ma perché è due volte comunque? Entrambi scompaiono quando disconnetto questo mouse e riappaiono quando sono connessi.
Brevi passaggi per questo sono:
C'è un'utilità chiamata xinput
. xinput list
o semplicemente xinput
mostrerà tutti i dispositivi di input X e i loro ID. Qui trovi l'ID del mouse che vuoi rimappare.
Userò il mio ID come esempio, dalla mia configurazione, che è 21, quindi xinput --get-button-map 21
verrà emesso
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Ora, se vuoi, per esempio, scambiare i pulsanti sinistro e destro, esegui semplicemente
xinput --set-button-map 21 3 2 1
Eccoci, la rimappatura è fatta.
Per eseguirlo all'avvio, basta inserirlo in un file:
echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh
dare il permesso eseguibile
chmod +x leftmouseremap.sh
Infine, aggiungilo manualmente all'applicazione Statrtup dalla GUI o, se lo desideri dalla CLI, inserisci il testo qui sotto (cambia i percorsi del tuo) in un file nel tuo ~/.config/autostart
, ecco il mio ( less .config/autostart/leftmouseremap.sh.desktop
):
[Desktop Entry]
Type=Application
Exec=/home/ruslan/leftmouseremap.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=/home/ruslan/leftmouseremap.sh
Name=/home/ruslan/leftmouseremap.sh
Comment[en_US]=
Comment=
Tieni presente che con KDE il percorso sarebbe simile ~/.kde/Autosart
, per altri desktop manager questo potrebbe essere visivamente diverso. In alternativa, l'avvio può essere eseguito con un approccio generale usando /etc/rc.local
.
Quando si utilizza la risposta ottimale di zerobandwidth , alcuni dispositivi, come MX Ergo di Logitech, vengono visualizzati sia come puntatore che come dispositivo tastiera :
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech MX Ergo id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
...
↳ Logitech MX Ergo id=15 [slave keyboard (3)]
Di conseguenza, grep "Logitech MX Ergo"
finisce per restituire due valori. Quest'ultimo finisce per essere incluso come primo elemento nella stringa di mappatura e rovina tutti i pulsanti del mouse.
La correzione è semplice: basta usare grep
l'argomento conteggio massimo -m 1
:
my_mouse_id=$(xinput | grep -m 1 "Logitech MX Ergo" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput --set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Sono stato in grado di cambiare la mappatura del pulsante centrale del mio mouse Logitech in 'Return' usando Easystroke Gesture Recognition che ho scaricato da Ubuntu Software Center. Modifica: Nell'applicazione, seleziona Aggiungi azione, Assegna un nome, seleziona il tipo di chiave, fai clic su Dettagli e premi Invio, premi Registra tratto e durante il prompt premi il pulsante centrale.
xinput
pulsanti che non vengono visualizzati durante l'uso xinput list <devID>
.
Prima del 12.04 c'era un semplice strumento grafico chiamato "btnx" nel repository standard, che veniva aggiunto come "Proprietà pulsante" in Configurazione di sistema. Purtroppo però è stato lasciato cadere. Un PPA "non attendibile" attualmente gestito per 14.04, 16.04 e 18.04 è qui: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (disponibile su https://launchpad.net/ubuntu/xenial/+source / btnx )
Non si integra con le impostazioni di sistema, ma funziona abbastanza bene sul mio laptop con un mouse a 5 pulsanti economico. Può rimappare anche a sequenze di tasti e comandi e la configurazione è molto più semplice che con qualsiasi altro metodo!
Ho HP elitebook 2570p, Ubuntu 18.04.2. Qui ho un trackpoint che è inutile per me e qui ci sono 2 pulsanti trackpoint inutili sotto lo spazio
Non uso questi tasti perché ce l'ho sotto il touchpad. Vorrei rimappare questi pulsanti su left = back_button (Alt_L + Left), quello destro = middle_mouse_button. Il trackpoint in "xinput" è id = 11 e il pulsante sinistro è il numero 1, la destra è 3.
Qualcuno potrebbe scrivermi il giusto codice per copiarlo sul terminale? Ho combinato con xbindkeysrc ma questo imposta qualsiasi azione su entrambi i pulsanti (trackpoint e touchpad)
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'