Zusammenfassung der Fragen: Ich möchte, dass eine meiner Maustasten Super_Lvon X11 als linke Windows-Taste registriert wird.
In meinem Fenstermanager kann ich Fenster verschieben, indem ich die "linke Windows-Taste" (Left Super) gedrückt halte und ein Fenster mit der linken Maustaste ziehe. Ich möchte in der Lage sein, das zu tun, ohne die Tastatur zu berühren, also möchte ich die linke Supertaste der Maustaste 11 zuordnen, auf diese Weise kann ich die Maustaste 11 halten und auf Fenster klicken und sie ziehen.
Die naheliegendste Lösung ist die Verwendung von xbindkeys und xte wie folgt ( .xbindkeysrc
):
"xte 'keydown Super_L'"
b:11
"xte 'keyup Super_L'"
b:11 + release
Das funktioniert so:
- Wenn ich die Maustaste 11 drücke, Super_Lwird auch gedrückt
- Wenn ich die Maustaste 11 loslasse, Super_Lwird auch losgelassen
Aber es gibt ein Problem: Ich kann Fenster nicht mit Super_L+ verschieben, Mouse1wenn ich auch eine andere Maustaste gedrückt halte, wie z. B. Maustaste 11. Mit der obigen Lösung wird Maustaste 11 weiterhin als gedrückt und losgelassen registriert Die Fenster-Manager-Operationen funktionieren.
Ich habe dies sowohl mit Cinnamon als auch mit Awesome WM versucht und absolut keine der Super_LTastaturkombinationen funktioniert, während die Maustaste 10 oder 11 gedrückt gehalten wird.
Ein unterdurchschnittlicher Hack
Ich arbeite derzeit an diesem Problem, indem ich den Mausklick veranlasse, die Super_LTaste eine bestimmte Zeit lang zu halten. Auf diese Weise kann ich mit der Maus klicken und dann für einen kurzen Zeitraum etwas herumziehen:
"xte 'keydown Super_L' 'usleep 250000' 'keyup Super_L'"
b:11
Ein weiterer Versuch
Wie von Totti vorgeschlagen, habe ich diese xbindkeys
Konfiguration ausprobiert :
"xte 'mouseup 10' 'keydown Super_L'"
b:10
"xte 'keyup Super_L'"
b:10 + Release
Es funktioniert nicht Es sieht so Super_Laus, als ob die Taste gedrückt gehalten wird, denn sobald ich Taste 10 loslasse, bleibt sie für immer gedrückt (bis ich die Super_LTaste auf der Tastatur erneut drücke ), aber die Maustaste wird weiterhin registriert, da ich keine Fenster anklicken und ziehen kann . Ich glaube nicht, dass ich in der Lage sein werde, diese Arbeit mit xbindkeys
und zu machen xte
.
Antworten:
Ein askubuntu-Beitrag enthält eine Antwort , die ich unten zusammenfassen werde.
Das Problem ist, dass xbindkeys die gesamte Maus erfasst, wodurch die Zuordnung von Modifikatoren und Mausklicks unsicher wird. Die Antwort verwendet uinput über ein Python-uinput- Skript, um
/dev/my-mouse
auf das Klicken mit der Daumentaste zu überwachen und den CtrlSchlüssel an die virtuelle Tastatur zu senden . Hier sind die detaillierten Schritte:1. Mach udev Regeln
Datei für die Maus
/etc/udev/rules.d/93-mxmouse.conf.rules
:Udev sucht nach Kernelgeräten mit Namen wie event5. Der SYMLINK dient zum Auffinden der Maus
/dev/my_mx_mouse
, die von der Gruppe gelesen werden kannmxgrabber
.So finden Sie Hardware-Informationen:
Für die Eingabe Datei
/etc/udev/rules.d/94-mxkey.rules
:Trennen Sie die Maus vom Computer und schließen Sie sie an, oder erzwingen Sie, dass udev die Regeln mit auslöst
udevadm trigger
.2. Aktivieren Sie das UINPUT-Modul
Und in
/etc/modules-load.d/uinput.conf
:3. Neue Gruppe erstellen
4. Python-Skript
Installieren Sie
python-uinput library
undpython-evdev library
.Für das folgende Skript muss der event.code der Schaltfläche angegeben werden:
5. Fertigstellung
Machen Sie die Python-Datei ausführbar und stellen Sie sicher, dass sie beim Start geladen wird.
quelle
F13
,F14
undF15
, und Deaktivieren von Mausfunktionenxinput
. Dann kann ich einfach die Tasten neu zuweisen, was auch immer ich eine einfache verwenden müssenxmodmap
. Die Hauptidee formuliert ist In einer Zusammenfassung (es gibt einige fest codierte Werte und ich stelle die Mausfunktionxinput
danach nicht wieder her ), werde ich einen Blogeintrag darüber mit der endgültigen Version des Skripts verfassen ( und den Link hier veröffentlichen, wenn es fertig sein wird. DankeDa Sie ein Skript per Mausklick ausführen können, können Sie den folgenden Trick anwenden.
1. Drücken Sie die Taste 11 , um die Supertaste zu halten . ( Taste 11 trigers ein Skript)
2. Bewegen Sie Fenster mit den anderen Maustasten
3. Drücken Sie Maustaste 11 wieder loslassen Superschlüssel
Skript Zum Halten des Superschlüssels verwenden Klicken
Sie
xdotool
auf die erste Schaltfläche, erstellen Sie eine temporäre Datei und halten Sie die Taste gedrückt. Klicken Sie beim nächsten Mal auf tmp-Datei löschen und lassen Sie die Taste los.aktualisieren
Laut Ubuntu-
imwheel
Hilfeseite (Viele-Tasten-Maus, wie man) kann auf eine Taste neu zuordnen.quelle
+ Mod4
in meiner xbindkeys-Konfiguration hinzufügen, um zu berücksichtigen, dass der Superschlüssel gedrückt wird. Die Problemumgehung, die Sie vorschlagen, ist besser als meine, und ich schalte darauf um :-) Aber die Frage wird immer noch nicht beantwortet.Fehlerbehebungsvorschlag: Ich würde versuchen, die
/dev/input/eventX
Datei zu überwachen, um festzustellen, welche Ereignisse generiert werden, wenn Sie diese Taste drücken und loslassen, insbesondere in Kombination mitBTN_LEFT
. Hier ist ein Beispielcode, um Ihnen den Einstieg zu erleichtern. Sie müssen es natürlich ändern, um alle Ereignisse zu protokollieren, nicht nur das Drücken von Tasten.Sie können auch die
xev
Ausgabe auschecken, falls Sie dies noch nicht getan haben. Das Analysieren beider Protokolle sollte das genaue Problem aufdecken, das Sie haben.Es besteht die Möglichkeit, dass Ihre Maus beim Drücken mehrerer Tasten zusätzliche Schaltflächenfreigabeereignisse generiert. In diesem Fall können Sie Problemumgehungen für die Schlüsselbindung verwenden oder die
xf86-input-evdev
Bibliothek ändern , um unerwünschte Ereignisse zu filtern (oder fehlende Ereignisse zu simulieren). Ich habe vor einiger Zeit etwas Ähnliches für einen Touchscreen gemacht, der beim Ziehen und Ablegen "Klick" -Ereignisse generiert hat. Die Idee war, "Release" -Ereignisse, die fast gleichzeitig (innerhalb eines kleinen Zeitfensters) auftraten, mit "Click" -Ereignissen zu filtern. Wenn meine Vermutung richtig ist, müssten Sie im Wesentlichen etwas Ähnliches implementieren.quelle
Ich habe das heute früher mit anderen Modifikatortasten herausgefunden. Das Problem ist, dass Sie den Modifikator in die Tastenkombination für die Freigabe aufnehmen müssen. Angenommen, Ihre Super-Taste ist Mod4 zugeordnet (dies sollte die Standardeinstellung sein, afaik):
EDIT: Ich habe festgestellt, dass dies Ihre Frage nicht vollständig beantwortet, da Sie LMB immer noch nicht verwenden können, während Sie b: 11 gedrückt halten
quelle