Ich hatte über das Wochenende damit zu kämpfen und musste meine Maustasten neu zuordnen.
Ich hatte über das Wochenende damit zu kämpfen und musste meine Maustasten neu zuordnen.
Antworten:
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.
Sie müssen xinput
für diese Aufgabe installiert sein. Dies kann vollständig in Ihrer .xsessionrc
Datei 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 Mouse
und 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 xinput
16 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 test
Nachdem 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 ~/.xsessionrc
Skript schreiben, das aufgerufen wird, xinput
um 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 grep
Sie im Bericht nach dem bekannten Namen der Maus suchen xinput
und dann sed
die ID-Nummer aus diesem id=xxx
Token im Bericht extrahieren . Dieser Wert wird dann in einer xinput set-button-map
Direktive 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 grep
Benutzungsergebnisse begrenzen, wenn sich Ihr Gerät sowohl als Maus als auch als Tastatur ausgibt -m 1
.
Siehe auch diese Antwort .
Für diese Aufgabe müssen xinput
, xbindkeys
und xautomation
(einschließlich xte
) installiert sein.
Verwenden Sie xinput list
und 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 xte
Komponente 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 .)
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
awk
Aussage durch Ihre sed
Aussage in meinen Beispielen ersetzt. Danke für die Verbesserung!
xinput set-button-map "Logitech Trackball" 1 3 3
xinput
zeigt 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.
Kurze Schritte hierfür sind:
Es gibt ein Dienstprogramm namens xinput
. xinput list
oder zeigt einfach xinput
alle 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 21
ausgeben
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/Autosart
Beachten 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
.
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 grep
Argument 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
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.
xinput
Schaltflächen verwendet werden sollen, die bei der Verwendung nicht angezeigt werden xinput list <devID>
.
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!
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)
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'