Wie kann ich die Tasten meiner Maus beim Start automatisch neu zuordnen?

30

Ich hatte über das Wochenende damit zu kämpfen und musste meine Maustasten neu zuordnen.

Nullbandbreite
quelle

Antworten:

47

Ich habe eine Logitech-Maus mit 9 Tasten, und das Drücken der "mittleren Taste" (Nr. 2) beinhaltet das Klicken auf das Scrollrad. Ich mag das nicht, weil ich ungeschickt bin und normalerweise das Fenster scrolle, in dem ich mich befinde, wenn ich versuche, auf das Rad zu klicken. Deshalb wollte ich die obere Seitentaste (in diesem Fall Nr. 9) automatisch der mittleren Taste (Nr. 2) zuordnen. Ich wollte auch die untere Seitentaste (Nr. 8) zuordnen, damit ein Doppelklick auf die linke Taste (Nr. 1) ausgeführt wird.

Obwohl meine Ziele spezifisch waren, können die folgenden Lösungen auf jede Situation verallgemeinert werden, in der Sie die Maustasten beim Start automatisch neu zuordnen möchten.

Zuordnen von Maustasten zu anderen Maustasten

Sie müssen xinputfür diese Aufgabe installiert sein. Dies kann vollständig in Ihrer .xsessionrcDatei erfolgen. Verwenden Sie zunächst xinput, um den Namen zu ermitteln, der Ihrer Maus zugewiesen wurde, und der dann mit einer Eingabegerät-ID korreliert wird. Unten finden Sie einige Beispiele für die Ausgabe von meinem 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)]

Meine Maus ruft sich selbst an Logitech USB Laser Mouseund wird als angezeigt id=11. Ihre Maus wird einen anderen Namen haben. Das herauszufinden, ist eine Übung für den Leser.

Während Sie die ID des Geräts in dieser Sitzung noch kennen , können Sie mithilfe von ermitteln, über wie viele Schaltflächen der Eingabehandler Ihrer Ansicht nach Ihre Maus verfügt . Dies kann sich von der Anzahl der Tasten unterscheiden, die auf dem Gerät angezeigt werden.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"

Mit meiner Maus gibt es nur 9 offensichtliche physische Tasten, aber es werden xinput16 gemeldet.

Angesichts der Art von USB kann sich diese ID bei jedem Neustart ändern. Daher reicht es nicht aus, ein Skript zu erstellen, das statisch mit einer ID verknüpft ist, die Sie einmal gefunden haben. Sie müssen dies beim Start dynamisch analysieren und Ihre Neuzuordnung basierend auf der aktuellen ID ausführen.

xinput testNachdem Sie den Namen kennen, können Sie herausfinden, welche Taste neu zugeordnet werden soll. Drücken Sie die Maustasten, die Sie von und nach abbilden möchten, um ihre Indizes zu erhalten. (Als Referenz beziehen sich 1, 2 und 3 "immer" (dh normalerweise) auf die linke, mittlere und rechte Taste einer 3-Tasten-Maus. Eine übliche Neuzuordnung kehrt diese um, um die Maus für Linkshänder zu machen.) )

button press   2
button release 2
button press   9
button release 9

In diesem Fall habe ich festgestellt, dass ich Taste 9 (Seite, oben) auf Taste 2 (Mitte) abbilden möchte.

Nachdem Sie nun wissen, wie Ihre Maus heißt und welche Schaltflächen Sie ändern möchten, können Sie ein ~/.xsessionrcSkript schreiben, das aufgerufen wird, xinputum die Neuzuordnung der Schaltflächen beim Start auszuführen. Unten ist mein komplettes Skript.

# 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

In der ersten Zeile wird eine temporäre Sitzungsvariable festgelegt, die der ID der Maus entspricht, die von gemeldet wird xinput. Dies geschieht, indem grepSie im Bericht nach dem bekannten Namen der Maus suchen xinputund dann seddie ID-Nummer aus diesem id=xxxToken im Bericht extrahieren . Dieser Wert wird dann in einer xinput set-button-mapDirektive verwendet, die die Neuzuordnung ausführt. Im obigen Beispiel besteht die einzige Änderung darin, dass Taste 9 erneut der Taste 2 zugeordnet wird. Alle anderen bleiben auf ihrer Standardeinstellung.

Update: Wie @Lokasenna unten ausführt , müssen Sie möglicherweise die Anzahl der grepBenutzungsergebnisse begrenzen, wenn sich Ihr Gerät sowohl als Maus als auch als Tastatur ausgibt -m 1.

Zuordnung von Maustasten zu beliebigen Funktionen

Siehe auch diese Antwort .

Für diese Aufgabe müssen xinput, xbindkeysund xautomation(einschließlich xte) installiert sein.

