Und wieder einen Schritt weiter auf dem Weg zur perfekten iPhone Unterstützung unter Linux. Bislang brauchte man ein geknacktes iPhone um auf das Gerät zugreifen zu können. Ausserdem war dies nur über WLAN möglich. Diese Hürde ist nun genommen, man braucht keinen JailBreak mehr und WLAN entfällt zugunsten des USB-Kabels. Nunja, dies ist zumindest fast richtig. Möchte man Musik auf das Gerät bekommen, so ist ein JailBreak (noch) unerlässlich. Dazu aber später mehr.
Vor einiger Zeit wurde ich in den Kommentaren zu Amarock rockt das iPhone – Musik synchronisieren ohne iTunes auf das Projekt iFuse aufmerksam. Das Projekt hat sich zum Ziel gesetzt das iPhone über USB zugänglich zu machen, und nutzt dabei das native AFC-Protokoll von Apple. Mehr darüber kann man auf der Website nachlesen.
Im Netz gibt es ein paar rumgeisternde deb-Pakete dafür, doch so richtig funktionieren wollen diese nicht. Also fix den Source Code aus dem git-Repository geladen und los geht’s. Da das Ganze ein zwei Kniffe beinhaltet, werde ich im Folgenden eine Schritt-für-Schritt Anleitung geben.
Um das Ganze zum Laufen zu bewegen braucht man drei verschiedene Programme, bzw. Bibliotheken: libplist, libiphone und ifuse. Alle drei kann man sich aus den Entwickler Repositories ziehen.
UPDATE: Es gibt nun fertige Repositorys für einige Distributionen, unter anderem auch für Ubuntu. Damit sind Schritt 1 bis 4 überflüssig.
Schritt 1: libplist
libplist is a library which allows access to binary plists which Apple uses in several of its products.
Sourcen besorgen:
git clone git://github.com/JonathanBeck/libplist.git
Softwarevoraussetzungen:
apt-get install build-essential cmake libglib2.0-dev libxml2-dev swig
ausserdem werden noch ein paar Python Development Sachen benötigt, wobei ich leider nicht mehr weiß, welche das waren
(Aus dem Gedächtniss würde ich sagen python2.6-dev…)
Kompilieren und installieren:
#im Verzeichniss, in das die Sourcen geladen wurden, zum Beispiel ~/libplist,
#wenn die Sourcen ins Homeverzeichniss geladen wurden.
mkdir build
cd build
cmake ..
make
sudo make install
Schritt 2: libiphone
Sourcen besorgen:
git clone git://github.com/MattColyer/libiphone.git
Softwarevoraussetzungen:
apt-get install build-essential automake autoconf libtool libgnutls-dev libusb-dev libfuse-dev libglib2.0-dev libxml2-dev libreadline5-dev
Achtung:
Bei dem von mir genutzen git-Snapshot gibt es einen Bug, welcher das Kompilieren verhindert. Es fehlt die Datei plist.i. Diese ist aber im Paket libplist enthalten und kann deswegen hier genommen werden. Also einfach kopieren: (ich gehe davon aus, dass die Sourcen im Home liegen, ansonsten muss der Befehl natürlich angepasst werden.)
mkdir ~/libiphone/swig/plist
mkdir ~/libiphone/swig/plist/swig
cp ~/libplist/swig/plist.i ~/libiphone/swig/plist/swig/
Kompilieren und installieren:
#im Verzeichniss, in das die Sourcen geladen wurden,
#zum Beispiel ~/libiphone, wenn die Sourcen ins Homeverzeichniss geladen wurden.
./autogen.sh
./configure
make
sudo make install
Schritt 3: ifuse
Sourcen besorgen:
git clone git://github.com/MattColyer/ifuse.git
Softwarevoraussetzungen:
apt-get install build-essential automake autoconf libfuse-dev libglib2.0-dev
Kompilieren und installieren:
#im Verzeichniss, in das die Sourcen geladen wurden, zum Beispiel ~/ifuse,
#wenn die Sourcen ins Homeverzeichniss geladen wurden.
./autogen.sh
./configure
make
sudo make install
Schritt 4: Abschließende Arbeiten
Nun müssen die neuen Bibliotheken noch registriert werden, das geht mit einem beherzten:
Ausserdem muss man sich selbst in die FUSE-Gruppe stecken:
Schritt 5: Mounten
Nun kommt der lang ersehnte Teil, wir mounten das ungeknackte iPhone über USB!
sudo mkdir /media/iPhone
sudo mount -t fuse.ifuse irgendwas /media/iPhone
Bei <irgendwas> kann man, *g* irgendwas angeben. Es wird zum Beispiel in der mtab angegeben, also sollte man etwas “sinnvolles” nehmen. Ich habe dort zum Beispiel /dev/iPhone stehen.
Wirft man nun einen Blick nach /media/iPhone, so sieht man den Inhalt des /var/root/Media Verzeichnisses seines iPhones.
———-
2. UPDATE:
Das iPhone kann auch als normaler User gemountet werden:
mkdir ~/iPhone
mount.fuse.ifuse irgendwas ~/iPhone
Unmounten:
hat man ein gejailbreaktes iPhone, so kann man auch das Rootfs mounten:
mount.fuse.ifuse --root irgendwas ~/iPhone
———-
Und nun? Wie geht’s weiter?
Der Zugriff funktioniert, wir sind soweit erstmal glücklich. Nächster Schritt: Schauen, ob wir die Musik sehen.
Öffnet man nun gtkpod
so wird man gefragt, welches Gerät unter /media/iPhone gemountet ist. Man wählt iPhone aus der Liste aus und klickt auf OK. Tadaa, nun sollte man Musik und Podcasts sehen, welche sich auf dem iPhone befinden und diese auch abspielen können.
Und zwar ohne Jailbreak und mit USB-Kabel!
Wie anfangs schon erwähnt, hat die ganze Geschichte aber einen Haken. Man kann Musik auf das iPhone problemlos kopieren, allerdings kann die iTunes Datenbank nicht geschrieben werden. Besser gesagt, sie wird zwar geschrieben, aber falsch, und das iPhone zeigt keine Musik mehr an.
———-
UPDATE: ACHTUNG!
Wird die Datenbank durch gtkpod geschrieben, so ist leider nicht nur die Musik nicht mehr vom iPhone zu lesen, sondern iTunes will beim nächsten Sync das iPhone wiederherstellen, da es “korrupt” ist. Eine andere Möglichkeit gibt es nicht! Also am besten Finger weg von der DB, solange man sie nicht per Jailbreak auf Version 2 umgestellt hat! Musste es leider gestern Abend selber schmerzlich feststellen
———-
Die Problematik kann hier unter Schritt 6 nachgelesen werden. Auch habe ich dort geschrieben wie man dies Problem umgeht, so dass es trotzdem funktioniert. Dafür ist allerdings ein Jailbreak Vorraussetzung! Und gerade den wollten wir ja nicht
Entschließt man sich für einen Jailbreak und die USB-Verbindung, und hat wie oben beschrieben die Datenbank geändert, so muss man noch die Firewire ID anlegen:
#iPhone muss gemountet sein
mkdir /media/iPhone/iTunes_Control/Device
cd /media/iPhone/iTunes_Control/Device
sudo lsusb -v -d 05ac: | grep iSerial | awk '{print $3}' | cut -b1-16 | xargs printf "FirewireGuid: 0x%s\n" > SysInfo
Nun muss das iPhone neugestartet werden.
Allerdings hätte man mit einem Jailbreak immerhin den Komfort der USB-Verbindung, man muss nicht ewig Lange über WLAN die Musik übetragen und zuschauen wie der Akku schwindet. Ein Lichtblick gibt es allerdings: Im Ticketsystem von libgpod (die Bibliothek, die sich um den Zugriff auf die iTunes DB kümmert) hat jemand eine Information gepostet, mit welcher eventuell der neue Hash-Algorhythmus der iTunes DB geknackt wäre. Da ich mich damit aber leider kein Stück auskenne, ist dies nur ein Hinweis.
Momentan ist also das einzige Problem, die noch nicht geknackte iTunes DB der Firmware 2 der iPhones. Sobald dieses Geheimniss gelüftet ist, ist ein voller Zugriff auf den Musik-Teil des iPhones ohne JailBreak und via USB-Kabel möglich!