Steuern Sie Linux-Trackpads

Trackpad-Geste funktioniert nicht auf Linux-Desktop

Die Trackpad-Unterstützung unter Linux Desktop liegt weit unter der unter Mac und Windows.

Mac-Trackpad-Gesten haben inzwischen eine beachtliche Staatsbürgerschaft erlangt, und natürliches Scrollen, das das Trackpad in die entgegengesetzte Richtung der Fingerbewegung bewegt, ist jetzt auf einer Vielzahl von Betriebssystemen verfügbar, einschließlich Linux.

Selbst unter Windows wurde die Handhabung von Gesten im Vergleich zu Windows 10 verbessert, und obwohl dies nicht perfekt ist, kann es wie ein Macbook betrieben werden.

In der Vergangenheit wurde Synaptics (das leicht mit dem GUI-Paketmanager Synaptic verwechselt werden kann) zur Steuerung von Geräten wie Linux-Trackpads und -Mäusen verwendet. In den letzten Jahren verwendet Ubuntu jedoch seit dem 15.04. Von Wayland abgeleiteten Libinput. Darüber hinaus wechselt die Synaptik von nun an in den Wartungsmodus und wird nicht aktiv weiterentwickelt.

Sie können libinput mit Xorg verwenden, auch wenn Sie nicht in Wayland sind. Wenn Sie unter Ubuntu auf Xorg anstelle von Wayland ausgeführt werden, verwenden Sie libinput anstelle von synaptics, indem Sie xf86-input-libinput verwenden.

Image from Gyazo https://wayland.freedesktop.org/libinput/doc/latest/what-is-libinput.html#libinput-and-x-org

Außerdem hat Gnome (Wayland) im neuesten Ubuntu 19.10 Gestenunterstützung hinzugefügt, die jedoch immer noch unzureichend ist.

Steuern Sie Trackpads, um Gesten zu handhaben

Was kann ich tun, um mit Gesten umgehen zu können?

  1. Rufen Sie den Eingabewert des Trackpads ab
  2. Bestimmen Sie die Geste aus dem Eingabewert
  3. Verknüpft mit Arbeitsbereich und Browser-GUI-Operationen

Betrachten Sie jeden dieser Faktoren.

Geräteeingabe lesen

Installieren Sie libinput-tools, um die Trackpad-Eingabe zu lesen. https://wayland.freedesktop.org/libinput/doc/latest/tools.html

$ sudo apt-get install libinput-tools

libinput debug-events spuckt Geräteeingabeinformationen an die Standardausgabe aus.

-event2   DEVICE_ADDED     Sleep Button                      seat0 default group5  cap:k
-event17  DEVICE_ADDED     DLL075B:01 06CB:76AF Touchpad     seat0 default group7  cap:pg  size 101x57mm tap(dl off) left scroll-nat scroll-2fg-edge click-buttonareas-clickfinger dwt-on
-event4   DEVICE_ADDED     AT Translated Set 2 keyboard      seat0 default group13 cap:k
 event17  POINTER_MOTION    +1.17s        1.22/  0.00
 event17  POINTER_MOTION    +1.18s        1.22/  1.22
 event17  POINTER_MOTION    +1.18s        1.22/  0.00
-event4   KEYBOARD_KEY      +2.56s      *** (-1) pressed
 event4   KEYBOARD_KEY      +2.67s      *** (-1) released

Sie können Geräteverbindungsinformationen, Zeigerbewegungsinformationen auf dem Trackpad und Tastatureingaben (maskiert) abrufen.

Wenn Sie mit drei Fingern wischen, erhalten Sie die folgenden Ergebnisse.