Verwenden Sie xinput listund xinput test, um die Geräte-ID Ihrer Maus und die Nummer der Taste zu ermitteln, die Sie zuweisen möchten. In meinem Fall wollte ich die untere Seitentaste (Nr. 8) einem Doppelklick auf die linke Taste (Nr. 1) zuordnen.

Erstellen oder bearbeiten ~/.xbindkeysrc. Das Format dieser Datei ist eine Reihe von paarweisen Zeilen. Die erste Zeile ist ein Befehl, der für ein Ereignis ausgeführt werden soll. Die zweite Zeile ist die Ereignisbeschreibung. Wir werden die xteKomponente von verwenden xautomation, um Ereignisse direkt an den Eingabehandler zu senden.

Um ein Doppelklick-Ereignis zu erstellen, wenn eine Schaltfläche losgelassen wird, habe ich Folgendes hinzugefügt:

"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release

Diese Konfiguration ordnet eine Sequenz von zwei Mausklicks auf Taste 1 der Freigabe von Taste 8 zu. (Theoretisch könnte man jeden Befehl einer Maustaste zuordnen, aber dies ist der häufigste Fall. Weitere praktische Beispiele finden Sie in dieser Antwort .)

Update für 16.04 Ubuntu

Für Benutzer mit mehreren Mäusen, die an Ihr System angeschlossen sind, müssen Sie auch die ID des Geräts übergeben. Dies gilt möglicherweise nicht für alle Benutzer und wurde unter Ubuntu 16.04 mit Unity entdeckt.

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)]

Ändern Sie dann die Datei .xbindkeysrc, indem Sie den Wert id = aus der Befehlsausgabe referenzieren (id = 9 in diesem Beispiel):

"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
Nullbandbreite
quelle
7
Danke für die Information. Ihr awk muss anscheinend entsprechend der Anzahl der Wörter im Gerät geändert werden. Ich benutztesed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'
jbo5112
Laut xinput test löst die Daumentaste drei verschiedene Tastendrücke aus - wie werden sie alle in .xbindkeysrc zusammengefügt?
Axltop
@ jbo5112 Ich habe gerade angefangen, mehrere Mäuse auf meinem Arbeits-Laptop zu verwenden, und hatte guten Grund, Ihren Kommentar noch einmal zu lesen. Ich habe jetzt meine alte awkAussage durch Ihre sedAussage in meinen Beispielen ersetzt. Danke für die Verbesserung!
zerobandwidth
2
In der Set-Button-Map muss keine ID verwendet werden. zB:xinput set-button-map "Logitech Trackball" 1 3 3
jaustin
Ungewöhnliches Problem, denke ich, xinputzeigt meine Maus zweimal wie folgt: ↳ USB OPTICAL MOUSE ID = 12 [Slave-Zeiger (2)] ↳ USB OPTICAL MOUSE ID = 13 [Slave-Zeiger (2)] Nur ID 13 fängt Befehle mit ab xinput test. Das Skript fängt immer die erste ID ab. Aber warum ist es überhaupt zweimal? Beide verschwinden, wenn ich diese Maus abtrenne und erscheinen wieder, wenn ich verbunden bin.
W-Sky
6

Kurze Schritte hierfür sind:

Es gibt ein Dienstprogramm namens xinput. xinput listoder zeigt einfach xinputalle X Eingabegeräte und ihre IDs an. Hier finden Sie die ID der Maus, die Sie neu zuordnen möchten.

Ich werde meine ID als Beispiel aus meinem Setup verwenden, das 21 ist, und dann xinput --get-button-map 21ausgeben

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Wenn Sie beispielsweise die linke und die rechte Taste tauschen möchten, führen Sie einfach den Befehl aus

xinput --set-button-map 21 3 2 1

Hier sind wir, Remapping ist fertig.

Um es beim Start auszuführen, schreiben Sie es einfach in eine Datei:

echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh

Gib ihm die ausführbare Erlaubnis

chmod +x leftmouseremap.sh 

Schließlich fügen Sie diese Statrtup Anwendung manuell von GUI oder, wenn Sie es von CLI wollen, setzen Sie Text (ändern Pfade zu verkaufen) Inti eine Datei in Ihrem ~/.config/autostart, hier ist mein ( 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=

~/.kde/AutosartBeachten Sie, dass bei KDE der Pfad für andere Desktop-Manager möglicherweise ein anderer ist. Alternativ kann der Startvorgang unter Verwendung der allgemeinen Vorgehensweise ausgeführt werden /etc/rc.local.

Ruslan Gerasimov
quelle
Dies löste mein Problem mit verschüttetem Wasser. Ich habe Links- / Rechtsklick-Schaltflächen unter dem Touchpad meines Laptops. Ich habe Wasser verschüttet und jetzt senden beide Tasten ein Mittelklick-Signal an das Betriebssystem (das habe ich mit der 'keymon'-App entdeckt). Ich habe Ihre Methode verwendet, um das Klicken mit der mittleren Maustaste dem Klicken mit der linken Maustaste zuzuordnen, damit ich zumindest ein Klicken mit der linken Maustaste genießen kann. Ich benutze nie Middle-Click, also funktioniert das perfekt für mich :) Danke für die einfache Anleitung. Meine Eingabegerät-ID war 11, also habe ich "xinput --set-button-map 11 1 1 3" ausgeführt. Danke !!
Vahid Pazirandeh,
3

