Transferencia de archivos desde dispositivos móviles: el método habitual

Para transferir imágenes, audios y videos entre nuestros endemoniados dispositivos móviles y una computadora corriendo cualquier distribución moderna de Linux, basta con conectar el dispositivo y desde nuestro gestor de archivos amigo acceder al mismo con un triunfal doble-click.

Un doble-click sobre el ícono del dispositivo en el gestor de archivos MATE caja (1.8.2) sobre Debian 3.16, por ejemplo, iniciará una comunicación a través de gvfs. Además, si gvfs-fuse está instalado y nuestro usuario pertenece al grupo fuse, se creará automáticamente un punto de montaje dentro de $XDG_RUNTIME_DIR/gvfs/ que nos permitirá emplear todas las herramientas de nuestro sistema sobre sus archivos y directorios.

Al conectar algunos dispositivos digitales a nuestra computadora éstos permiten seleccionar el modo de conexión como PTP o MTP. PTP (Picture Transfer Protocol) es un protocolo de conexión para cámaras digitales que permite la transferencia de imágenes, mientras que MTP (Media Transfer Protocol) es un conjunto de extensiones para PTP que permiten la transferencia, no sólo de imágenes, sino también de audio o video de cámaras de video, reproductores de audio, etc. Los dispositivos de tipo USB Mass Storage no ocupan nuestro interés porque se tratan directamente como un sistema de archivos.

Siguiendo con el mecanismo automático de acceso en el entorno mencionado, MATE caja (1.8.2) sobre Debian 3.16, un dispositivo conectado como "Cámara (PTP)" utilizará el backend gvfsd-gphoto2 de gvfs con la dirección gphoto2://[usb:XXX,ZZZ]/ y uno conectado como "Dispositivo multimedia (MTP)" se comunicará mediante gvfsd-mtp en mtp://[usb:XXX,ZZZ]/, donde XXX es el bus de USB y ZZZ un número de identificación que el sistema ha asignado automáticamente al dispositivo. Es posible acceder al dispositivo con uno u otro protocolo indistintamente, ingresando la dirección correspondiente precedida de gphoto:// (para PTP) o mtp:// (MTP) en la barra de direcciones o barra de ubicación de Caja (Ctrl+L), pero debemos tener en cuenta que información distinta a imágenes sólo podrá ser transferida mediante MTP.

gPhoto2: su sistema de archivo virtual y su cliente de línea de comandos

Investigando otros métodos de transferecia de ficheros desde dispositivos móviles y explorando los protocolos PTP y MTP, me encontré con la suite gPhoto2 que consiste en un conjunto de herramientas desarrolladas con la librería multiplataforma libgphoto2, entre ellas:

  • gtkam: un cliente gráfico GTK2 para cámaras digitales (disponible en un paquete separado).
  • gphoto2: un cliente de línea de comandos para gphoto2 (CLI).
  • gphotofs: sistema de archivos virtual (VFS) para protocolos de transferencia de medios.

gphotofs es un programa basado en libgphoto2 que permite montar cualquier cámara soportada por gphoto2 como un sistema de archivos. La sintaxis para montar es gphotofs <punto_de_montaje> y para desmontar fusermount -u <punto_de_montaje>.

Aunque la página de manual de gphotofs (2014-01-06) dice que actualmente no se pueden agregar ni eliminar directorios, renombrar ficheros ni directorios, añadir o modificar ficheros ni obtener información relativa al espacio de almacenamiento, en las versiones actuales del programa todas estas acciones son posibles.

Una lista de las limitaciones actualizadas de gphoto2 es proporcionada en el README del proyecto en Github:

You cannot:
- Modify files still has some problems.
- Rename files/directories
- Unplug and replug a camera and expect things to keep working.
  - The backend gets confused and you'll just get errors when
    you try to do anything. Unmount and remount the filesystem
    and you'll be back in business.

Gphotofs es una alternativa interesante a evaluar frente a gvfs, pero quisiera presentar ahora la interfaz de línea de comandos oficial de gphoto2, que habilita nuevas funcionalidades y abre nuevas posibilidades. Se invoca mediante el comando gphoto2.

La CLI gphoto2 no requiere que se indique la dirección o puerto del dispositivo ya que el mismo es detectado automáticamente. En el caso de tener más de un dispositivo conectado, puede especificarse el puerto, mediante la opción --port [PATH], o el modelo de la cámara, --camera [MODEL]; si no se especifica ninguna de estas opciones, las órdenes de gphoto2 serán enviadas al primer dispositivo listado por gphoto2 --auto-detect.

Algunas opciones básicas para la transferencia de archivos son

  • gphoto2 --list-folders: lista los directorios del dispositivo
  • gphoto2 --folder DIR --list-files: lista los archivos del directorio especificado por DIR en el dispositivo.
  • gphoto2 --folder DIR --get-all-files: descarga todos los archivos del directorio especificado por DIR al directorio local.
  • gphoto2 --folder DIR --get-file FILE: descarga el o los archivos especificados por FILE dentro del directorio DIR al directorio actual de trabajo en el sistema de archivos local. FILE puede ser el nombre de archivo o el número correspondiente en la primer columna del listado de archivos. Pueden especificarse múltiples archivos separando sus nombres o números con una coma (,), pueden indicarse rangos de archiivos mediante el guión (-), así 1-3 descargará los archivos 1, 2 y 3, números separados por coma después de un rango indican archivos a excluir: 1-4, 3 descargará los archivos 1, 2 y 4.
  • gphoto2 --folder DIR --delete-all-files: elimina todos los arhivos del directorio especificado por DIR.
  • gphoto2 --folder DIR --delete-file FILE: elimina el o los archivos especificados por FILE dentro del directorio DIR. Los archivos se referencian de igual modo que para la opción --get-file.

Las mencionadas son sólo algunas de las opciones disponibles. La lista completa puede consultarse en su página de manual e incluyen, entre otras funciones, la de obtener el thumbnail de un archivo o archivos de un directorio, mostrar información sobre archivos, mostrar información sobre el medio de almacenamiento de la cámara, subir un archivo a la cámara, etc. La opción más interesante quizá sea la que nos permite, si la cámara lo soporta, enviar desde la computadora la orden de capturar una imagen.

gphoto2 dispone, además, de un sistema de scripts con ganchos (hooks) y una línea de comandos interactiva.