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.





