ACHTUNG:
bitte vorher auf die Übersichtsseite zum Thema iPhone & Linux schauen, ob es evtl einen neueren Artikel zu diesem Thema gibt!
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:
sudo ldconfigAusserdem muss man sich selbst in die FUSE-Gruppe stecken:
sudo adduser $USER fuse
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:
fusermount -u ~/iPhone
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
apt-get install 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!
32 Kommentare zum Artikel
Humburger
17.4.2009 um 21:35Demnach heisst es nur noch warten auf die Entschlüsslung der iTunes-DB? Coole Sache, dem nimmt sich (oder hat schon) eh schnell jemand an. Ist jemand eigentlich das Projekt OpeniBoot ein Begriff? Das find ich auch extrem spannend, was die da schaffen.
Apropos iPhone – Kennst du dich mit dem Wartungszustand aus?
Ich habe das Dilemma Linux – iPhone mit einer Virtuellen XP-Maschine grösstenteils ja gelöst, aber letzthin musste ich mein iPhone wieder auf Werkeinstellungen zurücksetzen und seitdem krieg ichs in der Virtualbox nicht mehr aus dem Wartungszustand raus. Virtualbox erkennt das iPhone im Recovery-Mode zwar als USB-Gerät und gibt das auch an die XP-Machine weiter, aber dann beim wiederherstellen selbst hauts das ganze immer wieder raus. An den USB-Ports kanns nicht liegen, hab da alle durchprobiert, und auch mit anderen iPhone-USB-Kabel hab ichs probiert, aber scheint irgendwie an der Virtualisierung liegen…Hast du früher nicht auch mit einer virtuellen XP-Maschine synchronisiert? Hattest du da nie das Problem mit dem Wartungszustand?
ThreeM
18.4.2009 um 19:26Hmm ich find die Schritt für Schritt anleitung bisschen verwirrend. Ich scheitere bereits beim versuch libplist zu kompilieren. was für Optionen muss ich cmake mitgeben? Ich erstelle im libplist verzeichnis ein “build” verzeichniss, wechsle dahin und gebe “cmake /pfad/zu/den/Sourcen” an. Ein anschließendes make findet aber kein makefile. cmake wirft die fehlermeldungen aus:
CMake Error at CMakeLists.txt:12 (SET_TARGET_PROPERTIES):
set_target_properties called with incorrect number of arguments.
CMake Error at CMakeLists.txt:13 (SET_TARGET_PROPERTIES):
set_target_properties called with incorrect number of arguments.
CMake Error at CMakeLists.txt:15 (INSTALL):
install TARGETS given no LIBRARY DESTINATION for shared library target
“plist”.
CMake Warning (dev) in CMakeLists.txt:
No cmake_minimum_required command is present. A line of code such as
cmake_minimum_required(VERSION 2.6)
Wie kann ich das umgehen? Was mach ich falsch?
ThreeM
18.4.2009 um 19:38Hat sich erledigt
*peinlich berührt guck* …. cmake .. funktioniert besser als den Pfad zu den sourcen mitzugeben
Jan
18.4.2009 um 20:03@Humburger
Hab gerade den Artikel geupdatet, und habe selber beim Wiederherstellen keine Probleme gehabt! Ich benutze die neuste Version von Virtualbox mit Ubuntu Jaunty. Alles problemlos.
@ThreeN
ich habe doch extra “cmake ..” geschrieben
Aber gut, dass es nun bei dir Funktioniert!
ThreeM
18.4.2009 um 20:27@Jan ich hatte cmake … (also als usw. gelesen)
Das Kopieren der Tracks funktioniert wohl NICHT mit dem iPod Touch 2generation. Habe die DV VErsion auf 2 geändert gemäß deiner Anleitung. GTKPod findet den iPod und Tracks. Nach dem Hinzufügen sieht der iPod die Tracks aber nichtmehr… Schade, also noch ein wenig gedulden. BTW: Ich habe als Modell sowohl den iPod Touch Probiert als auch das iPhone. Keines der beiden Funktioniert, trotz Jailbreak und geänderter DB… schade schade schokolade… Also doch noch etwas mit iTunes abquälen….
ThreeM
18.4.2009 um 20:29UPDATE:
… ich vermute mal das der Player nur die neue DB Version verwenden kann….
Die Tracks sind weiterhn auf dem iPod vorhanden, allerdings findet der iPod diese selbst nichtmehr, gtkpod oder Exaile spielt diese aber ab
Jan
18.4.2009 um 20:35Mal den iPod bzw. das iPhone neugestartet? Eihentlich sollte es klappen!
david
18.4.2009 um 22:33sudo lsusb -v -d 05ac: | grep iSerial | awk ‘{print $3}’ | cut -b1-16 | xargs printf “FirewireGuid: 0x%s\n” > SysInfo
gibt folgenden Fehler bash: SysInfo: Input/output error
Ich benutz Ipod touch 1g ! muss ich was anders machen?
Jan
18.4.2009 um 22:42@david
Eigentlich nicht. Du musst dich im Ordner /media/iPhone/iTunes_Control/Device befinden. Ansonsten habe ich leider keine Ahnung warum es nicht funktioniert
david
18.4.2009 um 23:23Ich hab die Ordner mit mkdir erstellt
und komme auch mit cd in die Ordner.
Aber in Nautilus seh ich die Ordner nicht iTunes_Control
Dort befindet sich nur
DCIM
Downloads
Photos
Podcasts
Purchases
ROMs
com.apple.itunes.lock_sync
Unter Windows mit winscp find ich komischerweiße auch itunes_Control
Jan
18.4.2009 um 23:48sorry, da bin ich leider echt ratlos… Kommst du denn als Root über die Konsole in den Ordner?
david
19.4.2009 um 02:10ja über konsole komm ich in die ordner
in /media/iPhone/iTunes_Control/Device
liegt eine SysInfo
Mit folgendem hinhalt:
FirewireGuid: 0xba7b5f2a8f5a93c8n
Christian Imhorst
19.4.2009 um 09:12Hallo Jan,
vielen Dank für dir tolle Anleitung. Ich habe meine Musik ja mit Amarok auf mein gejailbreaktes iPhone überspielt und sie befindet sich dort im Ordner “/var/mobile/Media/iTunes_Control/Music” und dort in den Unterordner F00 bis F13. Die Titel der Stücke heißen dann “kpod01234567.mp3″ usf. Das Verzeichnis /var/root/Media ist bei mir übrigens leer.
Und dann noch die Frage, warum man sein iPhone denn nicht jailbraken sollte? Das iPhone macht doch erst nach dem Jailbreak mit den ganzen Programmen aus Cydia so richtig Spaß.
Viele Grüße,
Christian
ThreeM
19.4.2009 um 10:51@Jan: Jo habe ich. Ipod Touch 2gen nachdem DBVersion geändert wurde neu gestartet. Sobald die DBVersion auf 2 steht und GTKPOD die DB schreibt (und das auch richitg, die DB sieht jedenfalls so sauber aus das andere Programme ohne Probleme diese einlesen können) kann der iPod selbst nichtmehr auf die DB Zugreifen und meldet Stumpf: Keine Musik
Jan
19.4.2009 um 11:04@David dann ist eigetlich alles OK soweit. Die Firewire Guid wurde geschrieben. Versuch doch einfach mal Musik zu syncen… natürlich wie immer “ohne Gewähr!”
@ThreeM mit Neustart meinte ich, nachdem die Musik auf den iPod synchronisiert wurde. nicht nachdem die DB Version geändert wurde. Alternativ zum Neustart reicht meist auch ein Neustart der Musik Applikation. Dazu iPod-Programm öffnen und dann den Homebutton solange gedrückt halten, bis du wieder im Springboard bist. (so ca. 10 Sekunden), und dann wieder starten et voila, die Musik ist (hoffentlich) da
@Christian Bitte, gern geschehen
(Aber feste am Daumen drücken, dass die DB Version 4 geknackt wird! Weil dann brauch man auch für Musik keinen Jailbreak mehr…)
Tja, warum sollte man sein iPhone nicht jailbreaken? Längeres Thema, zu dem ich wahrscheinlich nen ganzen post machen könnte. Zum einen gibt es kein Programm welches ich aus Cydia unbedingt brauche, ok, notifications, also die Anzeige neuer mails oben, sind schon nett, aber nicht esssentiell. Natürlich ist SSH ganz Nett um seine Musik mit Amarok zu syncen. (Wobei ich es im Moment wieder mit iTunes mache, da mein Jaunty im Moment KDE-frei ist…) Auf der anderen Seite steht Programme wie Byline und Skype, welche mit Jailbreak einfach regelmäßig abstürzen, bzw. ihren Dienst versagen. Auch lief mein iPhone mit Jailbreak einfach insgesamt instabiler.
Deshalb aktuell kein Jailbreak
ThreeM
19.4.2009 um 11:24@Jan
auch das habe ich Probiert. Leider ohne Erfolg. Normalerweise benutzen doch iPhone und iPod Touch die selbe ispw oder nicht?
Jan
19.4.2009 um 11:29@ThreeM nein, sie haben unterschiedliche, auch wenn sich die Firmware nicht groß unterscheidet.
ThreeM
19.4.2009 um 11:34@Jan: So hab nochmal den iPod wiederhergestellt und nur Jailbreak durchgeführt + ssh installiert. Saubere also sprich leere DB auf Version 2 geändert, und ipod unter Linux gemounted. Nachdem ich mit GTKpod die Tracks übertragen hab, den iPod mal neugestartet. Selbes Ergebniss. GTKPod und Exaile können die DB lesen und Tracks bspielen vom iPod.. der iPod selbst aber nicht. Scheinbar setzt der Musicplayer auf dem iPod DB in Version 4 vorraus. Apple ich liebe deine restriktive Politik :/ Wäre das Device nur net so verdammt gut…
Jan
19.4.2009 um 11:37@ThreeM Tja, das Gerät ist aber auch geil
Es würde mich allerdings sehr wundern, wenn sich der Musikplayer des iPhones anders verhalten würde als der des iPhones. Hast du denn das Ganze schonmal über SSH versucht? Also mit meiner ersten Anleitung?
ThreeM
19.4.2009 um 13:48@Jan… SSH Sync klappte bis version 2.1 ganz gut. Mit der 2.2.1, also der aktuellen Firmware geht auch das nicht… Angesichts des schönen Wetters werde ich mich damit aber an einem REgentag nochmal genauer beschäftigen. Btw. sehr schöner Blog .)
Jan
19.4.2009 um 15:26also ich hab mein iPhone nun heute doch mal wieder schnell geknackt und kann mit gtkpod Musik übetragen über USB *freu*
Was allerdings nicht funktioniert, ist die Musikübertragung mit Amarok oder Exaile. Diese Programme können zwar lesen und abspielen, aber nicht drauf kopieren… bin auch gerade etwas ratlos warum… muss ich mir nochmal genauer anschauen. Ich glaube das über ssh mit iPod Convenience ein anderes Ordnerschema angelegt wird, und zwar das eines ipods, nicht das eines iPhone, ist aber nur ne Vermutung.
@ThreeM vielen Dank! Und ein schönes sonniges Restwochenende
Christian Imhorst
21.4.2009 um 22:14Hallo,
funktioniert bei mir auch alles super, nur unter Jaunty hatte ich ein Problem mit libtool. Die Software-Pakete libiphone und ifuse hatten libtool 2.2.4 dabei während Jaunty schon Version 2.2.6 benutzt. Sollte beim Kompilieren also folgende Fehlermeldung erscheinen,
einfach die neuere libtool in das aktuelle Verzeichnis kopieren:
Danach sollte das Kompilieren reibungslos klappen.
Viele Grüße,
Christian
ThreeM
26.4.2009 um 22:43Ich habe nun seit mehrern Tagen auf dem iPod Touch die “Homebrew” Software Pwnplayer getestet. Funktioniert Super, ohne iTunes DB. Einfach Musik auf den Player kopieren, das Verzeichnis in den pwnplayer einstellungen einpflegen, fertig. Damit erhält man einen Player der keine besondere Software mehr benötigt.
eshat
12.5.2009 um 10:33Vielen Dank für die ausführliche Kompilierungs-Doku, hat alles super geklappt.
Mich würde interessieren, wie man das ganze nun mit amarok nutzt, denn ich habe das gleiche Problem wie Jan.
Musik kann gelesen und abgespielt werden, doch sobald ich etwas auf das iphone übertrage, erhalte ich die Meldung, dass die ipod-Datenbank nicht geschrieben werden konnte.
Ich nutze kde 4.2.3 und somit amarok 1.4.?
Viele Grüße
Eshat
Jan
12.5.2009 um 10:51@eshat Wie gesagt, mit Amarok geht es aktuell noch nicht, wenn man es über USB mounted. Über USB funktioniert momentan nur gtkpod. Möchte man gerne Amarok benutzen ist man auf das Programm iPod-convenience angewiesen, welches den Mount über SSH macht.
bytebandit
14.5.2009 um 15:03Hallo Jan,
Erstmal schöne Anleitungen also beide, die für SSH und USB.
So habe viel getestet und leider ohne erfolg:
Habe folgende Programme getestet:
ATunes (keine erfolg konnte es nicht mounten)
Banchee (kein erfolg konnte es nicht mounten)
Amarok (Geht)
Gtkpod (Geht)
Was mir sehr wichtig ist sind die Covers, das diese mit übertragen werden.
Also mit Amarok und GTKpod geht das mit den Covers auch aber nur über SSH, nur das dauert ja ewig lange.
Bei Amarok muss man dann nur einmal um Labeln auf und neu Speichern, dann sind Covers übertragen.
Was ich nicht hin bekomme ist die übertragung der Covers mit USB Verbindung, warum weiß ich nicht.
Was ich bemerkt habe:
Wenn ich die MP3 mit Covers rüber kopiere findet gtkpod auch die Covers, habe sie auch schon mit Album Cover Art Download in den Tag kopiert. Wenn diese übertragen werden findet man diese auch auf dem Iphone also wenn man auch Iphone in Gtkpod geht sieht man unten links die Covers.
Wenn man nun im Iphone den Ipod startet und diesen per Homebutton (10sek.) neu startet findet der Ipod diese auch.
Nur sobald mann ihn aushängt und neu startet sind die Covers weg und werden nur in der Albumliste angezeigt aber nicht mehr da wenn man das Lied aufruft.
Wenn man nun das Iphone wieder mountet und in gtkpod einbindet findet er nur schwarze Covers.
Was mache ich falsch, momentan bin ich wieder auf itunes umgestiegen.
Jan
14.5.2009 um 22:07@bytebandit
Das Problem mit den Covern habe ich leider auch über USB. über SSH klappt es problemlos. Und leider habe ich noch keine Lösung dafür. Falls du was raus findest, bitte her damit
bytebandit
15.5.2009 um 20:18Hallo,
Also bin wirklich am verzweifeln, warum das nicht geht.
Nur über SSH dauert das viel viel zu lange.
Weiß nur wenn man per USB die Daten per gtkpod drauf macht und das Iphone am Rechner lässt die Covers da sind.
Warum ?
bytebandit
18.5.2009 um 03:02http://ivkin.net/2009/04/synching-iphone-over-usb-under-ubuntu/comment-page-1/
Stefan Gebel
29.7.2009 um 15:24Also ich hab kein iPhone – aber seit zwei Wochen einen iPod touch. Gabs quasi gratis zum neuen iMac meiner Frau dazu.
Ich habe für mich jetzt folgende Lösung gefunden um Dokumente auf den iPod zu bekommen. Mir kam es weniger auf Musik an, dafür darf ich den Mac meiner Frau nutzen, sondern eher so Sachen wie PDF-Dokumente, Präsentationen usw. Die Lösung liegt im AppStore von Apple begraben und nennt sich “files light”. Das Programm stellt 200 MB in Form eines Containers auf dem iPod bereit und kann über einen beliebigen Rechner übers WLAN und WebDAV angesprochen werden.
Sollten die 200 MB nicht reichen, besteht immer noch die Möglichkeit die Vollversion zu erwerben.
raMine
23.9.2009 um 17:12Hi!
hat sich mitlerweile was neues ergeben?
vg
raMine
Jan
25.9.2009 um 23:19Ja hat es, ich werd versuchen da am WE was zu zu schreiben! Auch in Bezug auf OS 3.
Trackbacks: