Diese Frage wurde bereits gestellt, aber nie richtig beantwortet. Nach Freigabe mit @Seth frage ich es jetzt nochmal. Dadurch kann ich die Frage viel einfacher beantworten und möglicherweise ändern. Die ursprüngliche Frage finden Sie hier:
Ordnen Sie Strg und Alt den Daumenschaltflächen der Maus zu
Problem:
Das Zuordnen von Tastenanschlägen zu einer Maustaste xbindkeys
in Verbindung mit ist sehr einfach, xdotool
oder xte
es scheint sehr viel problematischer, eine Änderungstaste (z. B. ALT , STRG , UMSCHALTTASTE usw.) zuzuordnen .
Die endgültige soloution sollte ua ein erlauben STRG + Klick (zB für mehrere Einträge aus einer Liste auswählen) nur mit der Maus.
Einige mögliche Lösungsansätze finden Sie hier bei Stack Exchange sowie in anderen Linux-Foren. Aber keine davon funktioniert wie erwartet, da sie zu anderen Problemen und Nebenwirkungen führt.
Anmerkungen:
Einige der folgenden Beispiele beziehen Guile mit der Schemasyntax ein und stützen sich auf die .xbindkeysrc.scm
Datei, während andere auf die .xbindkeysrc
Datei mit der entsprechenden Syntax angewiesen sind . Mir ist bewusst, dass sie nicht zusammenarbeiten werden.
Des Weiteren die folgenden Schnipsel stützen sich auf xdotool
nur , aber ich bin offen für Ansätze , die die anderen Anwendungen wie zB xte
auch - obwohl sie beide führen zu den gleichen Ergebnissen scheint und deshalb verwende ich nur xdotool
Aktionen hier.
Ansatz A:
Aktualisieren der .xbindkeysrc
Datei mit:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
Das habe ich anfangs versucht, aber es hat den Nebeneffekt, dass der Modifikator gehalten wird und nicht freigegeben werden kann.
Ansatz B:
Aktualisieren der .xbindkeysrc.scm
Datei mit:
(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")
Gefunden bei http://www.linuxforums.org/forum/hardware-peripherals/169773-solved-map-mouse-button-modifier-key.html und versucht, das Problem zu beheben, bei dem der Modifier festgehalten wird (wie bei approach beschrieben) ein).
Es wird jedoch behoben, dass es nur teilweise funktioniert, da keine weiteren Mausklicks ausgeführt werden können, während die Daumentaste gedrückt wird.
Ansatz C:
Aktualisieren der .xbindkeysrc
Datei mit:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
Versucht von OP der verknüpften Frage hier bei Askubuntu. Viel einfacher und solider, da es keine Modifikatorzustände enthält. Trotzdem bleibt das Problem bestehen, dh ein STRG + Klick ist nicht möglich.
Es scheint, dass dies xbindkeys
das Problem ist, da es den Klick erkennt, ihn aber nicht ausführt. Dies kann mit xev | grep button
und getestet werden xbindkeys -v
:
Ein normaler Mausklick xev
sollte wie folgt aussehen:
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
Sowie für die Daumentaste:
state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES
Wenn die obige xbindkeys
Konfiguration aktiviert ist, wird jedoch nichts aufgezeichnet. Obwohl die Daumentaste sinnvoll ist, da sie STRG zugeordnet ist und daher keine Maustaste mehr ist, ist es merkwürdig, dass die Taste 1 nicht mit aufgezeichnet wird. Dies liegt wahrscheinlich daran, dass xbindkeys
es nicht ausgeführt wird, sondern von selbst erkannt wird:
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
Ansatz D:
Aktualisieren der .xbindkeysrc
Datei mit:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
"xdotool click 1"
b:1
Einfach zu einfach ... führt aber zu einer Endlosschleife von Klicks.
AKTUALISIEREN:
In der Zwischenzeit habe ich ein Logitech G502 gekauft und festgestellt, dass nach der Konfiguration über den Treiber unter Windows nicht nur das Profil selbst im Gerätespeicher gespeichert wird, sondern der eigentliche Tastendruck mit der Maus erfolgt. Das hat mein Problem unter Linux gelöst!
Die einzige andere Maus, an die ich mich erinnere, die das konnte, war damals die Razer Copperhead. Aber ich denke, es gibt heute noch andere Mäuse, die dasselbe können.
Antworten:
Ich habe viel Zeit damit verbracht, diese verbindliche Arbeit zu machen. Ich habe schließlich eine Lösung gefunden, die kompliziert ist, aber gut funktioniert und keine Software von Drittanbietern impliziert. Ich teile es hier in der Hoffnung, dass es den Menschen hilft. Außerdem weiß ich, dass dies in Bezug auf die Sicherheit nicht perfekt ist, so dass konstruktives Feedback mehr als willkommen ist.
Es gibt Lösungen, die wirklich nett sind, wie die hier vorgeschlagene , aber sie leiden immer unter der Einschränkung von xbindkeys, die die gesamte Maus greifen und die Zuordnung von Modifikatoren und Mausklicks unsicher machen. Plus die Guile-basierte Lösung aus dem obigen Link verwenden Strg + Plus / Strg + Minus, die zum Beispiel von Gimp nicht erkannt wird.
Ich habe herausgefunden, dass wir eine Maustaste haben wollen, die als Tastatur fungiert, also habe ich uinput verwendet, auf die über Python zugegriffen werden kann. Ich habe ein Skript geschrieben, das / dev / my-mouse für den Daumenknopf-Klick überwacht und die Strg-Taste sendet auf die virtuelle Tastatur. Hier sind die detaillierten Schritte:
1. Mach udev Regeln
Wir möchten, dass die Geräte zugänglich sind (Rechte und Standort).
Für die Maus:
Udev sucht nach einem vom Kernel erkannten Gerät mit Namen wie event5 und ich wähle meine Maus mit dem Namen aus. Die SYMLINK-Anweisung stellt sicher, dass ich meine Maus in / dev / my_mx_mouse finde. Das Gerät kann von einem Mitglied der Gruppe "mxgrabber" gelesen werden.
Um Informationen zu Ihrer Hardware zu finden, sollten Sie so etwas wie ausführen
Für die Eingabe:
Symlink ist nicht erforderlich. Die Eingabe erfolgt immer in
$/dev/uinput
oder$/dev/input/uinput
abhängig von dem System, auf dem Sie sich befinden. Geben Sie ihm einfach die Gruppe und die Rechte zum Lesen UND Schreiben.Sie müssen den Stecker aus der Steckdose ziehen und der neue Link sollte in / dev erscheinen. Sie können udev zwingen, Ihre Regeln mit auszulösen
$udevadm trigger
2. Aktivieren Sie das UINPUT-Modul
Und um es dauerhaft zu booten:
3. Neue Gruppe erstellen
Oder wie auch immer Sie Ihre Zugangsgruppe genannt haben. Dann sollten Sie sich selbst hinzufügen:
4. Python-Skript
Sie müssen die Bibliothek python-uinput (offensichtlich) und die Bibliothek python-evdev installieren . Verwenden Sie pip oder Ihr Distributionspaket.
Das Skript ist ganz einfach, Sie müssen nur den event.code Ihrer Schaltfläche identifizieren.
5. Viel Spaß!
Jetzt müssen Sie nur noch Ihre Python-Datei ausführbar machen und Ihren Desktop-Manager bitten, die Datei beim Start zu laden. Vielleicht auch ein Glas Wein, um die gute Arbeit zu feiern!
6. Extra kostenlos
Ich benutze xbindkeys für zusätzliches Verhalten. Beispielsweise kann die folgende Konfiguration hilfreich sein, wenn Sie eine Maus mit seitlichen Mausklicks haben:
Damit diese letzte Kombination funktioniert, müssen Sie die für das Python-Skript konfigurierte Schaltfläche deaktivieren. Andernfalls wird sie weiterhin von xbindkeys abgerufen. Es muss nur die Strg-Taste bleiben:
Nachladen mit
$ xmodmap ~/.Xmodmap
7. Schlussfolgerung
Wie ich am Anfang sagte, bin ich nicht ganz glücklich darüber, dass ich mir die Wrights geben muss, um an / dev / uinput zu schreiben, auch wenn es sich um die "mxgrabber" -Gruppe handelt. Ich bin sicher, dass es einen sichereren Weg gibt, aber ich weiß nicht wie.
Positiv zu vermerken ist, dass es sehr, sehr gut funktioniert. Jede Kombination von Tastatur- oder Maustasten, wie sie mit der Strg-Taste der Tastatur funktioniert, funktioniert jetzt mit der der Maus !!
quelle
Ich habe mit PyUserInput eine Lösung gefunden . Dies ist recht einfach und erfordert keine Administrationsrechte. Mit Python 2 und PyUserInput habe ich das folgende Skript verwendet:
Nachdem ich dem Skript Ausführungsrechte gegeben habe, rufe ich es
~/.xsessionrc
zum Beispiel mit einem Line-In auf~ / path / to / script.py &
Hinweis . Dies verhindert nicht, dass das Maustastenereignis ausgelöst wird. In meinem Fall habe ich
xinput set-button-map
die Zuordnung der xinput-Schaltflächen geändert und die Nummer der Schaltfläche, an der ich interessiert war, einer nicht verwendeten zugewiesen.Wenn Sie beispielsweise die Taste 8 Ihrer Maus verwenden möchten, Taste 8 jedoch bereits eine Funktion hat (z. B.
page-next
), können Sie Folgendes verwenden.xsessionrc
vorausgesetzt, die Schaltfläche hat
12
keine Bedeutung für das Betriebssystem und weist der Schaltfläche12
in.xbuttonmodifier.py
dem oben beschriebenen Skript eine benutzerdefinierte Funktion zu .quelle
xinput
. Siehe bearbeitete Frage.Ich habe eine Teillösung. Ich habe noch nicht herausgefunden, wie die Zuordnung der vorhandenen Schaltfläche aufgehoben werden kann. Sie erhalten also einen Klick auf die Schaltfläche und den gewünschten Modifikator. Wenn diese Maustaste einen vorhandenen Zweck hat, wird sie dennoch ausgelöst. Wenn Sie beispielsweise die rechte Maustaste einer Steuertaste neu zuordnen, wird ein Steuerelement + Klick gesendet.
Wie auch immer, ich habe einen Forumsbeitrag gefunden, der Ihrer Frage ähnelt und auf den die Antwort lautete, btnx zu installieren und Ihre Modifikatoren dadurch zu konfigurieren. Es scheint, dass BTNX nicht mehr über das Repo erhältlich ist. Es gibt ein ppa, aber es funktioniert nicht für das neueste Ubuntu.
Forumsbeitrag: Beitrag: http://ubuntuforums.org/showthread.php?t=1245930
Aber die Quelle ist verfügbar:
Sie könnten es aus dem Quellcode kompilieren, aber dadurch werden Dateien auf Ihrem System abgelegt, die der Paketmanager nicht verwalten kann.
Nämlich die folgenden Dateien:
Die folgenden Symlinks:
Also ... wenn es Ihnen nichts ausmacht, aus der Quelle zu bauen ...
Holen Sie sich die Abhängigkeiten für btnx:
Wenn Sie noch nie etwas aus dem Quellcode erstellt haben, benötigen Sie möglicherweise auch Build-Essentials:
Dann holen und kompilieren Sie btnx:
Es verfügt über ein separates GUI-Konfigurationstool. Holen Sie sich die Abhängigkeiten dafür:
Holen Sie sich jetzt das GUI-Konfigurations-Tool und kompilieren Sie es:
Führen Sie nun das Tool aus:
Klicken Sie auf "Maus-Tasten erkennen". Wenn Sie die Anweisungen lesen möchten, während Sie das Tool verwenden, ändern Sie die Größe des angezeigten Fensters. Der Dialogtext wird später abgeschnitten, wenn Sie dies nicht tun. Wenn Sie versuchen, die Größe während der Erkennung zu ändern, wird er abgebrochen die Erkennung. Mach das Fenster einfach ein bisschen größer.
Klicken Sie auf Drücken, um die Mauserkennung zu starten, und versuchen Sie dann, die Maus nicht zu bewegen, bis sich der Text ändert ... Dauert etwa 5-10 Sekunden. Der Text wird geändert. Ignorieren Sie in diesem Fall den Text und klicken Sie auf Weiterleiten.
Klicken Sie auf die Schaltfläche "Drücken, um die Tastenerkennung zu starten"
Hier klicken Sie mehrmals auf eine Maustaste (bis sich die Statusleiste füllt). Stellen Sie dann den Namen der Schaltfläche auf etwas ein, das Sie später erkennen werden (Beispiel: LeftButton). Klicken Sie auf die Schaltfläche Hinzufügen.
Wiederholen Sie diesen Vorgang für jede Maustaste (Scroll-Räder, Scroll-Klicks usw. nicht vergessen). Sie können wahrscheinlich alle Schaltflächen überspringen, die Sie nicht neu zuordnen möchten.
Wenn Sie alle Schaltflächen hinzugefügt haben, klicken Sie auf OK.
Klicken Sie in der Haupt-GUI auf Schaltflächen, und wählen Sie im linken Bereich die Schaltfläche aus, die Sie neu zuordnen möchten. Es werden die Namen verwendet, die Sie in den vorherigen Schritten eingegeben haben. Für Ihre Zwecke möchten Sie rechts unter Tastenkombination nur einen Tastenmodifikator auswählen.
Klicken Sie in diesem Bildschirm nicht auf Löschen, da sonst die Schaltfläche entfernt wird. Sie müssen zurückgehen und den Knopf erneut erkennen, wenn Sie dies tun.
Kehren Sie zum Bildschirm "Conrigurations" zurück und klicken Sie auf "Restart BTNX".
Probieren Sie den neuen Knopf aus.
Wenn Sie die Anwendungen deinstallieren möchten, stoppen Sie das btnx-Programm und gehen Sie dann in die entsprechenden git-ausgecheckten Verzeichnisse und führen Sie die Deinstallation durch:
quelle