Wie kann ich beliebige Standard-Multitouch-Gesten in Unity deaktivieren?

22

Ich verwende ein benutzerdefiniertes Touchégg- Multitouch-Gesten-Setup in Ubuntu 11.04 mit einem Magic Trackpad. Da die Standardgesten (z. B. 3-Finger-Tippen und Ziehen zum Verschieben von Fenstern, 4-Finger-Tippen zum Anzeigen des Strichs usw.) in Unity anscheinend fest codiert sind, kann ich ihnen keine benutzerdefinierten Touchégg-Aktionen und einige Standardaktionen zuweisen Gesten (die ich, wenn überhaupt, nicht oft einsetzen möchte) vermischen sich gelegentlich mit meinen ähnlichen benutzerdefinierten Gesten und werden versehentlich ausgelöst.

Gibt es eine praktische Möglichkeit (außer die uTouch-Quelle zu optimieren), um einige der Standardgesten zu deaktivieren? Wenn nicht, sind Verweise auf Teile des Codes (vielleicht in Grail?), In denen die Standardgesten definiert sind, und Hilfe beim Optimieren ebenfalls erwünscht.

mgunes
quelle
1
Kannst du utouch einfach deinstallieren und touchégg behalten?
Desgua
1
Touchégg macht Gebrauch von Utouch-Geis, also nein, nicht im entferntesten praktischen Sinne.
23.
Ich vermute, Sie können diese Aktionen in /etc/ginn/wishes.xml konfigurieren (ich bin auf dem Handy und kann sie gerade nicht testen)
desgua

Antworten:

16

Ein Update auf Domster Answer für Ubuntu 12.10.

Der Unity-Quellcode hat sich offensichtlich geändert. So erreichen Sie dasselbe in Unity 6.8.0. Die Schritte zum Herunterladen des Unity-Quellcodes sind die gleichen wie zuvor (ich kopiere das Snippet von domster und füge es ein):

sudo apt-get build-dep unity
cd /tmp  #It can be done somewhere else, feel free to change the base location.
mkdir unity
cd unity
apt-get source unity

Zu diesem Zeitpunkt ist nur die zu bearbeitende Datei /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Suchen Sie die Methode UnityScreen::InitGesturesSupport()(Zeile 3368 für Unity 6.8.0).

Kommentieren Sie dann alle Zeilen, die mit gesture_sub_launcher beginnen, damit es so aussieht:

void UnityScreen::InitGesturesSupport()
{
  std::unique_ptr<nux::GestureBroker> gesture_broker(new UnityGestureBroker);
  wt->GetWindowCompositor().SetGestureBroker(std::move(gesture_broker));
  /*
  gestures_sub_launcher_.reset(new nux::GesturesSubscription);
  gestures_sub_launcher_->SetGestureClasses(nux::DRAG_GESTURE);
  gestures_sub_launcher_->SetNumTouches(4);
  gestures_sub_launcher_->SetWindowId(GDK_ROOT_WINDOW());
  gestures_sub_launcher_->Activate();

  gestures_sub_dash_.reset(new nux::GesturesSubscription);
  gestures_sub_dash_->SetGestureClasses(nux::TAP_GESTURE);
  gestures_sub_dash_->SetNumTouches(4);
  gestures_sub_dash_->SetWindowId(GDK_ROOT_WINDOW());
  gestures_sub_dash_->Activate();

  gestures_sub_windows_.reset(new nux::GesturesSubscription);
  gestures_sub_windows_->SetGestureClasses(nux::TOUCH_GESTURE
                                         | nux::DRAG_GESTURE
                                         | nux::PINCH_GESTURE);
  gestures_sub_windows_->SetNumTouches(3);
  gestures_sub_windows_->SetWindowId(GDK_ROOT_WINDOW());
  gestures_sub_windows_->Activate();
  */
}

Erstellen Sie Unity erneut, indem Sie den Anweisungen von domster folgen:

cd /tmp/unity/unity-6.8.0
dpkg-buildpackage -us -uc -nc
cd ..
sudo dpkg -i *deb

Und wieder voila! Abmelden und wieder anmelden.

Dgraziotin
quelle
wie würde das in aktueller einheit 7.2.1 funktionieren?
Plopp
Diese Antwort ist für Unity 7.2.2 immer noch zu 100% gültig (ich gehe also davon aus, dass sie auch für 7.2.1 gültig ist). Ich baue gerade auf, werde updaten was wieder passiert. Sobald ich fertig bin und neu gestartet.
Endophage
1
Zwischen Trusty und Xenial wurden Einstellungen zum Deaktivieren von Unity-Gesten zu dconf hinzugefügt, die unter aufgeführt sind com.canonical.unity.gestures. Möglicherweise auch in Wily verfügbar, aber ich glaube nicht. Ich bin mir nur sicher, dass es in Trusty nicht verfügbar und in Xenial ist.
Kevin
Ubuntu 16: beendet sich dpkg-buildpackage -us -uc -ncmit Fehlern. error: debian/rules build gave error exit status 2... The X server was not able to run in time ....recipe for target 'tests/CMakeFiles/run-test-switcher-controller-slow-headless' failed
Matt
11

Es stellt sich heraus, dass es nicht so schwer ist, das unityPaket zu patchen, da es die Handhabung von Mehrfachberührungen und Gesten vollständig deaktiviert. Hier finden Sie schrittweise Anleitungen zum Patchen unity-4.24.0.

Geben Sie in einer Befehlszeile Folgendes ein:

sudo apt-get build-dep unity
cd /tmp  #It can be done somewhere else, feel free to change the base location.
mkdir unity
cd unity
apt-get source unity

Kommentieren Sie zu diesem Zeitpunkt die folgenden 2 Zeilen in der Datei aus /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

GeisAdapter::Default()->Run();
gestureEngine = new GestureEngine(screen);

und die folgenden 4 Zeilen in der Datei /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp:

GeisAdapter& adapter = *(GeisAdapter::Default());
adapter.drag_start.connect(sigc::mem_fun(this, &Launcher::OnDragStart));
adapter.drag_update.connect(sigc::mem_fun(this, &Launcher::OnDragUpdate));
adapter.drag_finish.connect(sigc::mem_fun(this, &Launcher::OnDragFinish));

Der Quellcode ist in C++, so dass das Kommentieren einer Zeile durch Hinzufügen //am Zeilenanfang erfolgt. Zum Beispiel die Leitung

GeisAdapter::Default()->Run();

wird

//GeisAdapter::Default()->Run(); .

Zurück zur Befehlszeile geben Sie ein:

cd unity-4.24.0
dpkg-buildpackage -us -uc -nc
cd ..
sudo dpkg -i *deb

Et voila!

Wenn Sie sich jetzt abmelden und wieder anmelden, sollten die Gesten normal funktionieren. Das dreifache Tippen funktioniert auf meinem System standardmäßig als mittlerer Klick, ohne dass ein Touchegg erforderlich ist. Aber sowohl touchegg als auch ginn funktionieren jetzt gut, um benutzerdefinierte Gesten für Ihre Anwendungen zu definieren.

domster
quelle
3

Um dies bei der neuesten Unity (5.18.0) in 12.04 zu tun, müssen Sie etwas andere Codezeilen auskommentieren.

In plugins / unityshell / src / Launcher.cpp:

// GeisAdapter& adapter = GeisAdapter::Instance();
// adapter.drag_start.connect(sigc::mem_fun(this, &Launcher::OnDragStart));
// adapter.drag_update.connect(sigc::mem_fun(this, &Launcher::OnDragUpdate));
// adapter.drag_finish.connect(sigc::mem_fun(this, &Launcher::OnDragFinish));

In den Plugins / unityshell / src / unityshell.cpp:

// geis_adapter_.Run();
// gesture_engine_.reset(new GestureEngine(screen));
stefanix
quelle
2

Zweiter Versuch