-event17  GESTURE_SWIPE_BEGIN +296.35s  3
 event17  GESTURE_SWIPE_UPDATE +296.35s 3  6.14/-0.28 (24.06/-1.09 unaccelerated)
 event17  GESTURE_SWIPE_UPDATE +296.36s 3  8.06/-0.81 (21.87/-2.19 unaccelerated)
 event17  GESTURE_SWIPE_UPDATE +296.36s 3  7.71/-0.81 (20.78/-2.19 unaccelerated)
 event17  GESTURE_SWIPE_UPDATE +296.37s 3  6.09/-0.81 (16.40/-2.19 unaccelerated)
 event17  GESTURE_SWIPE_UPDATE +296.38s 3  4.06/-0.41 (10.94/-1.09 unaccelerated)
 event17  GESTURE_SWIPE_UPDATE +296.38s 3  6.49/-0.81 (17.50/-2.19 unaccelerated)
 event17  GESTURE_SWIPE_UPDATE +296.39s 3  4.06/-0.41 (10.94/-1.09 unaccelerated)
 event17  GESTURE_SWIPE_UPDATE +296.40s 3  2.84/ 0.00 ( 7.66/ 0.00 unaccelerated)
 event17  GESTURE_SWIPE_END +296.41s    3

Eine Zeile von GESTURE_SWIPE_UPDATE + 296.40s 3 2.84 / 0.00 enthält den Gesten-Typ, die Anzahl der Finger und die zurückgelegte Strecke.

Mit libinput-debug-events können Sie problemlos Geräteereignisse, Swipe-Ereignisse, Pinch-Zoom und andere Ereignisse abrufen. (Es gibt auch eine C-API für libinput, die diesmal jedoch nicht verwendet wird.)

Darüber hinaus können Sie in Synaptics von Ubuntu 14.10 oder früher das Protokoll des Trackpads mit dem Befehl "synclient -m" anzeigen. Es gibt jedoch keine Ausgabe, z. B. ein Swipe-Ereignis, und in der neuesten Synclient-Option wurde die Option -m gelöscht, sodass Sie das Ereignis nicht abrufen können. Es gibt.

Extrahieren Sie Gesten aus libinput-Debug-Abweichungen

GESTURE_SWIPE_UPDATE +296.40s 3 2.84/ 0.00

Indem diese eine Linie als Ereignis behandelt und der Durchschnittswert der Bewegungsentfernungen der Ereignisse mehrerer Linien erfasst wird, kann bestimmt werden, welche sich bewegt. GESTURE_SWIPE_END Es wäre schön, den Durchschnittswert der Reisedistanz zu ermitteln, bevor Sie kommen.

Übrigens, wenn Sie berechnen, ist der Durchschnittswert des Bewegungsbetrags x = 5,68125, y = -0,5425, was bedeutet, dass er sich nach rechts bewegt.

Sie können sehen, dass er drei Finger nach rechts wischte.

Weisen Sie GUI-Vorgängen Gesten zu

Wenn Sie wissen, dass Sie geklaut haben, wie sieht Ihre Geste dann aus, als würden Sie die GUI manipulieren? Wenn Sie wischen, soll sich der Bildschirm schnell bewegen. Am einfachsten ist es, eine vorhandene Tastenkombination aufzurufen.

Xdotool ist praktisch zum Aufrufen von Tastenkombinationen. xdotool kann Tastatureingaben und Mausbedienungen emulieren. http://manpages.ubuntu.com/manpages/trusty/man1/xdotool.1.html

Es gibt normalerweise Tastenkombinationen zum Verschieben des Arbeitsbereichs. Wenn Sie diese also mit xdotool-Befehlen ausdrücken,

Auch der Betrieb des Browsers ist der gleiche.

Auf diese Weise können Befehle zum Emulieren von Arbeitsbereichsoperationen und Browser-GUI-Operationen verwendet werden. (Tatsächlich können Sie ein intuitiveres Feedback erhalten, indem Sie den Arbeitsbereich synchron mit der Bewegungsentfernung der Geste in Pixeleinheiten verschieben. Da dies jedoch von der Implementierung auf WM- und Anwendungsseite abhängt, reicht es diesmal aus, die Tastenkombination zu emulieren. )

Schreiben Sie ereignisgesteuerte Programme

Grundsätzlich werden die folgenden Inhalte einfach ausgeführt, während eine Schleife nacheinander ausgeführt wird.

Lesen Sie die Geräteeingabe, bestimmen Sie die Gesten und rufen Sie den Befehl (xdotool) auf. Sie müssen diese nur weiter schleifen.

