URL: https://linuxfr.org/users/rom1v/journaux/android-4-et-mtp-sous-gnu-linux Title: Android 4 et MTP sous GNU/Linux Authors: ®om Date: 2012年05月27日T19:35:12+02:00 License: CC By-SA Tags: android, mtp, debian et hadopi Score: 23 Bonjour Nal, C'est la première fois que je t'écris, avec l'espoir que tu pourras m'aider. Je viens de faire l'acquisition d'un téléphone _Samsung Galaxy Nexus_ avec Android 4, et je souhaiterais échanger des fichiers (dans les deux sens) entre mon téléphone et mon ordinateur (une utilisation très peu courante donc) sous _Debian Sid_. Comme vous le savez peut-être, Android 4 ne propose plus de connexion [USB Mass Storage](http://fr.wikipedia.org/wiki/USB_Mass_Storage) (qui permettait au téléphone d'être monté comme une clé USB quelconque), si j'ai bien compris à cause de l'[impossibilité](http://www.omgubuntu.co.uk/2011/12/how-to-connect-your-android-ice-cream-sandwich-phone-to-ubuntu-for-file-access/) de monter le système de fichiers sur deux systèmes différents (celui du téléphone et celui du pc) simultanément. C'est le [MTP](http://fr.wikipedia.org/wiki/Media_Transfer_Protocol) qui le remplace (à ne pas confondre avec les [Mesures Techniques de Protection](http://www.hadopi.fr/hadopi-pro/presentation-hadopi-pro) – attention, site dangereux !). Pour parvenir à échanger des fichiers (ce que je faisais simplement et sans problème sous Android 2.1), je vois trois solutions. **(1)** Utiliser `adb` (l'outil fourni avec le SDK Android, orienté développeur) et ses commandes `push` et `pull` : adb push monfichier.png /mnt/sdcard/monfichier.png **(2)** Utiliser les outils du paquet [mtp-tools](http://packages.debian.org/sid/mtp-tools), notamment `mtp-sendfile` et `mtp-getfile` : mtp-sendfile monfichier.png monfichier.png **(3)** Monter le système de fichiers du téléphone dans un répertoire grâce à [`mtpfs`](http://packages.debian.org/sid/mtpfs) : mkdir /tmp/mtp mtpfs /tmp/mtp _(ça m'a permis de remarquer que "mtp" était un anagramme de "tmp", mais tout le monde s'en fout)_ Il faut exécuter cette commande lorsque le téléphone est déverrouillé. La méthode **(1)** fonctionne parfaitement, mais elle n'est pas très pratique. La méthode **(2)**, pas plus pratique, semble aussi fonctionner : j'ai bien le fichier dans `/mnt/sdcard`... Mais certains fichiers (parfois sans extension) copiés de cette manière apparaissent dans "Mémoire de stockage interne" (avec `mtpfs`, voir méthode **(3)**), mais pas dans le résultat de : adb shell ls /mnt/sdcard Du coup le fichier était peut-être stocké autre part... je ne sais pas où (je n'ai pas fouillé). Mais les problèmes sont encore plus importants avec `mtpfs` **(3)** (pourtant la méthode qui semble la plus pratique au quotidien) : rom@rom-laptop:~$ cd /tmp/mtp rom@rom-laptop:/tmp/mtp$ ls Mémoire de stockage interne Playlists rom@rom-laptop:/tmp/mtp$ cd 'Mémoire de stockage interne' rom@rom-laptop:/tmp/mtp/Mémoire de stockage interne$ ls Alarms Android DCIM Download Movies Music Notifications Pictures Podcasts Ringtones rom@rom-laptop:/tmp/mtp/Mémoire de stockage interne$ echo test> test rom@rom-laptop:/tmp/mtp/Mémoire de stockage interne$ ls Alarms Android DCIM Download Movies Music Notifications Pictures Podcasts Ringtones rom@rom-laptop:/tmp/mtp/Mémoire de stockage interne$ cat test cat: test: Aucun fichier ou dossier de ce type Je n'y ai accès qu'en lecture, je ne peux pas écrire dessus. C'est d'autant plus bizarre que `mtp-sendfile` y parvient. Pourtant, il est bien monté en `rw` : $ mount | grep ^mtpfs mtpfs on /tmp/mtp type fuse.mtpfs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000) J'ai lu ici et là ("ici et là" est une expression, ne cherchez pas à cliquer sur "ici" ou sur "là") qu'il fallait utiliser la commande : mtpfs -o allow_other /tmp/mtp après avoir décommenté dans `/etc/fuse.conf` la ligne : user_allow_other (et redémarré `fuse`, voire le pc). Mais ça ne change rien. De plus, au bout de quelques dizaines de secondes d'utilisation, ça ne fonctionne plus : rom@rom-laptop:/tmp/mtp/Mémoire de stockage interne$ ls ls: impossible d'ouvrir le répertoire .: Noeud final de transport n'est pas connecté Il faut alors démonter : fusermount -u /tmp/mtp puis remonter : mtpfs /tmp/mtp **Conclusion négative :** quand vous avez une technologie qui fonctionne correctement (Mass Storage), passez à une autre sans garder la possibilité de continuer à utiliser celle qui fonctionne... **Conclusion positive :** je suis sûr que de nombreux lecteurs de _linuxfr_ ont une solution très simple à partager, et je les en remercie par avance. _**PS :** je crois qu'il est bien vu de suivre des règles non-écrites stupides pour faire semblant de s'intégrer à une communauté, alors voilà une [Nimage](https://lh6.googleusercontent.com/-wI1UAv1GOkU/T6AhqKhXeSI/AAAAAAAAB0Y/uX5Uj1nrfc4/s455/watermark%20%281%29.jpg") de pirates..._

AltStyle によって変換されたページ (->オリジナル) /