Inspeccionando GPhoto2

by Sjlvanq E. R.
5 minutos
Inspeccionando GPhoto2

En la actualidad, para transferir imágenes, audios y videos entre nuestros dispositivos móviles y una computadora corriendo cualquier distribución moderna de GNU/Linux, basta con conectar el dispositivo en cuestión y con un triunfal doble click acceder al medio. Detrás de ello e imbuido de la filosofía de Unix, que procura que en un sistema prácticamente todo sea modular y reutilizable, podemos tener la suerte de encontrarnos con gPhoto2.

¿Qué es gPhoto2?

Como indica su página oficial, gPhoto2 es un conjunto de aplicaciones de software libre para interactuar con cámaras digitales en sistemas tipo Unix, como las populares distribuciones de la familia GNU/Linux (Debian, Ubuntu, Linux Mint, Mageia, Gentoo...), pero también MacOS, FreeBSD, NetBSD, etc. A cargo de su desarrollo hay todo un equipo de voluntarios de todas partes del mundo que, al día de la fecha, han conseguido dotar a gPhoto2 de soporte para más de 2700 cámaras y reproductores multimedia

El núcleo del proyecto es la librería libgphoto2, de donde los distintos programas que integran el conjunto de aplicaciones de gPhoto2 conocen sus métodos y funciones. Las versiones más modernas de esta librería nos permiten transferir información desde y hacia reproductores de medios que utilicen, no solo el protocolo PTP (Picture Transfer Protocol), sino también el más reciente MTP (Media Transfer Protocol).

¿Dónde puede vivir gPhoto2?

Al conectar ciertos dispositivos digitales a nuestra computadora, por ejemplo un teléfono celular, éstos permiten seleccionar, como ya habremos advertido, entre uno u otro modo de transferencia, 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) consta de una serie de extensiones sobre la base de PTP que permiten la transferencia, no sólo de imágenes, sino también de audio o video desde cámaras, reproductores de audio, etc.

Cuando nos conectamos desde un gestor de archivos en Linux con soporte GVfs como GNOME Files, Nemo, PCManFM, Thunar o Caja, lo habitual será que, para las conexiones PTP, gvfsd-gphoto2, un backend de gPhoto2, esté a cargo del proceso.

Pero gPhoto —y a esto íbamos cuando hablamos de filosofía modular al comienzo— tiene vida propia. ¿Acceder, por ejemplo, a las imágenes del celular a través de una línea de comandos?

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

Entre las aplicaciones que proporciona el paquete de gPhoto2 encontramos:

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

gphotofs

gphotofs es un programa basado en libgphoto2 que permite montar cualquier cámara soportada por gphoto2 como un sistema de archivos. La sintaxis para hacerlo es:

gphotofs <punto_de_montaje> 

y para desmontar la unidad del dispositivo:

fusermount -u <punto_de_montaje>

Aunque la página de manual de gphotofs 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.

gphoto2

La CLI (interfaz de línea de comandos) de gPhoto2 se invoca mediante el comando 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 su número según la primera columna del listado de archivos --list-files. Pueden especificarse múltiples archivos separándolos por coma o estableciendo un rango FILE1-FILEN que podrá ir seguido de una lista de archivos a excluir. Ejemplo: 1-5, 3 descargará los archivos 1, 2, 4 y 5.
  • gphoto2 --folder DIR --delete-all-files: elimina todos los arhivos del directorio 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 operación --get-file.

Las mencionadas son sólo algunas de las opciones disponibles. La lista completa puede consultarse en la página de manual del comando e incluyen, entre otras funciones, la de obtener el thumbnail de uno o varios archivos, mostrar información acerca de los archivos o el medio de almacenamiento, subir un archivo a la cámara, entre otras. Una opción llamativa es la que nos permite, con ciertas cámaras, enviar desde la computadora la orden de tomar una foto.

Por si fuera poco, gPhoto2 dispone, además, de ¡un sistema de scripts con ganchos (hooks) y una línea de comandos interactiva!

Investigalo vos también. Dejanos tus comentarios.