Ich habe Fusuma (https://github.com/iberianpig/fusuma) erstellt, eine Software von Ruby, die Gesten anhand des Libinputs erkennt. Ich habe auch schon einmal ein Perl-Skript (https://github.com/iberianpig/xSwipe) für synaptic geschrieben. Einschließlich dieser ist dies die zweite Arbeit.

In der Abbildung sieht es wie folgt aus.

Image from Gyazo

Es macht so etwas wie ereignisgesteuerte Programmierung und schleift Folgendes für Benutzeroperationen.

  1. Verarbeiten Sie die generierten Ereignisse von libinput-debug-events in einer Schleife
  2. Der Ereignis-Dispatcher für Wischen, Kneifen usw. wartet
  3. Anstehen bis das Ereignis versendbar ist und zurück zu 1
  4. Der Ereignishandler ruft den der Geste entsprechenden Befehl aus der Einstellungsdatei ab
  5. Führen Sie den erhaltenen Befehl aus und kehren Sie zu 1 zurück.

Fusuma läuft Demo

Image from Gyazo

Es ist eine laufende Bildschirmaufnahme, daher kann ich sie nicht sehen. Bitte installieren Sie es und probieren Sie es aus.

Wenn Sie Ruby schreiben können, können die Dispatcher- und Event-Handler-Teile auch mit Gem erweitert werden, sodass Sie auch Tap-, Stylus- und Tastaturereignisse erhalten können, sodass Sie in der Lage sein sollten, verschiedene Dinge zu tun. Ich habe [Dispatcher, der das Ereignis "Tastendruck + Wischen" erkennt] geschrieben (https://github.com/iberianpig/fusuma-plugin-keypress).

Ich kann Gesten nicht loslassen

Es ist im täglichen Leben unverzichtbar geworden und hängt vom Grad der Probleme ab, wenn Fusuma ausgeschaltet wird, z. B. das Wechseln des Arbeitsbereichs, das Zurückgeben des Browsers und das Fortfahren.

Wenn es sich in Zukunft um Wayland handelt und Sie eine Erweiterung von Gnome Shell schreiben, können Sie Ereignisse mit Javascript empfangen, sodass der Schwellenwert relativ niedrig ist.

Ich erkannte, dass ich verschiedene nützliche Funktionen erstellen könnte, wenn ich frei mit Geräteeingaben umgehen könnte. Wenn Sie das Ereignis aufnehmen können, können Sie es mit verschiedenen Aktionen wie dieser Zeit verknüpfen Ich habe das Gefühl, mit einer Webkamera Handgesten, Gesichtsgesten usw. machen zu können. Benachrichtigung, dass die Haltung schlecht ist. Brauchst du es nicht

Ich möchte weiterhin vertraute und kleinere Probleme finden und sie stetig lösen.

Recommended Posts

Steuern Sie Linux-Trackpads
[Linux ☓ Nvidia] Kurve Steuern Sie den Lüfter
[Linux] Aktualisieren Sie das Paket offline
Installieren Sie JDK unter Linux
Verstehen Sie das Linux-Audit-System Audit
Die Linux Watchdog-Treiber-API
[Linux] Verzeichnis unter dem Stammverzeichnis
Fügen Sie den Link unter Linux ein
Die Welt der Bücher der Steuerungstechnik
Probieren Sie den Linux-Kernel-Sperrmechanismus aus
Befehl [linux] kill, um den Prozess abzubrechen
AlterLinux - Über die vollständig japanisierte Linux-Distribution
Linux
[Linux] Wer ist der Hintergrundjob? ??
Einführung in PlantUML beim Lesen des Linux-Treibers
[Verständnis in 3 Minuten] Der Beginn von Linux
Steuern Sie das Matrix-LED-Panel von ROS aus
[Linux] Verwendung des Befehls echo
Linux: Korrigieren Sie die von malloc zurückgegebene Adresse
Benachrichtigen Sie Slack, wenn der Linux-Befehl beendet ist
So bedienen Sie Linux von der Konsole aus
Verstehen Sie den "temporären" Teil von UNIX / Linux
Versuchen wir zum ersten Mal Linux
[Linux] Lernen Sie die Grundlagen von Shell-Befehlen
Kompilieren des Linux-Kernels (Linux 5.x unter Ubuntu 20.04)
Stellen Sie unter Linux (Ubuntu) das Trackpad ein und stellen Sie die Funktion auf Drei-Finger-Wischen ein