Wer als Besitzer einer Sony Cybershot DSC-WX350 auf die Idee kommt, die integrierte Wifi-Funktionalität unter Linux verwenden zu wollen, stößt auf einige properitäre Hindernisse, von denen man sich aber nicht beeindrucken lassen sollte.
Die Kamera bietet mit den Modi „an Smartphone senden“ entweder die Möglichkeit, selbst ein Wifi-Netz auszustrahlen, in das man sich einwählen kann, um von der Kamera Fotos zu laden, oder mit dem Modi „an PC senden“ die Möglichkeit, sich selbst in ein WLAN einzuwählen, sodass man vom PC aus per Kamera-IP Fotos herunterladen kann.
Sony hat in die Kamera integriert, dass zunächst die Sony Software der Kamera eine Mac-Adresse/GUID zuweisen muss, bevor Sie mit dieser Funktion glänzt. Das zeigt die Kamera auch an, wenn man ohne Konfiguration versucht, den Menüpunkt „an PC senden“ zu verwenden.
Als Linuxuser kommt diese Software für mich nicht in Frage. Zumal es etwas übertrieben ist, eine 700 MB Software für so einen Quatsch runterzuladen, die noch tonnenweise Overheat an Bord hat. Und wie gesagt, die Software existiert für vernünftige Linux-Betriebssysteme nicht. Ein schlauer Mensch hat aber eine passende Software in C geschrieben: https://github.com/falk0069/sony-pm-alt
Diese Software herunterladen, und mit dem Befehl
# gcc sony-guid-setter.c -lusb-1.0 -o sony-guid-setter
kompilen. Eventuell muss man zuvor noch per apt-get install libusb-1.0.0.dev
die benötigte Libusb-Dev installieren. Nun muss die Kamera per USB angeschlossen werden. Per lsusb
muss die GUID des Geräts ausgelesen werden und komischerweise genau diese GUID im Gerät gesetzt werden. Das geht mit unserem neuen Tool ganz einfach:
# ./sony-guid-setter -g 054c:08ae
Das Tool vermeldet dann einige Hardware Infos auf der Kommandozeile sowie die Info, dass die GUID gesetzt ist. Nun kann man die Kamera vom USB-Port entfernen. Jetzt in der Kamera dem Menüpunkt „an PC senden“ auswählen und siehe da, nun verbindet sich die Kamera mit dem zuvor eingerichteten WLAN und sucht einen PC namens linux
. Das liegt an der letzten Zeile Code im folgenden Auszug aus dem Quellcode unseres C-Programms:
// Z.289 f. // Mass Storage device to test bulk transfers (non destructive test) static int sony_guid_setter(libusb_device_handle *handle, uint8_t endpoint_in, uint8_t endpoint_out) { int r, size; uint8_t lun; uint32_t expected_tag; struct set_guid_bulk cmd = { .magic1 = SET_GUID_BULK_MAGIC1, .magic2 = SET_GUID_BULK_MAGIC2, // Some random GUIDs. Change them if they make you feel insecure .guid1 = { 0xff, 0xff, 0x52, 0x54, 0x00, 0xb6, 0xfd, 0xa9 }, .guid2 = { 0xff, 0xff, 0x52, 0x3c, 0x28, 0x07, 0xa9, 0x3a }, // On the first PTP/IP connect, the camera changes its // stored hostname to the hostname in the PTP/IP. Don't // bother changing that here. .name = { 'l', 0, 'i', 0, 'n', 0, 'u', 0, 'x', 0} }; // ...
Funktioniert also tadellos!
Damit die Sony Camera den Port freigibt, der zum Herunterladen der Bilder benötigt wird, muss noch ein properitäres Paket im Netzwerk per Broadcast herum geschickt werden. Da hat der Programmierer des Sony-Guid-Setters auch mit dran gedacht und ein passendes Python-Skript mitgeliefert, einfach ausführen per
# ./sony-pm-alt.py
Auf meinem aktuellen Debian 8 musste zuvor noch das Paket python-requests
installiert werden, eine Py-Lib die das Skript benötigt.
# apt-get install python-requests
Läuft nun das Paket kann man die Bilder über den Port 15740 abrufen.
Dazu eignet sich das Programm airnef, zu erhalten unter: http://www.testcams.com/airnef/ Das ist eigentlich für Nikon, leuft aber auch für einige Canons und für Sony eben auch, wenn man den GuidSetter und das Python-Skript wie beschrieben verwendet.
Man kann mit airnef quasi die beiden Menüpunkte „an Smartphone senden“ oder „an PC senden“ verwenden. Die GUI zeigt beim Start zwei große Buttons an, wobei Select in Camera das Pendant zu „an Smartphone senden“ und „Select on Computer“ das Pendant zu „an PC senden ist“. Man muss die IP-Adresse, die die Kamera im WLAN hat, für zweiteren Punkt wissen. Das einfach auf der Fritzbox nachsehen, Gerät nennt sich SonyImagingDevice
.
Nun geht's los: Select on Computer anklicken, IP-Adresse eingeben und dann startet die GUI per Klick auf den großen Button „Start Download“ das eigentliche Programm in der Kommandozeile.
airnef v1.1 - Wireless transfer of images/movies for Nikon cameras [GPL v3] Copyright (c) TestCams.com, Time: 04/29/17 02:30:38, Py: 2.7.9, OS: Linux Connection established to 192.168.178.28:15740 Camera Model "DSC-WX350", S/N "8081475003183663" Processed info for 4 files/dirs [0 from object cache, 0 previous] /home/rk/Bilder/airnefImport/DSC00020.JPG [size = 5,280,925] in 2.99 seconds (1.68 MB/s) 1 files downloaded in 2.99 seconds (Average Rate = 1.68 MB/s)
Have fun! Bemerkung: Ab dem 2. Mal braucht man die properitären Pakete nicht mehr und kann ganz einfach über das Programm airnef arbeiten. Root-Rechte sind dann auch nicht mehr erforderlich, also alles ganz komfortabel!
Lustiger Weise schaltet sich die Sony Kamera nach der Übertragung aus, das ist auch Sollverhalten lt. Bedienungsanleitung. Wirt irgenwie so, als manövriere sich die Firmware in irgend einen Zustand, aus dem sie nicht mehr rauskommt. Noch eine Bemerkung: Die Kamera verbindet sich nur zur Datenübertragung mit dem WLAN und ist sonst immer offline. Bei der WLAN-Konfig verbindet sie sich nur kurz, speichert den Zugang, und geht sofort wieder offline. Also nicht wundern. Danach dann eben lt. obigen Schritten vorgehen und die GUID setzen, dann gehts los.
Die Variante, sich mit der Kamera zu verbinden („an Smartphone senden“) und die Bilder dann von der IP 10.0.1.1 zu laden sollte auch gehen, habe ich aber nicht näher getestet, da ich es komfortabler finde wenn die Kamera ins bestehende Netz geht. Die Sony-Cam erstellt ein 10.0er Netz, die Nikons scheinbar ein 192.168er Netz. So kommen auch die Defaultwerte in airnef zustande. Einfach mal die IP Config anschauen, wenn man sich in das WLAN der Kamera eingewählt hat, da findet man die IPs, wenn man diesen Weg gehen will.
Wenn man die Kamera mit nmap scannt findet man drei offene Ports, rpcbind und so ein Zeug. Der Port zum Bilder übertragen wird von der Kamera nur geöffnet, wenn man obige Schritte durchführt, das ist der Trick. Sonst schweigt die Kamera und mit den immer offenen Ports kann man nix anfangen.
Falls die Links oben mal offline gehen, hier ein Spiegel-Link mit der Software: