Páginas

jueves, 3 de octubre de 2013

GfxTablet - Tableta gráfica virtual para plataforma Linux utilizando una tablet Android

Huyendo del camino fácil

De siempre me ha interesado la fotografía y el diseño gráfico. Tanto es así que hace ya algún tiempo que me compré una tableta digitalizadora. Estoy hablando de la época en que el sistema Android no se había popularizado y también de cuando aún no existían los smartphones.
En aquel momento, la tableta que compré era una CyberTablet Z12, de la marca  Adesso, que especificaba claramente que era para un entorno de Windows Vista.
La marca no era tan reconocida como Wacom, lo que a la hora de integrarla en un entorno Linux, como era mi caso, no fue del todo directo. Aún eran los tiempos en que los fabricantes solo desarrollaban drivers para Windows. Pero me arriesgué. Supuse que buscando por la red, con el poderoso Google, me sería fácil encontrar algún aficionado que hubiese desarrollado los drivers para que fuese reconocido por Linux y, por tanto, poder integrarlo con los programas GIMP, Inscape y todos aquellos programas gráficos de código abierto que existen en un entorno Linux.
Todo fue cuestión de precios y de prestaciones mínimas. Y porque pensé que me sería fácil su integración. Y aunque no me fue fácil, llegué a hacerla funcionar, sino plenamente sí lo suficiente para practicar con ella.
Es una tableta que aún se comercializa, con unas prestaciones aceptables para lo que yo quería - retoque fotográfico:

  • 10 x 6,25 pulgadas de área de escritura.
  • lápiz inalámbrico de 1024 niveles de presión y con dos botones.
  • conectada y alimentada a través de un puerto USB.
Repescando la tableta, la he conectado a la plataforma Ubuntu 13.04 que tengo y la ha reconocido sin ningún problema.
Pero no era esto de lo que quería hablar, sino de una solución parecida utilizando una tablet o un smartphone con sistema Android.

La solución con GfxTablet

A principios de este año apareció en GIMPUSERS.com, un portal dedicado a la aplicación GIMP, una entrada refiriéndose a un desarrollo realizado para utilizar un dispositivo Android, preferiblemente una tablet por su mayor tamaño, como tableta digitalizadora para GIMP, que por su implementación era factible utilizarlo para cualquier programa gráfico que funcionase en una plataforma Linux. Finalmente decidí probar y lo que sigue a continuación es mi experiencia al respecto.
gfxTablet nos permite utilizar un dispositivo Android, preferentemente una tablet por su mayor tamaño, como una tableta digitalizadora gráfica. El proyecto se encuentra aquí. Consta de dos componentes:
  • La aplicación Android
  • El driver de entrada para el PC
La aplicación que se instala en el dispositivo Android envía al PC paquetes de datos UDP por el puerto 40118 con la información de coordenadas y de presión sobre la pantalla táctil.
El driver que se instala en el PC simula una tableta virtual gobernada por la aplicación instalada en el android.

Requerimientos

  • Cualquier dispositivo Android con pantalla táctil y Android 4.0 o superior.
  • Plataforma Linux con módulo uinput integrado en el kernel.

Dónde encontrar GfxTablet

En FDroid, se encuentra una ficha en inglés sobre gfxTablet e incluye unos enlaces con más información al respecto.
Podemos encontrar la aplicación Android en el Play Store de Google,  y el driver se encuentra en networktablet 64-bit, dynamically linked. Eso sí, este driver es válido para plataformas de 64-bit y está comprobado que funciona en Ubuntu 13.04, 12.10 o Fedora 18. En el caso de que nuestro PC no sea de 64, u otra versión de Linux, habrá que bajar el código del driver y generar el ejecutable, siempre que el kernel del Linux tenga integrado el módulo uinput.

Instalación del driver en Linux

Si para la instalación del driver partimos del código fuente, nos bajaremos dicho código, que viene en un fichero comprimido, lo descomprimimos y lo compilamos.
user@user-pc:~$ wget https://f-droid.org/repo/at.bitfire.gfxtablet_2_src.tar.gz
user@user-pc:~$ tar -xzvf at.bitfire.gfxtablet_2_src.tar.gz
user@user-pc:~$ cd at.bitfire.gfxtablet_2_src/driver-uinput
user@user-pc:~/at.bitfire.gfxtablet_2_src/driver-uinput@ sudo make
[sudo] password for user: ******** 
cc networktablet.c protocol.h -o networktablet
user@user-pc:~/at.bitfire.gfxtablet_2_src/driver-uinput@
lo que nos generará un fichero, con el nombre networktablet.
EL sistema Linux deberá tener instalado la utilidad make y el compilador de c gcc. Si no fuera el caso, habría que instalarlos para poder compilar el código fuente del driver.

