tiistaina 20. toukokuuta 2008

Linux ja Canon Powershot A95

Valokuvien hallintaan käytössäni on parhaillaan Kubuntu 8.04 ja Canon Powershot A95. Käytän Powershotin lisäksi paljon Nokia N95:n kameraa, mutta siitä kuvien siirto titokoneelle on vaivatonta. -Puhelin näkyy Linuxissa massamuistina josta on helppo kopioida kuvat koneelle.

A95 on toista maata. Se käyttää alkujaan Microsoftin luomaa(?) PTP-protokollaa USB:n yli. Sinällään protokolla ei ole ongelma, koska libgphoto2:ssa on sille hyvä tuki. Ongelma tulee (käsittääkseni) siinä että user modessa pyörivän ohjelman tulee toteuttaa viestintäprotokolla suoraan USB-deviceä vastaan. Ja tässä tapauksessa käyttäjällä ei ollut tarvittavia käyttöoikeuksia devicen lukemiseen ja kirjoittamiseen.

Google-session jäljiljtä olin useaa luettua bugiraporttia viisaampi. Lukemani bugiraportit olivat vanhoja, joten yllättävää että ongelma on edelleen olemassa.

Mikään seuraavista ohjelmista ei saanut kamerasta mitään ulos:
  • Dolphin
  • DigiKam
  • gphotofs
  • gphoto2
  • gthumb.

Gphoto2:n virheilmoituksesta sai eniten irti:

*** Error ***
An error occurred in the io-library ('Could not claim the USB device'): Could not claim interface 0 (Operation not permitted). Make sure no other program or kernel module (such as sdc2xx, stv680, spca50x) is using the device and you have read/write access to the device.
*** Error (-53: 'Could not claim the USB device') ***



Laite oli kuitenkin nähtävissä USB-väylän listauksissa:


20080520-photo% lsusb
Bus 003 Device 010: ID 04a9:30bb Canon, Inc. PowerShot A95
Bus 003 Device 001: ID 1d6b:0001
Bus 001 Device 001: ID 1d6b:0001
Bus 002 Device 001: ID 1d6b:0002


Lopulta löysin ohjeet mitä soveltamalla omaan kameraani sain kuvat siirtymään. Kyse on udev:n konfiguraatioista jotka eivät antaneet tarpeeksi oikeuksia laitteen kanssa kommunikoimiseksi.

lsusb:n outputista näkee kameran vendor ja device id:n 04a9:30bb. Tarvittiin tiedosto jota ei ollut olemassa (/etc/udev/rules.d/45-libgphoto2.rules) jonne syötettiin seuraavaa:


SYSFS{idVendor}=="04a9", SYSFS{idProduct}=="30bb", MODE="0660", GROUP="plugdev"



Tämän jälkeen sammuta kamera, irroita se koneesta ja suorita:


/etc/init.d/udev restart


Kamera päälle ja kiinni koneeseen, jonka jälkeen kaikki edellä mainitut ohjelmat toimivat kuten niiden odottaisi toimivan.