"Después del juego es antes del juego"
Sepp Herberger

viernes, 29 de julio de 2016

Pico Proyector Acer C112 DLP en Ubuntu 14.04 y 16.04

Estos días estoy jugando con un mini proyector Acer C112 DLP para hacerlo funcionar. Es un aparato curioso, que no tiene entrada VGA sino que se conecta por USB y con un programa cliente (EZ Display) se envía en tiempo real la pantalla desde el PC al proyector. No tiene mucha resolución ni luminosidad, pero está dentro de los márgenes que se esperan en este tipo de proyectores.


En principio el aparato solo trae el driver/programa cliente para Windows XP (aunque si insistes y pruebas al final puedes hacerlo funcionar en Windows 7) y punto pelota. Que maravilla, un aparato comprado hace pocos años que no funciona ni con Linux ni con Windows 8 y 10, vamos, que estos de Acer se han lucido con el soporte.

En esta páginaofrecen unos drivers/software para hacerlo funcionar en Windows 8 y 10. Parece un desarrollo propio de un programador al margen de Acer y al parecer hay que pagar algo, aunque el precio es bastante reducido (15$ es poco por poder seguir utilizando el aparato).

Para Linux, en cambio, tenemos a un héroe llamado Antonio Ospite (muy majo y atento que responde a cualquier consulta rápidamente) que estuvo sniffeando junto a Reto Schneider el tráfico USB windows-proyector y desensamblando el driver hasta poder hacer una librería y una aplicación en Linux que funciona perfectamente tal como funciona su equivalente Windows: el proyecto libam-7xxx, que soporta varios picoproyectores tales como:

  • Acer Series C pico projectors (C20 C110 C112 C120)
  • Philips/SagemCom PicoPix projectors (PPX 1020, PPX 1230, PPX 1430, PPX 1630)
  • CEL-TEC MP-01
  • Otros chinos

Para Ubuntu 16.04 es sencillo, instalamos estos paquetes desde repositorios:
ii  libam7xxx0.1                                 0.1.6-2                                    amd64        library for accessing am7xxx based devices
ii  libam7xxx0.1-bin                             0.1.6-2                                    amd64        library for accessing am7xxx devices - utilities
ii  usb-modeswitch                               2.2.5+repack0-1ubuntu1                     amd64        mode switching tool for controlling "flip flop" USB devices
ii  usb-modeswitch-data                          20151101-1                                 all          mode switching data for usb-modeswitch
Aquí tuve un pequeño problema un par de días: pinchaba el dispositivo y tras cierta una actividad de disco se quedaba todo quieto. Mirando con lsusb los dispositivos conectados no aparecía nada. Mirando el syslog se ve como se detecta algo, se prueban unos driver y al final todo acaba diciendo:
Jul 25 11:37:48 pc kernel: [ 5603.550891] option 1-8:2.0: device disconnected
Tras consultar con Antonio y sugerirme varias pruebas (desinstalar usb-modeswitch, quitar el módulo option de memoria, desinstalar libmtp-runtime) al final ha empezado a funcionar solo. Pienso que coincide con que he actualizado el kernel a 4.4.0-21-generic #37-Ubuntu, pero no estoy seguro.

Bueno, ahora pinchamos el dispositivo y haciendo lsusb debe aparecer primero como 1de1:1101 (dispositivo de almacenamiento, conteniendo los drivers de Windows XP) y en unos instantes usb-modeswich lo cambia a 1de1:5501, que es el proyector en si. Como no hay driver para él, no aparece ningún dispositivo que lo maneje. No importa, la aplicacion am7xxx-play envía directamente lo que le digamos por el puerto USB sin intermediarios, usando:
# am7xxx-play -f x11grab -i :0
Enviamos en tiempo real el contenido de la pantalla tal como lo hace EzDisplay. Si se mira la ayuda de am7xxx-play se verán opciones para modificar resolución, calidad, conexiones en tiempo real a otras fuentes de vídeo (cámaras, páginas web, etc). Vamos, una pequeña maravilla....¡gracias!.

Después de esto me he visto en la necesidad de usarlo en Ubuntu 14.04 con el problema de que no hay paquetes para ellos en repositorios. En https://ao2.it/debian/ hay varios paquetes compilados para Debian, pero ninguno acababa de encajar en el Ubuntu 14.04, siempre daban problemas con libavcodec5X y satélites (esos paquetes están relacionados con ffmpeg y continuamente dan problemas de compatibilidad con otras aplicaciones, parece ser que tienen un desarrollo fuertemente acoplado y cada versión es incompatible con el resto) ya que necesitaban unas versiones que no son las que trae Ubuntu 14.04 (libavcodec54 concretamente).

¿Solución?. Pues cómo en los viejos tiempos: vamos a compilar (y cumplimos la sentencia windowchista de que siempre estamos compilando los hijos de Linux). Antonio lo pone bastante sencillo: tenemos un repositorio git de donde solo hay que descargar y compilar. La última versión es la 0.1.6-2, pero es incompatible con Ubuntu 14.04. Para ahorrarme rollo ya digo que la última versión compatible es la 0.1.4-3, liberada hace 2 años.

Sin usar comandos git podemos descargarla directamente desde https://git.ao2.it/libam7xxx.git/commit/a49ffce85139aaf1fc2e2e79dd6c65ad7e7f523c en el enlace "snapshot".

Una vez descargado, descomprimimos el .tar.gz y seguimos los pasos del documento HACKING.asciidoc contenido en él:
 #cd libam7xxx-a49ffce
# aptitude install cmake libusb-1.0-0-dev libavformat-dev libavcodec-dev libavdevice-dev libswscale-dev
# mkdir build
# cd build
# cmake ../
# make 
Una vez hecha la compilación, en libam7xxx-a49ffce/build están los ejecutables y librerías. Podría hacer un paquete Debian para ellos, pero no, voy a instalar como en los viejos tiempos de Slackware:
 # make install
Con esto se copia todo a su sitio y si pinchamos el cañon en el USB ya podremos hacer:
# am7xxx-play -f x11grab -i :0
Una última nota: el fichero HACKING.asciidoc cuenta que es posible hacer funcionar am7xxx-play en Windows para que nos funcione allí aunque Acer no haya sacado drivers... ¿saben cómo? ¡Compilando!.

domingo, 24 de julio de 2016