photopc_titel.jpg

Einfach ausgelesen

photopc

01.09.2002 Für den Zugriff auf Bilder in Digitalkameras gibt es zahlreiche GUI-Tools, hier beschreiben wir eines für die Kommandozeile: photopc lässt sich auch gut zur Automatisierung in einem Skript verwenden.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen - wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Wenn Sie den Artikel "Abgebildet" auf Seite 37 in dieser Ausgabe gelesen haben, kennen Sie schon einige Tools für den Kamerazugriff. Mit den GUI-Tools lässt sich zwar komfortabel anhand der Voransicht eine Auswahl treffen, aber wenn Sie regelmäßig große Mengen von Bildern erstellen und im Rechner weiter verarbeiten wollen, brauchen Sie ein Tool, das sich auch in ein Shell-Skript einbauen lässt. Ein solches Tool ist photopc.

Installation aus den Sourcen

Auf der Heft-CD im Verzeichnis LinuxUser/photopc/ finden Sie die beiden Dateien photopc_3.05.tar.gz und photopc-3.05J23.tar.gz (USB-Unterstützung). Installieren Sie bitte nur eines der beiden Pakete - abhängig davon, ob Sie Ihre Kamera über USB anschließen oder nicht. Nach dem Mounten der CD führen Sie als Superuser root folgende Schritte aus:

asteroid:~# cd /usr/local/src/
asteroid:/usr/local/src# tar xzvf /cdrom/LinuxUser/photopc/photopcXY.tar.gz

Ein neues Verzeichnis photopcXY wird angelegt; wechseln Sie in dieses (cd photopcXY) und tippen ./configure. Als letzte Ausgaben erhalten Sie im Idealfall:

creating ./config.status
creating Makefile
creating config.h
config.h is unchanged
creating dos/version.h
dos/version.h is unchanged
creating win32/version.h
win32/version.h is unchanged

Anschließend installieren Sie das Programm im Zweierschritt:

asteroid:/usr/local/src/photopcXY# make
[…]
asteroid:/usr/local/src/photopcXY# make install
[…]

Ist alles ohne Fehlermeldung durchgelaufen, wurde das Programm nach /usr/local/bin installiert.

Vor dem Start

Die Kamera wird entweder über ein USB-Kabel an den USB-Port oder mit einem entsprechenden Kabel an die serielle Schnittstelle angeschlossen - das hängt von Ihrem PC und dem Kameramodell ab. Hängt die Digitalkamera an einer seriellen Schnittstelle, müssen Sie diese bei jedem Programmaufruf explizit mit dem Parameter -l (kleines "l" wie in "lustig") und dem Device-Namen ansprechen. Dies können Sie abkürzen, indem Sie einen symbolischen Linkauf das verwendete Device setzen (siehe auch Kasten 1). Ist die Kamera beispielsweise an den ersten seriellen Port angeschlossen, erzeugen Sie den Link als Superuser root mit dem Kommando:

asteroid:~# ln -s /dev/ttyS0 /dev/photopc

Als Superuser root können Sie nun problemlos mit dem Tool arbeiten. Dem "einfachen" Benutzer fehlen allerdings noch ein paar Rechte, damit das reibungslos klappt. Wie bereits angesprochen, zeigt der Symlink /dev/photopc auf die serielle Schnittstelle, an der die Kamera hängt. Um ohne root-Rechte mit der Kamera zu kommunizieren, muss der User auf das Device schreiben dürfen. Schauen Sie sich die Rechte der Schnittstelle mit dem Befehl ls -l an:

asteroid:~# ls -l /dev/ttyS0
crw-rw—-    1 root     dialout    4,  64 Jun 30 16:30 /dev/ttyS0

Das erste Zeichen steht für den Dateityp, hier ein "c" für "character device" - ein zeichenorientiertes Gerät. Das "r" bedeutet Leseerlaubnis ("read"), das "w" Schreibberechtigung ("write"), und an dritter Stelle kann ein "x" für die Erlaubnis, die Datei ausführen zu dürfen ("executable"), stehen. Die ersten drei Zeichen gehören zum Dateieigentümer, die nächsten drei zur Gruppe; die letzte Dreiergruppe steht für alle übrigen Benutzer des Systems. Für die erste serielle Schnittstelle gilt hier also: Sie darf gelesen und geschrieben werden von root (dem Dateieigentümer) und von allen Mitgliedern der Gruppe dialout, die von der Distribution Debian Woody für dieses Device angelegt wurde. (Sollte die Gruppe auf Ihrem System anders heißen, gelten alle weiteren Angaben entsprechend.) Um zu überprüfen, ob Sie in diese Gruppe eingetragen sind, verwenden Sie (unter Ihrer normalen Kennung) das Kommando groups:

huhn@asteroid:~$ groups
users cdrom floppy sudo audio video dos cdwrite

Soll der Benutzer huhn in die Gruppe dialout eingetragen werden, editieren Sie als Superuser root die Datei /etc/group. Suchen Sie dort nach der Gruppe dialout und fügen den gewünschten User hinzu. (Sollen es mehrere Benutzer sein, können diese durch Kommata getrennt aneinandergereiht werden.) Der Eintrag in /etc/group lautet also:

