martes, 12 de agosto de 2008

Usando una PocketPC en Linux (III): Sincronización de archivos y conversión de documentos

   Después de haber visto cómo configurar, conectar y gestionar los archivos de la PocketPC desde Linux, el siguiente paso es sincronizar nuestros documentos y archivos más importantes. En este apartado tenemos que distinguir entre dos tipos de archivos: los que requieren conversión y los que no. En el primer grupo se encuentran los archivos en formato PocketExcel y PocketWord y en el segundo tenemos fotos, música, archivos de texto, la base de datos de KeePass... La conversión de los archivos es muy importante porque lo que hace ActiveSync en windows cuando copiamos por ejemplo un archivo Excel a la PocketPC es convertirlo automáticamente a formato PocketExcel. Luego, si realizamos la copia a la inversa, ActiveSync lo convierte nuevamente de formato PocketExcel a Excel. Obviamente con esta conversión se pierde información compleja del archivo Excel como por ejemplo las macros, pero en mi caso no es problema porque las excel que utilizo en la PocketPC no suelen ser muy complejas. Por contra, al convertir los archivos a formato PocketExcel ganamos en velocidad de ejecución y tamaño.

   Aunque acabamos de comentar que ActiveSync realiza la conversión entre formatos al transferir los archivos, si copiamos un archivo Excel directamente a la SD (por ejemplo), lo podremos abrir sin mayor problema en la PocketPC (siempre teniendo claras sus limitaciones). Esta característica es la que vamos a utilizar para la conversión de archivos.

   En los repositorios de Ubuntu se encuentra disponible la utilidad unoconv que nos ayudará en nuestra tarea. Tal y como podemos leer en la ayuda, unoconv es una utilidad en línea de comandos (esto es lo realmente bueno) que nos permite realizar conversiones entre documentos soportados por OpenOffice. Necesita una instancia de OpenOffice para realizar la conversión, por lo que si no tenemos una en ejecución puede arrancar la suya propia de manera temporal.
unoconv is a command line utility that can convert any file format that OpenOffice can
import, to any file format that OpenOffice is capable of exporting.

unoconv uses the OpenOffice's UNO bindings for non-interactive conversion of documents
and therefor needs an OpenOffice instance to communicate with. Therefore if it cannot
find one, it will start its own instance for temporary usage. If desired, one can
start a "listener" instance to use for subsequent connections or even for remote
connections.

   El uso es muy sencillo, arrancamos la instancia temporal de OpenOffice y realizamos la conversión entre los documentos.
