Camaras de fotos digitales en linux


Table of Contents
1. Antes de empezar
1.1. Introduccion
1.2. Un par de datos sobre las camaras digitales
1.3. Entendiendo lo que vamos a hacer
2. Configurandolo todo
2.1. Cocinando el kernel
2.2. Probando nuestros nuevos modulos
2.3. Accediendo a los datos
3. Simplificando aun mas las cosas
3.1. usbmgr
3.2. Montar la camara de forma automatica ( y semi-automatica )
4. Aplicaciones de X para nuestra camara digital
4.1. Gtkam
4.2. Digikam
4.3. Enlaces relaccionados
4.4. Otros enlaces
List of Figures
4-1. Imagen de GTKam en funcionamiento
4-2. Imagen de digikam en funcionamiento

Chapter 1. Antes de empezar

1.1. Introduccion

Hoy en dia, es habitual comprar sofisticadas camaras digitales que, entre muchas otras cosas, nos permiten pasar las fotos sacadas con nuestra camara a nuestro ordenador, para poder trabajar con ellas, modificarlas, almacenarlas, etc etc.

Si bien en un principio era extremadamente caro adquirir esta tecnologia ( al igual que pasa con cualquier tecnologia nueva ), actualmente los precios han bajado hasta hacerse asequibles por la mayoria de los usuarios, mientras que al mismo tiempo aumenta la calidad y disminuye el tamaño. En mi caso concreto, hoy mismo he comprado una camara digital de fotos por poco menos de 200 , y en poco menos de media hora he conseguido que mi nuevo juguete, que segun la tendera que me ha atendido "NO es posible utilizar en linux, solo en windows y mac ", funcione sin ningun tipo de problemas en mi querida debian.

Antes de explicar como lo he hecho, quiero aprovechar para dejar bien claro que NUNCA debemos limitarnos a escuchar lo que nos digan en las distintas tiendas de informatica acerca de linux; despues de escuchar frases miticas como "No puedes usar linux porque no es un sistema operativo legal", "No, no hay drivers para linux porque apenas lo usa gente, y no interesa" o la mitica "Claro que tiene drivers para linux, pero se venden por separado, y son muy inestables", y posteriormente configurarlo sin apenas problemas, espero que cualquier linuxero que escuche esto, no se limite a aceptar lo que le dicen, sino que pruebe e investigue.


1.2. Un par de datos sobre las camaras digitales

Si estas pensando en comprarte una camara digital, y posteriormente utilizarla en tu GNU/Linux, estas de suerte, ya que la mayoria de las camaras estan actualmente soportadas, en cualquier caso, lo primero que deberias hacer es pasarte por la web de linux usb ( ver enlaces mas adelante )

A la hora de comprarla, es importante que te fijes en algunos puntos, como son:

Personalmente, siempre he preferido la calidad de la imagen antes que otras posibles caracteristicas, como podrian ser un tamaño mas pequeño. En cualquier caso, el mejor consejo que puedo dar es que antes de comprarla te plantees para que la necesitas ( si es que realmente la necesitas ), y sobre todo que consultes en tantos establecimientos como te sea posible.


Chapter 2. Configurandolo todo

2.1. Cocinando el kernel

Como ya hemos visto, en primer lugar instalaremos en nuestro sistema todo aquello que pueda sernos util o necesario. En primer lugar le daremos a nuestro kernel soporte USB y SCSI para su uso posterior.

Es importante aclarar que estoy dando por hecho ( como es mi caso ), que no existe ningun dispositivo USB previamente instalado en el kernel, si ya existe alguno, unicamente deberemos añadir aquellas opciones que no tengamos ya seleccionadas. En cualquier caso, no deberemos eliminar ninguna de las opciones ya seleccionadas, so pena de perder acceso a alguno de nuestros dispositivos.

Asi mismo, si tenemos configurada una grabadora, ya tendremos el soporte SCSI necesario. En cualquier caso siempre es importante saber que estamos haciendo al compilar nuestro kernel. Si nunca has compilado un kernel previamente, un buen principio es el kernel-howto ( ver enlaces al final de este documento ).

