Comment puis-je désactiver les gestes tactiles arbitraires par défaut dans Unity?


22

J'utilise une configuration de gestes multitouch Touchégg personnalisée dans Ubuntu 11.04 avec un Magic Trackpad. Étant donné que les gestes par défaut (tels que le toucher et le glisser à 3 doigts pour déplacer les fenêtres, le toucher à 4 doigts pour révéler le tiret, etc.) sont apparemment codés en dur dans Unity, je ne peux pas leur assigner d'actions Touchégg personnalisées, et certaines valeurs par défaut les gestes (que je n'ai pas l'intention d'utiliser beaucoup, voire pas du tout) se mélangent de temps en temps avec mes gestes personnalisés et sont déclenchés par accident.

Existe-t-il un moyen pratique (à moins de peaufiner la source uTouch) de désactiver certains des gestes par défaut? Sinon, des pointeurs vers des parties du code (peut-être en graal?) Où les gestes par défaut sont définis, et une aide au réglage serait également appréciée.


1
Pouvez-vous simplement désinstaller utouch et garder touchégg?
desgua

1
Touchégg utilise des utouch-geis, donc non, pas dans un sens pratique à distance.
mgunes

Je soupçonne que vous pouvez configurer ces actions dans /etc/ginn/wishes.xml (je suis sur mobile, je ne peux pas tester pour le moment)
desgua

Réponses:


16

Une mise à jour de la réponse domster pour Ubuntu 12.10.

Le code source d'Unity a évidemment changé, alors voici comment réaliser la même chose dans Unity 6.8.0. Les étapes pour télécharger le code source Unity sont les mêmes qu'avant (je vais copier et coller l'extrait de domster):

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

À ce stade, le fichier à modifier est uniquement /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Trouvez la méthode UnityScreen::InitGesturesSupport()(ligne 3368 pour Unity 6.8.0).

Ensuite, commentez toutes les lignes commençant par gesture_sub_launcher pour lui donner l'apparence suivante:

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();
  */
}

Reconstruisez Unity en suivant à nouveau les instructions de domster:

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

Et le tour est joué! Déconnectez-vous et reconnectez-vous.


comment cela fonctionnerait-il dans l'unité actuelle 7.2.1?
plopp

Cette réponse est toujours valide à 100% pour Unity 7.2.2 (donc je suppose qu'elle est également valable pour 7.2.1). Je construis en ce moment, je mettrai à jour ce qui se passe. touchegg une fois que j'ai terminé et redémarré.
Endophage

1
Entre Trusty et Xenial, des paramètres pour désactiver les gestes Unity ont été ajoutés à dconf, répertoriés sous com.canonical.unity.gestures. Si peut également être disponible à Wily, mais je ne le pense pas; Je suis seulement certain qu'il n'est pas disponible dans Trusty et qu'il l'est dans Xenial.
Kevin

Ubuntu 16: se dpkg-buildpackage -us -uc -nctermine avec des erreurs. 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

Il s'avère qu'il n'est pas si difficile de patcher le unitypackage pour désactiver totalement sa gestion des multi-touch et des gestes. Voici des instructions étape par étape pour les correctifs unity-4.24.0.

Dans une ligne de commande, entrez:

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

À ce stade, mettez en commentaire les 2 lignes suivantes du fichier /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

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

et les 4 lignes suivantes du fichier /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));

Le code source est C++dedans, donc commenter une ligne se fait en ajoutant //au début de la ligne. Par exemple, la ligne

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

devient

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

De retour à la ligne de commande, entrez:

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

Et voilà!

Maintenant, si vous vous déconnectez et vous reconnectez, les gestes devraient fonctionner normalement. Le triple tap fonctionne sur mon système comme un clic central par défaut, sans avoir besoin de touchergg. Mais touchegg et ginn fonctionnent désormais bien pour définir des gestes personnalisés pour vos applications.


3

Pour ce faire, sur la dernière unité (5.18.0) en 12.04, vous devez commenter des lignes de code légèrement différentes.

Dans les 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));

Dans les plugins / Unityshell / src / Unityshell.cpp:

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

2

Deuxième essai

dinegri suggère que «[pour] désactiver trois gestes, il [est] nécessaire [d'avoir] installé ccsm, [puis] de désactiver« Unit MT Grab Handles »également connu sous le nom de« Loves Handles »» ici .

Mais cela nous laisse encore avec les gestes des quatre doigts.

Premier essai

Le fichier de configuration pour utouch est /etc/ginn/wishes.xml. Vous pouvez donc modifier ce fichier et supprimer (ou commenter) les actions dont vous ne voulez pas. Ensuite, Touchégg ferait son travail sans conflits.

Référence

PS: Je n'ai pas pu reproduire votre problème ici pour tester la solution. Je suis désolé pour ça.


C'est le fichier de configuration de ginn, qui est un injecteur de gestes, dont la fonctionnalité chevauche celle de Touchégg. Les modifications apportées à son fichier de configuration n'auraient d'effet que si le démon ginn est en cours d'exécution, ce qui, puisque j'utilise Touchégg, ne l'est normalement pas. Avec la possibilité d'utiliser ginn au lieu de Touchégg à l'esprit, j'ai essayé de remplacer certains gestes Unity par défaut en les commentant dans le fichier de configuration de ginn et en exécutant ginn, mais cela ne fonctionne pas.
mgunes

J'ai mis à jour la réponse.
desgua

4
La désactivation du plugin des poignées ne supprimera que la possibilité visuelle de faire glisser; il ne désactivera même pas le geste de toucher et glisser à trois doigts (que je ne veux pas particulièrement désactiver de toute façon), encore moins les autres.
mgunes

Soit dit en passant, je l'ai déjà désactivé, car en raison du bogue # 754000, j'ai besoin de simuler le clic du bouton du milieu avec Touchégg, et le fait que les poignées apparaissent chaque fois que j'effectue un tapotement à trois doigts est très désorientant.
mgunes

2

Désactivez les gestes tactiles standard comme suit:

sudo apt install dconf-editor
dconf-editor

Dans les menus de gauche, cliquez pour

com > canonical > unity > gestures

et désactivez les 3 gestes de base indiqués ici. Cela fonctionne le 16.04.3.


De loin la réponse la meilleure et la plus simple pour les utilisateurs d'Ubuntu 16.04 qui sont heureux d'installer une version GUI de dconf.
GrayedFox

1

Nous avons construit un terminal kiosque basé sur Ubuntu, mais les gestes multitouch ont révélé le système d'exploitation, nous avons donc dû nous débarrasser de cela d'une manière ou d'une autre.

Il s'agissait d'un appareil à écran tactile Samsung, xinputidentifié le module tactile comme AFO TCM10J 40V.

Pour désactiver les gestes multitouch sur Ubuntu 14.04, la méthode est fondamentalement la même que domster décrite ci-dessus, sauf que vous devez trouver un commentaire dans la ligne suivante de /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();

Hmm, cela ne semble pas fonctionner pour moi. touchegg et ginn ne signalent toujours aucune donnée pour les gestes de moins de 4 doigts, et le paramètre "Two Finger Scroll" dans les paramètres du pavé tactile du système a toujours la priorité ...
Jeff Ward

1

Notez que dpkg-buildpackage peut recevoir un nombre de travaux comme argument, ce qui vous permet d'utiliser tous vos cœurs de processeur comme ceci:

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

(Cela aurait dû être un commentaire à la réponse de la dgraziotine, mais je ne peux pas poster de commentaires.)


Aide beaucoup. Il est trop long d'attendre que le filetage simple soit terminé.
Orient
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.