Activación del driver

Le asignamos los permisos oportunos (chmod a+x)  y lo tendremos listo para ser activado en modo privilegiado:
user@user-pc:~/at.bitfire.gfxtablet_2_src/driver-uinput@ chmod a+x networktablet
user@user-pc:~/at.bitfire.gfxtablet_2_src/driver-uinput@ sudo ./networktablet
[sudo] password for user: ******** 
GfxTablet driver (protocol version 1) is ready and listening on 0.0.0.0:40118 (UDP)
Hint: Make sure that this port is not blocked by your firewall.
Y a partir de este momento el driver estará esperando los mensajes UDP que le envíe la aplicación GfxTablet instalada en el dispositivo Android.
Podemos comprobar que el driver está instalado, abriendo otra ventana de comandos y tecleando lo siguiente:
user@user-pc:~/at.bitfire.gfxtablet_2_src/driver-uinput@ xinput list
⎡ Virtual core pointer                     id=2 [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer               id=4 [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver                    id=9 [slave  pointer  (2)]
⎜   ↳ Network Tablet                           id=10 [slave  pointer  (2)]
⎣ Virtual core keyboard                    id=3 [master keyboard (2)]
    ↳ Virtual core XTEST keyboard              id=5 [slave  keyboard (3)]
    ↳ Power Button                             id=6 [slave  keyboard (3)]
    ↳ Power Button                             id=7 [slave  keyboard (3)]
    ↳ Logitech USB Receiver                    id=8 [slave  keyboard (3)]
user@user-pc:~/at.bitfire.gfxtablet_2_src/driver-uinput@
apareciendo el drive Network Tablet, listo para su uso en aplicaciones gráficas de Linux.
Activamos la aplicación GfxTablet y la configuramos, poniendo la ip que tenga el PC en estos momentos - mediante ifconfig.
Seguidamente comprobamos que responde a los trazos que hagamos sobre la pantalla táctil del dispositivo. A medida que movamos el dedo por encima de la pantalla del dispositivo, o mejor con un lápiz digitalizador,  en la ventana de comandos aparecerá en la ventana de comandos una línea tras otra, con las coordenadas y el valor con el que presionamos la pantalla táctil.
.x: 8892, y: 10979, pressure: 819
.x: 10291, y: 10473, pressure: 819
.x: 11961, y: 10253, pressure: 819
.x: 13341, y: 10632, pressure: 819
.x: 14363, y: 10933, pressure: 819
.x: 15505, y: 11699, pressure: 819
.x: 16287, y: 12936, pressure: 1228
.x: 16762, y: 13455, pressure: 1228
.x: 16829, y: 13631, pressure: 819
.x: 17257, y: 14103, pressure: 819
.x: 17485, y: 14320, pressure: 1023
.x: 17590, y: 14366, pressure: 1023
...
Ahora solo queda ver si funciona con una aplicación gráfica de Linux, por ejemplo GIMP. Ejecutamos GIMP y nos vamos a Editar->Preferencias->Dispositivos de entrada y pulsamos la opción Configurar los dispositivos de entrada extendidos... apareciendo los dispositivos de entrada existentes, entre los que se tendrá que encontrar Network Tablet. Lo seleccionamos y lo configuramos, poniendo el modo en Pantalla. Guardamos y Cerramos. Y ya podemos hacer uso de la tableta digitalizadora.

Observaciones

Una vez que terminemos de utilizar el driver, será mejor abortar la ejecución del driver, pulsando CTRL-C en la ventana donde esté funcionando el driver.

Este utilidad está licenciada bajo la licencia MIT.

Referencias

GfxTablet Demo in Youtube 
GfxTablet - Android App on Google Play

Mejoras

Este solución permite utilizar de una manera rudimentaria un dispositivo Android como tableta virtual de una aplicación gráfica de Linux. Para sacarle más partido a esta solución se me ocurren algunas mejoras que a continuación paso a relacionar:
  • movimiento relativo del lápiz.
  • poner una imagen como fondo de la aplicación GfxTablet, que sirva de referencia al movimiento del lápiz, con lo que se facilitaría la acción de trazar la imagen en el lienzo.
  • limitar el movimiento del cursor al lienzo activo de la aplicación gráfica.
  • activar/desactivar la acción del lápiz sobre el lienzo.
Si a alguien se le ocurre alguna idea más, que la exponga en los comentarios para ver la manera de implementarla.


1 comentario:

  1. La marca no era tan reconocida como Wacom, lo que a la hora de integrarla en un entorno Linux, como era mi caso, guiaesceptica.org/biografia-de-jun/

    ResponderEliminar