dialout:x:20:huhn

Sollten Sie Shadow-Passwörter für Gruppen verwenden (Datei /etc/gshadow), müssen Sie auch dort den Benutzer zur Gruppe hinzufügen:

dialout ::huhn

Anschließend können Sie, damit die Änderung greift, als normaler Benutzer auf der Kommandozeile newgrp dialout tippen. Alternativ wird die neue Gruppe ebenfalls aktiv, wenn Sie sich neu einloggen.

Kasten 1: Schnittstellen-Bezeichnung unter Linux

Betrachten Sie das Verzeichnis /dev, finden Sie hier eine Reihe von Einträgen, die auf den ersten Blick unübersichtlich wirken. Diese Device-Dateien werden von Linux benutzt, um mit den Hardware-Komponenten (z. B. Festplatten, Floppy-Laufwerke, Maus, Soundkarte etc.) zu kommunizieren. Das erste Zeichen lautet entweder b (für "block device", blockorientiert) oder c (für "character device", zeichenorientiert) und steht für den Typ des Zugriffs. Die wichtigsten Device-Namen sind:

*/dev/hd* - IDE-Laufwerke (Festplatten, CD-ROMs etc.)

  • /dev/lp* - parallele Schnittstellen (Drucker etc.)
  • /dev/sd* - SCSI-Laufwerke
  • /dev/scd* - SCSI-CD-ROM-Laufwerke
  • /dev/tty* - virtuelle Terminals
  • /dev/ttyS* - serielle Schnittstellen

Einige dieser Device-Einträge sind als Links realisiert, z. B. können der Eintrag /dev/cdrom auf /dev/hdc (ein CD-ROM-Laufwerk, das am zweiten IDE-Bus hängt) und /dev/mouse auf /dev/ttyS1 (die zweite serielle Schnittstelle) zeigen.

Das USB-Device-Dateisystem wird wie das /proc-Dateisystem dynamisch generiert und ist normalerweise unter /proc/bus/usb zu finden. Die Verzeichnisse der Form "00n" enthalten die Schnittstellen für die jeweils aktiven USB-Geräte. In den beiden Dateien devices und drivers finden Sie eine Übersicht über alle angeschlossenen Geräte und die Ihnen eventuell zugeordneten Treiber. Der Kernel ist dafür zuständig, diese Verzeichnisse zu erzeugen (sofern USB-Unterstützung vorhanden ist). Da die Informationen in /proc/bus/usb/devices recht unübersichtlich sind, wird gerne die X-Anwendung usbview verwendet, um sich einen Überblick über angeschlossene Geräte zu verschaffen.

Abhängig von der Distribution, die Sie verwenden, kann die Zusammenarbeit mit USB unterschiedlich aussehen. Möglicherweise reicht es bei einigen Systemen aus, die Kamera an die USB-Buchse zu hängen und einzuschalten. Sollte das nicht so reibungslos klappen, zeigen wir hier einen möglichen Weg, mit photopc via USB auf die Kamera zuzugreifen. Überprüfen Sie zunächst die Zugriffsrechte im Verzeichnis /proc/bus/usb. Schließen Sie die Kamera an den USB-Port an, schalten Sie sie ein und tippen:

asteroid:~# ls -l /proc/bus/usb/001
total 0
-rw-rw-r--   1 root   root   18 Jul 31 17:19  001
-rw-rw-r--   1 root   root   18 Jul 31 17:19  002

Als einfacher User darf offenbar nicht mit der Kamera kommuniziert werden, da die Geräte beide dem Benutzer und der Gruppe root "gehören". Es sind aber nur ein paar Handgriffe nötig, um das zu ändern. Wie auch bei den Anpassungen zur seriellen Schnittstelle, editieren Sie als Superuser root die Datei /etc/group. Fügen Sie in diese eine neue Gruppe usb ein. Die Nummern für die Systemgruppen werden in der Regel von 0 bis 99 vergeben. Ab Ziffer 100 folgen User-Gruppen - Ausnahmen können vorkommen. Suchen Sie eine freie Nummer für die neue Gruppe aus (auf dem Testsystem wurde z. B. die 51 gewählt) und tragen Sie sie zusammen mit Ihrer Benutzerkennung ein:

usb:x:51:huhn

Auch hier gilt: Wird auf dem System mit Shadow-Passwörtern gearbeitet, müssen Sie in /etc/gshadow hinzufügen:

usb ::huhn

Jetzt fehlt noch ein Eintrag in der Datei /etc/fstab:

none /proc/bus/usb usbdevfs auto,devmode=0664,devgid=51   0   0

Damit werden die Dateirechte für die USB-Devices so modifiziert, dass Angehörige der Gruppe 51, also usb, schreiben und lesen dürfen. Für den Programmaufruf selbst gibt es ebenfalls eine Möglichkeit abzukürzen. Normalerweise muss der Parameter -u explizit angegeben werden, um photopc zu verraten, dass es den Universal Serial Bus verwenden soll. Mit dem in die Bash eingebauten Kommando alias sparen Sie Tipparbeit: Tragen Sie in die Datei .bashrc ein:

