Gestos táctiles de OS X en Linux con Touchégg

Gestos táctiles de OS X en Linux con Touchégg
gestos táctiles linux touchegg mac os x apple touchpad

Al trabajar con GNU/Linux puedo disfrutar de distintos escritorios y acciones que mejoran mi productividad. Muchos de vosotros conoceréis los famosos gestos táctiles en el touchpad que implementan los equipos con sistema operativo OS X. Según qué gesto hagamos, cambiamos de escritorio, mostramos una ventana, la minimizamos o la cerramos, entre otras cosas. Esto puede parecer algo exclusivo de los sistemas de la manzana, pero no es así.

No todos los touchpad son compatibles con gestos multitáctiles. El mío detecta hasta gestos con 5 dedos, pero otros puede que sólo 2.

Llevo ya un tiempo utilizando un programa llamado touchégg, el cual detecta los movimientos que hacemos con los dedos en el touchpad. Lo he utilizado en Elementary OS, Linux Mint y Arch Linux, así que no tendréis problema en instalarlo. Sin embargo, ahora mismo lo estoy utilizando en Ubuntu Unity 14.04 y me ha costado ponerlo en marcha porque Ubuntu Unity tiene configurados por defecto algunos gestos, los cuales hay que desactivar para que touchégg los detecte.

Si no utilizas Ubuntu Unity, salta directamente al paso 2 (instalar touchégg). Si no, comienza en el paso 1.

Paso 1 (si usas Ubuntu Unity)

Como ya he mencionado antes, Ubuntu Unity tiene gestos táctiles por defecto que tenemos que desactivar. Para ello, tenemos que recompilar el código de Unity. No os asustéis, que es bastante fácil.

Introducimos el siguiente comando con el fin de instalar las dependencias necesiarias para compilar Unity:

$ sudo apt-get build-dep unity

A continuación, vamos a la carpeta /tmp y creamos en ella la carpeta unity. Entramos en ella y descargamos el código fuente de Unity:

$ cd /tmp $ mkdir unity $ cd unity $ apt-get source unity

Yo lo estoy haciendo con la versión de Unity 7.2.3, pero en teoría funciona con anteriores. Para comprobar vuestra versión, introducid el comando unity --version.

Una vez tengamos esto listo, nos dirigimos a la carpeta /tmp/unity/unity-*/plugins/unityshell/src/ y abrimos el fichero llamado unityshell.cpp con cualquier editor de texto:

Una vez abierto, buscamos el método llamado UnityScreen::InitGesturesSupport() (en mi versión está en la línea 4007) y veremos que tiene este contenido:

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

El objetivo es comentar todas las líneas que conmiencen por gestures_ para que Unity no aplique su propia detección de gestos en el touchpad. Tras comentar las líneas, se quedará 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(); */ }

Una vez modificado el código, tenemos que compilarlo. Para ello, volvemos a la carpeta /tmp/unity/unity-* con el comando cd /tmp/unity/unity-* e introducimos lo siguiente para generar los archivos .deb necesarios:

$ dpkg-buildpackage -us -uc -nc

Veremos algo parecido a la siguiente imagen. Tarda un poco, así que paciencia.

compilación unity ubuntu 14 04 geeky theory touchegg

En la carpeta /tmp/unity se habrán generado varios archivos. Para instalarlos, introducimos:

$ cd .. $ sudo dpkg -i *deb $ sudo apt-get -f install $ sudo apt-get autoremove

Una vez hecho esto,  ya tendremos instalada la versión de Unity que hemos modificado. A modo opcional, podemos bloquear las actualizaciones de Unity para no tener que realizar este proceso cada vez que haya una nueva versión:

$ echo "unity hold"|sudo dpkg --set-selections

Para aplicar los cambios, cerramos sesión y volvemos a entrar.

Paso 2: instalar touchegg

Para instalar touchegg, podemos hacerlo de dos maneras: la primera sería a través de los repositorios de nuestra distribución (en caso de que existan). La segunda sería compilando el código fuente. Yo voy a hacerlo de la segunda manera, que es la que me ha funcionado. Allá vamos.

Instalamos las dependencias necesarias para instalar touchegg:

$ sudo apt-get build-dep touchegg

Tras esto, descargamos el código fuente de este programa desde este enlace.  Y descomprimimos los archivos. A continuación, dentro de la carpeta que acabamos de descomprimir (touchegg-1.1.1), introducimos los siguiente comandos para instalar el programa:

