Come posso disabilitare i gesti multitouch predefiniti arbitrari in Unity?


22

Sto usando una configurazione gestuale multitouch Touchégg personalizzata in Ubuntu 11.04 con un Magic Trackpad. Poiché i gesti predefiniti (come il tocco con 3 dita e il trascinamento per spostare le finestre, il tocco con 4 dita per rivelare il trattino, ecc.) Sono apparentemente codificati in Unity, non sono in grado di assegnare loro azioni Touchégg personalizzate e alcune impostazioni predefinite i gesti (che non intendo usare molto, se non del tutto) ogni tanto si confondono con i miei simili incarichi personalizzati e vengono innescati per caso.

Esiste un modo pratico (a meno di modificare la fonte uTouch) per disabilitare alcuni dei gesti predefiniti? In caso contrario, saranno apprezzati anche i puntatori a parti del codice (forse in graal?) In cui sono definiti i gesti predefiniti e sarebbe utile aiutare con le modifiche.


1
Puoi semplicemente disinstallare utouch e mantenere touchégg?
desgua,

1
Touchégg fa uso dell'utouch-geis, quindi no, non in senso pratico da remoto.
mgunes,

Ho il sospetto che tu possa configurare queste azioni in /etc/ginn/wishes.xml (sono al cellulare, non posso testare ora)
desgua

Risposte:


16

Un aggiornamento alla risposta domster per Ubuntu 12.10.

Il codice sorgente di Unity è ovviamente cambiato, quindi ecco come ottenere lo stesso in Unity 6.8.0. I passaggi per scaricare il codice sorgente di Unity sono gli stessi di prima (copierò e incollerò lo snippet di 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

A questo punto, il file da modificare è solo /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Trova il metodo UnityScreen::InitGesturesSupport()(riga 3368 per Unity 6.8.0).

Quindi, commenta tutte le righe che iniziano con gesture_sub_launcher per farlo sembrare:

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

Ricostruisci Unity seguendo nuovamente le istruzioni di domster:

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

Et voilà di nuovo! Disconnettersi e riconnettersi.


come funzionerebbe nell'attuale unità 7.2.1?
plopp,

Questa risposta è ancora valida al 100% per Unity 7.2.2 (quindi presumo sia valida anche per 7.2.1). Sto costruendo in questo momento, aggiornerò su ciò che accade re. touchegg una volta che ho finito e riavviato.
Endofago,

1
A volte tra Trusty e Xenial, le impostazioni per disabilitare i gesti Unity sono state aggiunte a dconf, elencate sotto com.canonical.unity.gestures. Se può anche essere disponibile in Wily, ma io non la penso così; Sono solo sicuro che non è disponibile in Trusty ed è in Xenial.
Kevin,

Ubuntu 16: dpkg-buildpackage -us -uc -ncesce con errori. 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

Si scopre che non è così difficile patchare il unitypacchetto per disabilitarne totalmente la gestione di multi-touch e gesti. Ecco le istruzioni dettagliate per il patching unity-4.24.0.

In una riga di comando, immettere:

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

A questo punto, commentare le seguenti 2 righe nel file /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

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

e le seguenti 4 righe nel file /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));

Il codice sorgente è C++inserito, quindi commentare una riga viene fatto aggiungendo //all'inizio della riga. Ad esempio, la linea

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

diventa

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

Torna alla riga di comando, inserisci:

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

Et voilà!

Ora se esci e accedi di nuovo, i gesti dovrebbero funzionare normalmente. Il triplo tocco funziona sul mio sistema come clic centrale per impostazione predefinita, senza bisogno di touchegg. Ma sia touchegg che ginn ora funzionano bene per definire gesti personalizzati per le tue applicazioni.


3

Per fare questo sull'ultima unità (5.18.0) in 12.04 devi commentare righe di codice leggermente diverse.

Nei plugin / 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 plugins / unityshell / src / unityshell.cpp:

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

2

Secondo tentativo

dinegri suggerisce che '[t] o disabilita tre gesti, [è] necessario [avere] installato ccsm, [e quindi] disabilitare "Unit MT Grab Handles" noto anche come "Loves Handles"' qui .

Ma ci lascia ancora con i gesti delle quattro dita.

Primo tentativo

Il file di configurazione per utouch è /etc/ginn/wishes.xml. Quindi puoi modificare questo file e rimuovere (o commentare) le azioni che non vuoi. Quindi Touchégg farebbe il suo lavoro senza conflitti.

Riferimento

PS: non ho potuto riprodurre il tuo problema qui per testare la soluzione. Mi dispiace per questo.


Questo è il file di configurazione di ginn, che è un iniettore di gesti, la cui funzionalità si sovrappone a quella di Touchégg. Le modifiche al suo file di configurazione avrebbero effetto solo se il demone ginn è in esecuzione, che dal momento che sto usando Touchégg, normalmente non lo è. Con in mente la possibilità di usare ginn invece di Touchégg, ho provato a sovrascrivere alcuni gesti Unity predefiniti commentandoli nel file di configurazione di ginn ed eseguendo ginn, ma non funziona.
mgunes,

Ho aggiornato la risposta.
desgua,

4
La disabilitazione del plug-in handle rimuoverà solo il vantaggio visivo per il trascinamento; non disabiliterà nemmeno il tocco con tre dita e trascina il gesto (che non voglio disabilitare in alcun modo in particolare), figuriamoci gli altri.
mgunes,

A proposito, l'ho già disabilitato, poiché a causa del bug # 754000, devo simulare il clic del pulsante centrale con Touchégg e avere le maniglie visualizzate ogni volta che eseguo un tocco con tre dita è molto disorientante.
mgunes,

2

Disattiva i gesti tattili standard come segue:

sudo apt install dconf-editor
dconf-editor

Nei menu a sinistra fare clic su

com > canonical > unity > gestures

e disabilita i 3 gesti di base mostrati lì. Funziona il 16.04.3.


Di gran lunga la risposta migliore e più semplice per gli utenti di Ubuntu 16.04 che sono felici di installare una versione GUI di dconf.
GrayedFox,

1

Abbiamo costruito un terminale kiosk basato su Ubuntu, ma i gesti multitouch hanno rivelato il sistema operativo, quindi in qualche modo abbiamo dovuto liberarcene.

Era un dispositivo touchscreen Samsung, xinputidentificato il modulo touch come AFO TCM10J 40V.

Per disabilitare i gesti multitouch su Ubuntu 14.04 il metodo è sostanzialmente lo stesso di domster descritto sopra, tranne che devi trovare un commento nella riga seguente in /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();

Hmm, questo non sembra funzionare per me. touchegg e ginn non riportano ancora dati per gesti con meno di 4 dita e l'impostazione "Scorrimento con due dita" nelle impostazioni del touchpad del sistema ha ancora la precedenza ...
Jeff Ward,

1

Si noti che a dpkg-buildpackage può essere assegnato un numero di lavori come argomento, che consente di utilizzare tutti i core della CPU in questo modo:

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

(Questo avrebbe dovuto essere un commento alla risposta di dgraziotin, ma non posso pubblicare commenti.)


Aiuta molto È troppo lungo aspettare fino alla fine della creazione di un singolo thread.
Oriente,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.