alias photopc='photopc -u'

Lesen Sie die veränderte .bashrc mit dem Aufruf source ~/.bashrc neu ein - fertig.

Auf gute Zusammenarbeit!

Ist alles richtig konfiguriert, sollte der erste Kontakt zur Kamera kein Problem mehr sein:

huhn@asteroid:~$ photopc query
Found usb device id 0x100 by vendor 0x7b4
Found usb camera: Olympus Optical Co., Ltd. C-2100/C3000/C3040 Camera
Starting in folder "\DCIM\100OLYMP"
Resolution: 7 - SQ1-1280x960-Normal
Camera time: Wed Jul 31 22:22:19 2002 CEST
[…]

Zusammen mit dem Parameter -h liefert photopc eine komplette Übersicht über die verfügbaren Parameter und Kommandos. Damit die Ausgabe nicht einfach aus dem Fenster scrollt, hilft der Pager less beim Blättern:

huhn@asteroid:~$ photopc -h | less

Das Kommando count zählt die Bilder auf der Kamera; noch genauer geht's mit list:

huhn@asteroid:~$ photopc list
 No.     Size    R P       Date and Time                    Filename
[…]
 45  45  262400 83887040 - Mon Jul 29 23:24:43 2002 CEST P7292878.JPG
 46  46  276982 83887040 - Wed Jul 31 16:39:24 2002 CEST P7312879.JPG
 47  47  275218 83887040 - Wed Jul 31 18:41:30 2002 CEST P7312880.JPG

Die Dateinamen erscheinen hier etwas kryptisch - es sind die Kamera-internen Bezeichnungen für die Bilder. Beim Herunterladen verwendet photopc sein eigenes Format. Standardmäßig werden Bilder im Format "MMDD_NNN.jpg" (Monat, Tag und Nummer) auf der Festplatte abgelegt. Dieses erledigt der Befehl image:

huhn@asteroid:~$ photopc image 1 .
Found usb device id 0x100 by vendor 0x7b4
Found usb camera: Olympus Optical Co., Ltd. C-2100/C3000/C3040 Camera
Starting in folder "\DCIM\100OLYMP"
1: 279907 of 279907
taken Fri Jul 05 20:05:44 2002 CEST
file "./0705_001.jpg"

In diesem Fall wird das erste Bild der Kamera in das aktuelle Verzeichnis (abgekürzt durch einen Punkt, ".") herunter geladen. Sollen mehrere Bilder gespeichert werden, geben Sie den Bereich (z. B.photopc image 1-5 .) oder die einzelnen Bilder durch Kommata getrennt (z. B. photopc image 1,2,5 .) an. Praktisch ist auch das Kommando thumbnail - statt der vollständigen Bilder wird eine kleine Version angefertigt.

Alles automatisch

Die bisher vorgestellten Möglichkeiten bieten andere Programme natürlich auch. Das Besondere an Kommandozeilen-Tools ist aber, dass man sie auch problemlos in kleine Shell-Skripte einbinden kann. Damit können viele einzelne Schritte bequem zusammengefügt werden. Das Skript aus Listing 1 zeigt, wie interaktiv photopc arbeiten kann.

Listing 1

photopc-Skript

#!/bin/bash
# photopc-Aufruf definieren (hier für USB, seriell: "photopc")
PHOTOPC="photopc -u"
# Zielverzeichnis (wenn noch nicht vorh.) erstellen
echo "Geben Sie den Namen des Verzeichnis' an:"
read verz
mkdir -p $verz || exit 1
# Bilder zählen, verwendet wird die letzte Zeile der Ausgabe
anzahl=`$PHOTOPC count | tail -1`
echo "Es sind $anzahl Bilder auf der Kamera."
# wenn Listing gewünscht wird, Ausgabe in more pipen
echo "Möchten Sie eine Auflistung der Bilder?"
read antw
if [ $antw = "j" ]
then
  $PHOTOPC list | more || exit 1
fi
# Bildauswahl
echo "Welche Bilder möchten Sie herunterladen? (mögl. Eingaben z. B.: 1
oder 1-30 oder 1,2,10)"
read bereich
$PHOTOPC image $bereich $verz || exit 1
# Thumbnail-Auswahl
echo "Möchten Sie auch Thumbnails von den Bildern haben? (j/n)"
read antw
if [ $antw = "j" ]
then
  $PHOTOPC thumbnail $bereich $verz || exit 1
else
  echo "Keine Thumbnails gewünscht."
fi

Glossar

symbolischen Link

Ein Verweis auf eine andere Datei, der von Anwendungsprogrammen wie eben diese Datei behandelt wird. Wenn die Datei, auf die ein Symlink verweist, gelöscht wird, zeigt der Link ins Leere. Symlinks werden mit dem Kommando "ln -s" erzeugt.

Tip a friend    Druckansicht beenden Bookmark and Share
Kommentare