ivan@doraemon:~$ unoconv --listener &
ivan@doraemon:~$ unoconv -f xls HojaCalculo.ods
ivan@doraemon:~$ unoconv -f doc Documento.odt
ivan@doraemon:~$ kill -15 %-
   Con esto hemos convertido a formato excel y word respectivamente los archivos HojaCalculo.ods y Documento.odt.

   Con este ejemplo se ve que es muy sencillo realizar un pequeño script que convierta nuestros archivos Excel a ODS y viceversa cada vez que queramos sincronizar la PocketPC. Esta misma conversión se podría hacer directamente entre los formatos PocketExcel y ODS, pero por alguna razón la conversión con unoconv falla. Sin embargo si ese mismo archivo PocketExcel lo intento abrir desde OpenOffice, funciona correctamente. Es por esto que la conversión la realizo entre Excel y ODS.

   Teniendo todo lo anterior en mente vamos a plantear el siguiente escenario para realizar la conversión.
  • En el PC trabajaremos con ODS/ODT y en la PocketPC con XLS/DOC.
  • En el PC tendremos los archivos a sincronizar en formato XLS/DOC para realizar la sincronización con la PocketPC. Así, aunque trabajemos en ODS/ODT tendremos que tener en otra carpeta los archivos que queramos sincronizar en formato XLS/DOC.
  • Para realizar la sincronización utilizaremos rsync puesto que podemos montar el filesystem completo de la PocketPC en el directorio que queramos tal y como vimos en el artículo anterior Usando una PocketPC en Linux (II): Gestión de archivos y programas.
  • Para la sincronización vamos a utilizar las opciones delete y update de rsync. Con delete lo que conseguiremos es que si borramos un archivo en el origen, éste se borre también en el destino. Con update no se sobreescriben archivos en el destino si la fecha es posterior a la del origen.
  • La sincronización se realiza en dos pasos, primero desde el ordenador a la PocketPC y posteriormente desde la PocketPC al ordenador.

  • #!/bin/sh
    #
    # syncPocketPC.sh: Script para la sincronización de la PocketPC
    # y linux por medio de rsync
    #
    # Iván López Martín
    # http://lopezivan.blogspot.com
    #

    SYNC_DIR=/home/ivan/MisDocs/PocketPC/
    TMP_SYNC_DIR=/home/ivan/MisDocs/PocketPC/tmp/
    POCKETPC_DIR=/home/ivan/PocketPC/SD\ Card/Personal/

    # Sincronización desde el PC a la PocketPC
    ####
    cd $TMP_SYNC_DIR
    unoconv --listener &
    unoconv -f xls $SYNC_DIR/*.ods
    unoconv -f doc $SYNC_DIR/*.odt

    mv $SYNC_DIR/*.xls $TMP_SYNC_DIR
    mv $SYNC_DIR/*.doc $TMP_SYNC_DIR
    kill -15 %-

    rsync -avz --delete --update ${TMP_SYNC_DIR} "${POCKETPC_DIR}"


    # Sincronización desde la PocketPC al PC
    ####
    rsync -avz --delete --update "${POCKETPC_DIR}" ${TMP_SYNC_DIR}

    cd $SYNC_DIR
    unoconv --listener &
    unoconv -f ods $TMP_SYNC_DIR/*.xls
    unoconv -f odt $TMP_SYNC_DIR/*.doc

    mv $TMP_SYNC_DIR/*.xls $SYNC_DIR
    mv $TMP_SYNC_DIR/*.doc $SYNC_DIR
    kill -15 %-

       Aunque la idea es buena este script tiene algunas limitaciones:
  • Aunque sólo se transfieran unos cuantos archivos entre la PocketPC y el ordenador, siempre se realiza la conversión de todos ellos. Habría que parsear el log de rsync para procesar posteriormente con unoconv sólo los archivos modificados.
  • Debido a lo anterior, la fecha de modificación de los archivos también cambia con cada sincronización.
  • Por propias limitaciones de unoconv, y según podemos leer en la ayuda, necesitamos una sesión X para arrancar la instancia de OpenOffice que realiza la conversión:
    unoconv uses the UNO bindings to connect to OpenOffice, in absence of a usable socket, it will start its own OpenOffice instance with the correct parameters. However, OpenOffice requires a working DISPLAY (even with -headless option) and therefor you cannot run it in a true console, you need X.

  •    Aún con las limitaciones comentadas anteriormente tenéis un esqueleto funcional para poder mejorarlo y hacer la versión 0.2 de script con las mejoras que he propuesto. Si alguien se anima a mejorarlo que me lo pase y actualizaré el artículo.

       Para finalizar añadir que también vamos a utilizar rsync para la sincronización de la base de datos de KeePass, así conseguimos tener siempre sincronizados los cambios que hagamos tanto en el ordenador como en la PocketPC. Recordamos que realizamos la sincronización en los dos sentidos para asegurarnos de tener la siempre la información más actual en todos los dispositivos.
    #!/bin/sh
    #
    # syncKeePass.sh: Script para la sincronización de la base de datos
    # de KeePass entre la PocketPC y linux por medio de rsync
    #
    # Iván López Martín
    # http://lopezivan.blogspot.com
    #
    LINUX_DIR=/home/ivan/MisDocs/
    POCKETPC_DIR=/home/ivan/PocketPC/SD\ Card/Personal/

    # Linux -> PocketPC
    rsync -avz --update --include=*.kdb --exclude=* "${LINUX_DIR}" "${POCKETPC_DIR}"

    # PocketPC -> Linux
    rsync -avz --update --include=*.kdb --exclude=* "${POCKETPC_DIR}" "${LINUX_DIR}"

       Con este pequeño script hemos logrado sincronizar nuestro archivo de passwords entre la PocketPC y Linux, además se podrían añadir otros tipos de archivos y otras rutas para adaptarlo a nuestras necesidades. Como siempre, estoy abierto a cualquier sugerencia para mejorarlo.

    lunes, 4 de agosto de 2008

    Usando una PocketPC en Linux (II): Gestión de archivos y programas

      Como continuación de la entrada anterior Usando una PocketPC en Linux (I): Conexión y configuración, en ésta vamos a ver cómo utilizar la PocketPC una vez que ya se habla con Linux. Más concretamente nos centraremos en la instalación de software y en la gestión de los archivos.

       Hay tres paquetes imprescindibles que nos ayudarán en esta tarea: synce-gnomevfs, synce-trayicon y synce-software-manager. Todos se pueden descargar desde Sourceforge.net. La versión que yo tengo instalada es la 0.9 puesto que la compilación de la última 0.12 me ha resultado imposible. He resuelto multitud de dependencias y he compilado algunas librerías y paquetes, pero finalmente no he sido capaz de compilar todo. Me temo que tendré que esperar a que saquen los binarios de la nueva versión o a intentarlo de nuevo en el futuro. Lo que he hecho es descargarme los paquetes de la versión 0.9 en formato rpm y convertirlos a .deb con alien para instalarlos de la manera habitual con dpkg.
  • synce-gnomevfs: Con este plugin podremos acceder al sistema de ficheros de la PocketPC desde Nautilus escribiendo simplemente synce:///. El problema es que al parecer sólo funciona hasta la versión 7.10 de Ubuntu. En su momento lo utilicé y la integración entre Nautilus y la PocketPC era muy buena.
  • synce-trayicon: Es un icono en el la barra de notificaciones que nos permite acceder a la PocketPC y conectarla y desconectarla.
  • synce-software-manager: Para instalar y desinstalar aplicaciones de forma gráfica de manera similar a como haríamos con windows. Por ejemplo, aquí muestro la instalación de la última versión de KeePass.


  •    El software de PocketPC en ocasiones no viene como un simple archivo .cab, sino que es un instalador .exe en el que viene empaquetado el archivo .cab correspondiente. Al ejecutar este instalador lo que ocurre es que se desempaqueta el .exe y por medio de ActiveSync se instala el .cab en la PocketPC. En el caso de encontrarnos con una aplicación en este formato, es un poco cuestión de suerte que la podamos instalar o no desde linux. Algunas se desempaquetarán correctamente (ejecutándose desde wine) y podremos instalar el .cab siguiendo el método anterior. Otras aplicaciones, sin embargo, no detectarán ActiveSync instalado y abortarán la instalación. Por ejemplo, la instalación de una demo del Advanced Brain Trainer se ha instalado sin problemas.


       Pero con alguna otra aplicación que he probado no ha funcionado correctamente por la ausencia de ActiveSync. En ese caso, creo que no queda otro remedio que acudir a windows (aunque eso sí, virtualizado) para instalar la aplicación.

       A parte de instalar software, lo más importante es navegar por las carpetas de la PocketPC y poder transferir archivos de una manera rápida y cómoda. Así, como alternativa a no poder utilizar Synce-gnomevfs he encontrado SynceFS que sí está disponible en formato .deb (también en Sourceforge.net) y que a mi entender es todavía mejor porque ofrece muchas más posibilidades como ya veremos en el siguiente artículo. Con esta utilidad podemos montar el filesystem completo de la PocketPC en cualquier directorio que queramos y podremos acceder a él y manipular los archivos directamente sin los comando synce-pls, synce-mkdir,...
    ivan@doraemon:~$ sudo apt-get install syncefs 

    ivan@doraemon:~$ sudo modprobe coda

    ivan@doraemon:~$ sudo echo "none /home/ivan/PocketPC cefs rw,user,noauto,codadev=/dev/cfs0 0 0" >> /etc/fstab

    ivan@doraemon:~$ mount PocketPC
    SynCE FS using "/dev/cfs0" (CODA v3)

    ivan@doraemon:~$ ls -l PocketPC
    total 1541
    drwxrwxr-x 1 ivan ivan 0 2004-01-01 02:04 Application Data
    drwxrwxr-x 1 ivan ivan 0 2004-01-01 02:59 Archivos de programa
    drwxrwxr-x 1 ivan ivan 0 2004-01-01 11:00 ConnMgr
    drwxrwxr-x 1 ivan ivan 0 1998-01-01 13:00 iPAQ File Store
    drwxrwxr-x 1 ivan ivan 0 2004-01-01 02:05 itn
    drwxrwxr-x 1 ivan ivan 0 2004-01-01 02:59 My Documents
    drwxrwxr-x 1 ivan ivan 0 2004-01-01 02:59 profiles
    drwxrwxr-x 1 ivan ivan 0 2004-01-01 02:59 Program Files
    drwxrwxr-x 1 ivan ivan 0 1998-01-01 13:00 SD Card
    -rw-rw-r-- 1 ivan ivan 49152 2007-02-04 10:08 SystemHeap
    drwxrwxr-x 1 ivan ivan 0 2004-01-01 02:59 Temp
    -rw-rw-r-- 1 ivan ivan 480400 2005-12-26 20:20 templ.voc
    drwxrwxr-x 1 ivan ivan 0 2006-12-30 17:48 TomTom
    drwxrwxr-x 1 ivan ivan 0 2004-01-01 02:59 Windows


    ivan@doraemon:~$ synce-pls ../ | sort -r
    --D------T 1998-01-01 13:00:00 SD Card/
    --D------T 1998-01-01 13:00:00 iPAQ File Store/
    Directory 2006-12-30 17:48:10 TomTom/
    Directory 2004-01-01 11:00:08 ConnMgr/
    Directory 2004-01-01 02:59:52 Program Files/
    Directory 2004-01-01 02:59:52 profiles/
    Directory 2004-01-01 02:59:51 My Documents/
    Directory 2004-01-01 02:59:51 Archivos de programa/
    Directory 2004-01-01 02:59:50 Windows/
    Directory 2004-01-01 02:59:50 Temp/
    Directory 2004-01-01 02:05:19 itn/
    Directory 2004-01-01 02:04:17 Application Data/
    Archive 49152 2007-02-04 10:08:19 SystemHeap
    AC-------- 480400 2005-12-26 20:20:33 templ.voc

       Como véis, es mucho más amigable usar ls que synce-pls y tratar la PocketPC como si fuera un directorio más en nuestro sistema.