¿Cómo puedo desactivar los gestos multitáctiles predeterminados arbitrarios en Unity?


22

Estoy usando una configuración de gestos multitáctiles Touchégg personalizada en Ubuntu 11.04 con un Magic Trackpad. Dado que los gestos predeterminados (como tocar y arrastrar con 3 dedos para mover ventanas, tocar con 4 dedos para revelar el guión, etc.) aparentemente están codificados en Unity, no puedo asignarles ninguna acción personalizada de Touchégg, y algunos valores predeterminados Los gestos (que no pretendo usar mucho, si es que lo hago) ocasionalmente se mezclan con mis similares personalizados y se activan por accidente.

¿Hay alguna forma práctica (sin modificar la fuente de uTouch) para desactivar algunos de los gestos predeterminados? De lo contrario, los punteros a partes del código (¿tal vez en el grial?) Donde se definen los gestos predeterminados, y también se agradecería la ayuda con los ajustes.


1
¿Puedes desinstalar utouch y mantener touchégg?
desgua

1
Touchégg hace uso de utouch-geis, así que no, en ningún sentido remoto.
mgunes

Sospecho que puede configurar estas acciones en /etc/ginn/wishes.xml (estoy en el móvil, no puedo probar en este momento)
desgua

Respuestas:


16

Una actualización de la respuesta domster para Ubuntu 12.10.

El código fuente de Unity obviamente ha cambiado, así que aquí es cómo lograr lo mismo en Unity 6.8.0. Los pasos para descargar el código fuente de Unity son los mismos que antes (copiaré y pegaré el fragmento 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

En este punto, el archivo a editar es solo /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Encuentre el método UnityScreen::InitGesturesSupport()(línea 3368 para Unity 6.8.0).

Luego, comente todas las líneas que comienzan con Gestor_sub_launcher para que se vea así:

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

Reconstruye Unity siguiendo las instrucciones de domster nuevamente:

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

Et voila otra vez! Cerrar sesión y volver a iniciar sesión.


¿Cómo funcionaría eso en la unidad actual 7.2.1?
plopp

Esta respuesta sigue siendo 100% válida para Unity 7.2.2 (así que supongo que también es válida para 7.2.1). Estoy construyendo en este momento, se actualizará sobre lo que sucede re. touchegg una vez que haya terminado y reinicie.
Endophage

1
En algún momento entre Trusty y Xenial, las configuraciones para deshabilitar los gestos de Unity se han agregado a dconf, que se enumeran a continuación com.canonical.unity.gestures. Si también puede estar disponible en Wily, pero no lo creo; Solo estoy seguro de que no está disponible en Trusty, y está en Xenial.
Kevin

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

Resulta que no es tan difícil parchear el unitypaquete para deshabilitar totalmente su manejo de toques múltiples y gestos. Aquí hay instrucciones paso a paso para parchar unity-4.24.0.

En una línea de comando, ingrese:

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

En este punto, comente las siguientes 2 líneas en el archivo /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

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

y las siguientes 4 líneas en el archivo /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));

El código fuente está dentro C++, por lo que comentar una línea se realiza agregando //al principio de la línea. Por ejemplo, la línea

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

se convierte

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

De vuelta a la línea de comando, ingrese:

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

Et voila!

Ahora, si cierra la sesión y vuelve a iniciarla, los gestos deberían funcionar normalmente. El triple toque funciona en mi sistema como un clic central de forma predeterminada, sin necesidad de touchegg. Pero tanto touchegg como ginn ahora funcionan bien para definir gestos personalizados para sus aplicaciones.


3

Para hacer esto en la última unidad (5.18.0) en 12.04, debe comentar líneas de código ligeramente diferentes.

En 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));

En complementos / unityshell / src / unityshell.cpp:

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

2

Segundo intento

dinegri sugiere que '[t] para deshabilitar tres gestos, [es] necesario [tener] instalado ccsm, [y luego] deshabilitar "Unidades MT Grab Handles" también conocido como "Loves Handles"' aquí .

Pero todavía nos deja con los cuatro dedos.

Primer intento

El archivo de configuración para utouch es /etc/ginn/wishes.xml. Para que pueda editar este archivo y eliminar (o comentar) las acciones que no desea. Entonces Touchégg haría su trabajo sin conflictos.

Referencia

PD: No pude reproducir tu problema aquí para probar la solución. Lo siento por eso.


Ese es el archivo de configuración para ginn, que es un inyector de gestos, cuya funcionalidad se superpone con la de Touchégg. Las modificaciones a su archivo de configuración solo tendrían efecto si el demonio ginn se está ejecutando, lo cual, como estoy usando Touchégg, normalmente no lo está. Con la posibilidad de usar ginn en lugar de Touchégg en mente, he intentado anular algunos gestos predeterminados de Unity al comentarlos en el archivo de configuración de ginn y ejecutar ginn, pero eso no funciona.
mgunes

He actualizado la respuesta.
desgua

44
Deshabilitar el complemento de manijas solo eliminará la capacidad visual para arrastrar; ni siquiera deshabilitará el gesto de tocar y arrastrar con tres dedos (que no quiero deshabilitar particularmente de todos modos), y mucho menos los demás.
mgunes

Por cierto, ya lo tengo desactivado, ya que debido al error # 754000, necesito simular el clic del botón central con Touchégg, y hacer que aparezcan los controles cada vez que realizo un toque con tres dedos es muy desorientador.
mgunes

2

Deshabilite los gestos táctiles estándar de la siguiente manera:

sudo apt install dconf-editor
dconf-editor

En los menús de la izquierda, haga clic para

com > canonical > unity > gestures

y deshabilite los 3 gestos básicos que se muestran allí. Esto funciona en 16.04.3.


Con mucho, la mejor y más directa respuesta para los usuarios de Ubuntu 16.04 que están felices de instalar una versión GUI de dconf.
GrayedFox

1

Hemos construido un terminal de kiosco basado en Ubuntu, pero los gestos multitáctiles revelaron el sistema operativo, por lo que tuvimos que deshacernos de eso de alguna manera.

Era un dispositivo de pantalla táctil Samsung, xinputidentificaba el módulo táctil como AFO TCM10J 40V.

Para deshabilitar los gestos multitáctiles en Ubuntu 14.04, el método es básicamente el mismo que el de domster descrito anteriormente, excepto que debe encontrar un comentario en la siguiente fila en /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();

Hmm, esto no parecía funcionar para mí. touchegg y ginn todavía no informan ningún dato para gestos de menos de 4 dedos, y la configuración "Desplazamiento de dos dedos" en la configuración del panel táctil del sistema todavía tiene prioridad ...
Jeff Ward

1

Tenga en cuenta que a dpkg-buildpackage se le puede dar una cantidad de trabajos como argumento, lo que le permite usar todos los núcleos de la CPU de esta manera:

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

(Esto debería haber sido un comentario a la respuesta de dgraziotin, pero no puedo publicar comentarios).


Ayuda mucho. Es demasiado tiempo esperar hasta que el acabado de un solo hilo termine.
Oriente el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.