La plupart des tutoriaux qu'on trouve en fouillant nous parlent des differents packages à installer pour faire reconnaitre l'iPhone sous Linux mais il y a un détail pourtant très important qui manque systématiquement. En effet contrairement à pas mal d'applications récentes Amarok utilise encore l'ancêtre de la detection matérielle: HAL (Hardware Abstraction Layer). Or quand on suit les tutoriaux, on va ajouter le PPA qui va bien puis installer les packages dans leur dernière version et notament libimobiledevice1 qui est pour simplifier la librarie de detection et de prise en charge des iPhones/iPods. Et c'est là le soucis; cette version récente a complétement passé à l'as la detection HAL du matos. Pour bien s'en persuader il suffit de lancer Amarok avec l'affichage des messages de debuggage:

amarok --debug

Puis en branchant l'iPhone, on voit s'afficher des lignes qui ressemblent à ça:

amarok: (MediaDeviceCache) Found new Solid device with udi =
  "/org/freedesktop/Hal/devices/usb_device_5ac_1297_596371b2203ea228c9e0dfbb408e468ca3fe18dd_if1"
amarok: (MediaDeviceCache) Device name is =  "USB Vendor Specific Interface"  and was made by  "" 
amarok: (MediaDeviceCache) udi "/org/freedesktop/Hal/devices/usb_device_5ac_1297_596371b2203ea228c9e0dfbb408e468ca3fe18dd_if1"
  does not describe a portable media player or storage volume

C'est correctement la lose... La solution est en fait de réinstaller l'ancienne version de la librairie libimobiledevice qui elle contient un FDI pour HAL.

Donc, étape par étape en partant du début il faut faire les choses suivantes:

  • Lancez votre package manager préféré et ajoutez la source suivante:
ppa:pmcenery/ppa
sudo aptitude update && sudo aptitude install usbmuxd ifuse libgpod4 libimobiledevice1 libimobiledevice0

Maintenant si vous avez un iPhone jusqu'à 3GS, ça devrait être bon. Pour les iPhone 4 il reste une dernière feinte; comme l'ancienne version de libimobiledevice est, ben, ancienne, la politique HAL qu'elle contient n'est pas prévue pour detecter un iPhone 4 à la base. En fait elle ne détecte que les produits Apple dont l'identifiant est entre 0x1290 et 0x1294 (c'est à dire d'iPhone première génération à 3GS). Sauf que perso j'ai un iPhone 4 de prolo dont l'ID est 0x1297.... Pour vérifier, vous pouvez essayer cette commande:

lsusb -v | grep idProduit | grep 0x129

Si le dernier chiffre (ou lettre) n'est pas entre 0 et 4 inclus il vous reste une étape, éditer la politique HAL:

FDI=`dpkg -L libimobiledevice0 | grep "\.fdi"`; cat $FDI | sed 's/0x1294/0x1297/' | sudo tee $FDI > /dev/null

Et youpla boum! Oui bon j'avoue c'est un peu velu comme commande. L'autre solution serait d'ouvrir le fichier /usr/share/hal/fdi/information/20thirdparty/31-apple-mobile-device.fdi avec votre editeur de texte de prédilection en tant que root et de changer 0x1294 en 0x1297 mais c'est vachement moins classe! Bref après tout ça il reste à recréer le cache FDI pour s'assurer que HAL prenne bien en compte la nouvelle politique et normalement ça devrait être bon:

sudo /usr/lib/hal/hald-generate-fdi-cache

Relancez Amarok avec les messages de débuggage, branchez l'iPhone et...

amarok: (MediaDeviceCache) Found new Solid device with udi =
  "/org/freedesktop/Hal/devices/usb_device_5ac_1297_596371b2203ea228c9e0dfbb408e468ca3fe18dd_if1" 
amarok: (MediaDeviceCache) Device name is =  "USB Vendor Specific Interface"  and was made by  "" 
amarok: (MediaDeviceCache) udi "/org/freedesktop/Hal/devices/usb_device_5ac_1297_596371b2203ea228c9e0dfbb408e468ca3fe18dd_if1"
  is AFC cabable (Apple mobile device)

On en pleurerait presque tellement c'est beau \o/