Suponiendo que ya tenemos el codigo fuente del kernel que estemos utilizando descomprimido en el directorio /usr/src, los pasos a seguir serian:

Tras esto, tendremos en el directorio /lib/modules/version_de_kernel nuestros nuevos modulos instalados. Recuerda que si has compilado el kernel desde cero, deberas reiniciar para que los cambios se creen.


2.2. Probando nuestros nuevos modulos

Una vez que tenemos los modulos compilados, el siguiente paso es cargarlos en nuestro sistema y comprobar que realmente funcionan como deberian. Antes de nada, ejecutaremos el comando tail -f /var/log/sylog para ver en tiempo real los mensajes de nuestro kernel. Para ello, usaremos el comando modprobe ( o modconf para los debianeros mas vagos ), para ir añadiendo los siguientes modulos:

Si no hemos tenido ningun problema, en la terminal donde tenemos el syslog veremos algo como esto:

Jun 7 11:39:18 maki kernel: usb.c: registered new driver hub Jun
      7 11:39:51 maki kernel: Initializing USB Mass Storage driver... Jun 7
      11:39:51 maki kernel: usb.c: registered new driver usb-storage Jun 7
      11:39:51 maki kernel: USB Mass Storage support registered. Jun 7
      11:40:05 maki kernel: usb.c: registered new driver dc2xx Jun 7 11:40:05
      maki kernel: dc2xx.c: v1.0.0:USB Camera Driver for Kodak DC-2xx series
      cameras Jun 7 12:02:58 maki kernel: uhci.c: USB Universal Host
      Controller Interface driver v1.1

Ahora es el momento de conectar nuestra camara al cable USB y observar la reaccion de nuestro linux cuando la encendemos, en mi caso, observo estos mensajes:

Jun 7 12:13:02 maki kernel: hub.c: new USB device 00:1d.0-2,
      assigned address 3 Jun 7 12:13:02 maki kernel: WARNING: USB Mass Storage
      data integrity not assured Jun 7 12:13:02 maki kernel: USB Mass Storage
      device found at 3

Aqui vemos que efectivamente ha encontrado nuestra camara, ahora ya podremos montarla como si de un disco duro SCSI se tratara.


Chapter 3. Simplificando aun mas las cosas

3.1. usbmgr

Una vez que ya tenemos listo nuestro querido linux para trabajar con nuestra nueva camara digital, vamos a hacer todo lo posible para facilitarnos la tarea. Asi, vamos a instalar usbmgr para que cargue los modulos usb por nosotros. Asi, no tendremos que cargar y descargar el modulo cada vez que conectemos la camara, y, adem, podremos utilizar usbmgr para el resto de dispositivos usb que tengamos instalados.

La instalacion de usbmgr en debian es tan sencilla como hacer:

apt-get install usbmgr

Una vez que lo tengamos instalado ( nada como la potencia de dpkg para estas cosas ), en el directorio /etc/usbmgr tendremos toda la configuracion de nuestro demonio instalador usb.

Dentro de este directorio, son especialmente importantes los archivos preload.conf y usbmgr.conf. El archivo preload.conf indica a usbmgr que modulos usb debe cargar nada mas iniciarse, lo cual es importante de cara a ratones y teclados usb ( aunque a nosotros nos da exactamente igual ), mientras que el archivo usbmgr.conf mantiene una relaccion de todo los dispositivos posibles, y los modulos que se han de cargar para cada uno de ellos.

De cada dispositivo se mantiene una relaccion de dos valores: el vendedor y el producto. Asi, para cada dispositivo tendremos una linea similar a esta:

vendor 0x5a4 product 0x8801 module hid, keybdev

En este caso, esa linea corresponde con un teclado marca Ortek. Es importante fijarse en que los numeros indicativos de vendedor y producto son, como poco, dificiles de entender, y salvo que nuestra camara aparezca de forma especifica en el archivo usbmgr.conf, deberemos buscarnos la vida para saber los valores que debemos utilizar.