Wenn Sie die großartige Antwort von zerobandwidth verwenden , werden einige Geräte, wie z. B. der MX Ergo von Logitech, als Zeiger- und Tastaturgerät angezeigt:

⎡ 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)]

Folglich werden grep "Logitech MX Ergo"am Ende zwei Werte zurückgegeben. Letztere werden als erstes Element in die Zuordnungszeichenfolge aufgenommen und versauen alle Maustasten.

Die Lösung ist einfach - verwenden Sie einfach das grepArgument für die maximale Anzahl -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
Lokasenna
quelle
Toller Tipp; Ich habe die Antwort bearbeitet, um sie einzuschließen. Vielen Dank!
Zerobandwidth
1

Ich konnte die Zuordnung der mittleren Taste meiner Logitech-Maus zu "Zurück" mithilfe der Easystroke-Gestenerkennung ändern, die ich aus dem Ubuntu Software Center heruntergeladen habe. Bearbeiten: In der Anwendung wählen Sie "Aktion hinzufügen", "Benennen", wählen den Schlüsseltyp aus, klicken auf "Details" und drücken die Eingabetaste, drücken auf "Strich aufzeichnen" und drücken während der Eingabeaufforderung auf die mittlere Schaltfläche.

atr15
quelle
1
Willkommen bei AskUbuntu. Sie müssen Ihre Antwort genauer angeben.
David
Ok, bitte siehe oben bearbeiten.
15.
Guter Fang. Aber was Sie beschrieben haben, funktioniert nicht so, wie Sie es angewiesen haben: Tatsächlich ist die mittlere Taste die Standardtaste, um diese App in den Gestenerkennungsmodus zu versetzen. +1, da diese App ein Modul zum Anzeigen von Maustasten-IDs enthält. Dies ist hilfreich, wenn xinputSchaltflächen verwendet werden sollen, die bei der Verwendung nicht angezeigt werden xinput list <devID>.
1111161171159459134
1
Oh, das kam 1 Jahr später - Ihre Antwort ist +1
wert
1

Vor 12.04 gab es im Standard-Repository ein einfaches grafisches Tool namens "btnx", das in der Systemkonfiguration als "Button-Eigenschaften" hinzugefügt wurde. Leider wurde es jedoch fallen gelassen. Eine "nicht vertrauenswürdige" PPA, die derzeit für 14.04, 16.04 und 18.04 gepflegt wird, finden Sie hier: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (gefunden unter https://launchpad.net/ubuntu/xenial/+source) / btnx )

Es lässt sich nicht in die Systemeinstellungen integrieren, funktioniert aber auf meinem Laptop mit einer billigen 5-Tasten-Maus ganz gut. Es kann auch Tastatureingaben und Befehlen zugeordnet werden und die Konfiguration ist viel einfacher als mit jeder anderen Methode!

w-Himmel
quelle
Ich frage mich, ob das Tool die gleichen Änderungen vornimmt, nur im Hintergrund. ^ _ ^
zerobandwidth 10.10.18
0

Ich habe HP EliteBook 2570p, Ubuntu 18.04.2. Hier habe ich einen Trackpoint, der für mich unbrauchbar ist und hier sind 2 unbrauchbare Trackpoint-Buttons unter dem Space

Ich benutze diese Tasten nicht, weil ich sie unter dem Touchpad habe. Ich möchte diese Schaltfläche auf left = back_button (Alt_L + Left), the right = middle_mouse_button neu zuordnen. Der Trackpoint in "xinput" ist id = 11 und der linke Button ist Nummer 1, der rechte ist 3.

Könnte mir jemand den richtigen Code schreiben, um ihn einfach auf das Terminal zu kopieren? Ich habe mit xbindkeysrc kombiniert, aber das setzt jede Aktion auf beide Tasten (Trackpoint und Touchpad)

Atom
quelle
Ich habe dies getan und es einfach gemacht: <code> echo xinput set-button-map 11 8 1 2 >> ~ / .xsessionrc </ code> Es macht meine Touchpoint-Buttons (id 11) zum linken als 8. Button, Klicken Sie mit der linken Maustaste in die Mitte (Nr. 1) und mit der rechten Maustaste in die Mitte und geben Sie dann "echo -e" \ "/ usr / bin / xte" ein. "\ nb: 8" >> ~ / .xbindkeysrc 'code' Setzt Knopf Nr. 8 (b: 8) auf Alt_L + Links => zurück :) Jetzt habe ich 2 nützliche Maustasten
Atom