$ qmake $ make $ sudo make install

Al finalizar la instalación, podremos ejecutar el programa con el comando touchegg. El archivo de configuración a modificar para poner los gestos que queramos y las acciones asociadas a ellos está en ~/.config/touchegg/touchegg.conf. El mío lo tengo configurado con algunas modificaciones sobre las que venían por defecto. Con cuatro dedos cambio de escritorio, con 5 cierro ventana, con 3 maximizo y minimizo... Podéis verlo a continuación:

<touchégg> <settings> <property name="composed_gestures_time">0</property> </settings> <application name="All"> <gesture type="TAP" fingers="2" direction=""> <action type="MOUSE_CLICK">BUTTON=3</action> </gesture> <gesture type="TAP" fingers="3" direction=""> <action type="MOUSE_CLICK">BUTTON=2</action> </gesture> <gesture type="TAP" fingers="5" direction=""> <action type="CLOSE_WINDOW"></action> </gesture> <gesture type="DRAG" fingers="2" direction="ALL"> <action type="SCROLL">SPEED=7:INVERTED=false</action> </gesture> <gesture type="DRAG" fingers="3" direction="UP"> <action type="MAXIMIZE_RESTORE_WINDOW"></action> </gesture> <gesture type="DRAG" fingers="3" direction="DOWN"> <action type="MINIMIZE_WINDOW"></action> </gesture> <gesture type="DRAG" fingers="3" direction="LEFT"> <action type="MOVE_WINDOW"></action> </gesture> <gesture type="DRAG" fingers="3" direction="RIGHT"> <action type="MOVE_WINDOW"></action> </gesture> <gesture type="DRAG" fingers="4" direction="UP"> <action type="SEND_KEYS">Super+W</action> </gesture> <gesture type="DRAG" fingers="4" direction="DOWN"> <action type="SHOW_DESKTOP"></action> </gesture> <gesture type="DRAG" fingers="4" direction="RIGHT"> <action type="SEND_KEYS">Control+Alt+Left</action> </gesture> <gesture type="PINCH" fingers="3" direction="ALL"> <action type="RESIZE_WINDOW"></action> </gesture> <gesture type="DRAG" fingers="4" direction="LEFT"> <action type="SEND_KEYS">Control+Alt+Right</action> </gesture> <gesture type="DRAG" fingers="5" direction="LEFT"> <action type="SEND_KEYS">Control+Shift+Alt+Right</action> </gesture> <gesture type="DRAG" fingers="5" direction="RIGHT"> <action type="SEND_KEYS">Control+Shift+Alt+Left</action> </gesture> <gesture type="PINCH" fingers="5" direction="ALL"> <action type="SEND_KEYS">Alt+F1</action> </gesture> </application> <application name="Okular, Gwenview"> <gesture type="PINCH" fingers="2" direction="IN"> <action type="SEND_KEYS">Control+KP_Add</action> </gesture> <gesture type="PINCH" fingers="2" direction="OUT"> <action type="SEND_KEYS">Control+KP_Subtract</action> </gesture> <gesture type="ROTATE" fingers="2" direction="LEFT"> <action type="SEND_KEYS">Control+L</action> </gesture> <gesture type="ROTATE" fingers="2" direction="RIGHT"> <action type="SEND_KEYS">Control+R</action> </gesture> </application> <application name="Chromium-browser, Dolphin"> <gesture type="DRAG" fingers="2" direction="LEFT"> <action type="SEND_KEYS">Alt+Left</action> </gesture> <gesture type="DRAG" fingers="2" direction="RIGHT"> <action type="SEND_KEYS">Alt+Right</action> </gesture> </application> </touchégg>

Para ahorrarnos el tener que introducir un comando para iniciar el programa siempre que encendamos nuestro equipo, lo añadimos a la lista de programas que se ejecutan al inicio del sistema. Introducimos el siguiente contenido en el archivo que vamos a crear en ~/.config/autostart/touchegg.desktop:

[Desktop Entry] Version=1.1.1 Name=Touchegg GenericName=Touchégg Comment=Touchégg Exec=/usr/bin/touchegg %u Terminal=false Type=Application

Tras cerrar sesión de nuevo y volver a entrar, estará todo funcionando correctamente.

Espero que os haya servido este tutorial. Touchégg me ha ayudado mucho a mejorar mi productividad, ya que con un gesto puedo cambiar totalmente de tarea. Además, es muy configurable y personalizable al gusto de cada uno.

¡Saludos!