Afortunadamente, nuestra camara tiene grabados los datos codificados de vendedor y producto, y la amable gente que desarrolla usbmgr ha incluido un binario que lee los dispositivos usb conectados y nos indica los datos de vendedor y producto de cada uno de ellos.

Para saber los valores que debemos utilizar, y configurar correctamente usbmgr bastara con seguir los siguientes pasos:

  1. Cargar todos los modulos necesarios para asegurarnos de que nuestra camara funciona correctamente.

  2. Ejecutar el comando dump_usbdev

  3. Este comando devolvera una linea por cada producto usb instalado, ademas de una linea adicional del tipo class 0x9, que hace referencia a hub usb que tenemos en el ordenador. Si tenemos dudas, lo mejor es ejecutar el comando antes y despues de montar la camara, para utilizar la linea nueva que nos aparezca.

  4. Copiamos la linea tal cual en el archivo usbmgr.conf , cambiando <module_name> por los modulos que debemos cargar al activar ese dispositivo, en el mismo orden en el que han de cargarse.

  5. Ejecutamos el comando update_usbdb /etc/usbmgr/usbmgr.conf para que actualize su base de datos interna de dispositivos.

  6. Reiniciamos el demonio usbmgr con el comando /etc/init.d/usbmgr restart, para que coja los cambios que hemos realizado.

Tras hacer esto, podremos comprobar que todo funciona correctamente pinchando nuestra camara y encendiendola. Si la configuracion es correcta bastara con ejecutar el comano lsmod para ver que nos aparecen los modulos que hemos seleccionado, y de la misma forma, tras desconectar la camara veremos que los modulos se han limpiado de la memoria.

Asi mismo, el proceso que sirve para nuestra camara, tambien nos sirve para cualquier tipo de dispositivo usb que tengamos instalado.Basta con tener cuidado y compilar todos nuestros dispositivos usb como modulos para que nuestro sistema unicamente utilize aquellos recursos que necesita en cada momento, y con la ayuda de usbmgr nos evitaremos el tener que cargar y descargar los modulos de forma manual cada vez que queramos utilizar algunos de nuestros dispositivos USB.


3.2. Montar la camara de forma automatica ( y semi-automatica )

Si bien es una tarea realmente tediosa el tener que andar cargando y descargando modulos, hay gente realmente vaga, a la que no le gusta montar y desmontar la camara usb cada vez que la conecta al sistema. Si bien personalmente no es algo que me preocupe, valgan estos dos ejemplos para aquellos que, simplemente, no quieren trabajar de mas.

Primero vamos a configurar nuestra camara en el archivo fstab para que cualquier usuario pueda montarla sin necesidad de ser root. En el archivo /etc/fstab se encuentra una relaccion de las particiones que podemos montar, asi como las caracteristicas de estas. Asi, para cada uno de nuestras particiones tendremos una linea similar a esta:

/dev/hda1 /mnt/windows ntfs defaults,uid=1000 0 2

donde el primer parametro es la particion que vamos a montar, el segundo es el directorio donde se va a montar esa particion, el tercero es el tipo de sistema de ficheros que vamos a utilizar, el cuarto serian las opciones con las que queremos montar esta particion, y los dos ultimos son indicativos del sistema, y no vamos a verlos aqui.

Suponiendo que nuestra camara utiliza el dispositivo /dev/sda1 ( primera particion del primer disco duro SCSI ), la linea que vamos a utilizar seria:

/dev/sda1 /mnt/camara vfat defaults,uid=1000 0 2

Una vez que tengamos esta linea en nuestro fstab, nuestros usuarios podran montar la camara tranquilamente. Es importante añadir que la opcion uid=1000 se utiliza para que el usuario con el que normalmente trabajamos tenga permisos de acceso a ese directorio.

Aun asi, si somos REALMENTE vagos, podemos utilizar automounter para facilitar aun mas la tarea. Para los que no lo conozcan, automounter es un demonio que, al acceder a un directorio previamente especificado, monta la particion correspondiente.

Si bien instalar y configurar automounter es realmente sencillo, en este documento no voy a explicarlo, asi que ya sabeis: apt-get install autofs y man autofs :P


Chapter 4. Aplicaciones de X para nuestra camara digital