dinegri schlägt vor, dass, um drei Gesten zu deaktivieren, ccsm installiert sein muss und dann "Unit MT Grab Handles", auch "Loves Handles" genannt, hier deaktiviert sein muss .

Aber es lässt uns mit den vier Fingergesten noch.

Erster Versuch

Die Konfigurationsdatei für utouch lautet /etc/ginn/wishes.xml. Sie können diese Datei also bearbeiten und die Aktionen entfernen (oder kommentieren), die Sie nicht möchten. Dann würde Touchégg seine Arbeit ohne Konflikte erledigen.

Referenz

PS: Ich konnte Ihr Problem hier nicht reproduzieren, um die Lösung zu testen. Das tut mir leid.

desgua
quelle
Das ist die Konfigurationsdatei für ginn, einen Gesteninjektor, dessen Funktionalität mit der von Touchégg überlappt. Änderungen an der Konfigurationsdatei haben nur Auswirkungen, wenn der Ginn-Daemon ausgeführt wird. Da ich Touchégg verwende, ist dies normalerweise nicht der Fall. Mit der Möglichkeit, Ginn anstelle von Touchégg zu verwenden, habe ich versucht, einige standardmäßige Unity-Gesten zu überschreiben, indem ich sie in der Ginn-Konfigurationsdatei auskommentierte und Ginn ausführte, aber das funktioniert nicht.
24.
Ich habe die Antwort aktualisiert.
Desgua
4
Durch Deaktivieren des Zusatzmoduls für Ziehpunkte wird nur die visuelle Erleichterung für das Ziehen entfernt. es wird nicht einmal die Drei-Finger-Tipp- und Zieh-Geste deaktivieren (die ich sowieso nicht besonders deaktivieren möchte), geschweige denn die anderen.
Montag,
Übrigens habe ich es bereits deaktiviert, da ich aufgrund des Fehlers Nr. 754000 den Klick auf die mittlere Schaltfläche mit Touchégg simulieren muss und es sehr verwirrend ist, wenn die Ziehpunkte jedes Mal angezeigt werden, wenn ich mit drei Fingern tippe.
24.
2

Deaktivieren Sie die Standard-Touch-Gesten wie folgt:

sudo apt install dconf-editor
dconf-editor

Klicken Sie in den linken Menüs auf

com > canonical > unity > gestures

und deaktivieren Sie die dort gezeigten 3 grundlegenden Gesten. Dies funktioniert am 16.04.3.

Alex
quelle
Mit Abstand die beste und einfachste Antwort für 16.04 Ubuntu-Benutzer, die gerne eine GUI-Version von dconf installieren.
GrayedFox
1

Wir haben ein Ubuntu-basiertes Kioskterminal gebaut, aber die Multitouch-Gesten haben das Betriebssystem enthüllt, also mussten wir das irgendwie loswerden.

Es war ein Samsung-Touchscreen-Gerät, xinputdas das Touch-Modul als AFO TCM10J 40V identifizierte.

Um Multitouch-Gesten unter Ubuntu 14.04 zu deaktivieren, ist die Methode im Grunde die gleiche wie oben beschrieben, außer dass Sie in der folgenden Zeile einen Kommentar finden müssen /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();
ElvinAtombender
quelle
Hmm, das schien bei mir nicht zu funktionieren. touchegg und ginn melden immer noch keine Daten für Gesten mit weniger als 4 Fingern, und die Einstellung "Zwei-Finger-Bildlauf" in den System-Touchpad-Einstellungen hat immer noch Vorrang ...
Jeff Ward
1

Beachten Sie, dass dpkg-buildpackage die Anzahl der Jobs als Argument zugewiesen werden kann, sodass Sie alle Ihre CPU-Kerne wie folgt verwenden können:

dpkg-buildpackage -us -uc -nc -j$(($(nproc)))

(Dies hätte ein Kommentar zu Dgraziotins Antwort sein sollen, aber ich kann keine Kommentare posten.)

Andrej Repiský
quelle
Hilft sehr. Es ist zu lange zu warten, bis das Gewinde fertig ist.
Orient