Dernière mise à jour : Debian 10.4
Le protocole "MTP" (Media Transfer Protocol) est conçu pour l'accès USB aux périphériques multimédia mobiles tels que téléphones et tablettes. Il équipe les versions récentes d'Android
MTP est une extension du protocole PTP (Picture Transfer Protocol) conçu pour le transfert d'images des appareils photographiques.
Sommaire
Les protocoles MTP et PTP sont pris en compte par un premier niveau d'interface, fourni par les libraires libmtp9 et libphoto2. Un niveau supplémentaire est nécessaire pour reconstituer un accès "arborescent" et direct aux fichiers.
Connecter le périphérique sur un port USB du PC et le déverrouiller. Observer les notifications affichées sur son écran :
Si le périphérique n'a qu'un mode disponible, celui-ci va généralement s'afficher. Sur les appareils anciens, il peut s'agir du protocole UMS (USB Memory Transfer) qui donne directement accès à la mémoire du périphérique. Dans ce cas, le périphérique peut-être monté comme une mémoire externe amovible (type clé usb) standard.
Si plusieurs modes sont disponibles, un écran de sélection va généralement s'afficher et permet de sélectionner le mode MTP ou PTP.
Le périphérique étant connecté au PC dans le mode souhaité, on peut vérifier qu'il est correctement reconnu par udev. Dans ce qui suit on prend pour exemple un téléphone Samsung Galaxy GT-I9300. Ce téléphone dispose de deux modes (PTP et MTP) sélectionnables depuis l'écran du périphérique.
Lorsque le mode MTP est sélectionné sur le périphérique, l'identifiant produit détecté par udev est 6880 :
$ sudo dmesg |tail
-----
[23754.242069] usb 2-2: new high-speed USB device number 59 using xhci_hcd
[23754.427027] usb 2-2: New USB device found, idVendor=04e8, idProduct=6860
[23754.427035] usb 2-2: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[23754.427039] usb 2-2: Product: Android
[23754.427042] usb 2-2: Manufacturer: Samsung
[23754.427045] usb 2-2: SerialNumber: 479008850e9b904
Lorsque le mode PTP est sélectionné, l'identifiant produit est 6885
$ sudo dmesg |tail
-----
[23257.049870] usb 2-2: new high-speed USB device number 60 using xhci_hcd
[23257.235258] usb 2-2: New USB device found, idVendor=04e8, idProduct=6865
[23257.235266] usb 2-2: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[23257.235269] usb 2-2: Product: Android
[23257.235272] usb 2-2: Manufacturer: Samsung
[23257.235275] usb 2-2: SerialNumber: 479008850e9b904c
A partir des identifiants de fabricant (idVendor) et de produit (idProduct), on peut vérifier les modes avec la commande lssub
Le mode correspondant au code produit 6860 est bien le mode MTP
$ lsusb -d 04e8:6860
Bus 002 Device 059: ID 04e8:6860 Samsung Electronics Co., Ltd Galaxy (MTP)
Le mode correspondant au code produit 6885 est bien le mode PTP
$ lsusb -d 04e8:6865
Bus 002 Device 060: ID 04e8:6865 Samsung Electronics Co., Ltd GT-I9300 Phone [Galaxy S III] (PTP mode)
A noter que pour le même appareil (même numéro de série), le numéro de produit est différent selon le mode choisi et qu'il est également différent selon que le mode debug ou d'autres modes sont sélectionnés. Dans les exemples ci-dessous, le mode debug n'était pas activé.
Si le périphérique est très récent et n'est pas identifié, il peut être nécessaire de mettre à jour le fichier /var/lib/usbutils/usb.ids.
On peut tenter de trouver les informations sur le site web: www.linux-usb.org et d'ajouter les informations dans le fichie usb.ids, tout en sachant que la modification sera perdue lors de la prochaine mise à jour du fichier
Éditer le fichier usb.ids :
$ sudo nano /var/lib/usbutils/usb.ids
et y ajouter un périphérique sur le modèle ci-dessous :
# Wileyfox swift
2970 Wileyfox
2281 Swift - MTP mode
2284 Swift - PTP mode
Les identifiants de produit doivent être précédés d'une tabulation. Séparer par deux espaces les identifiants numériques et les descriptifs littéraux.
$ sudo aptitude install usbutils -t testing
Installer le paquet jmtfs, qui installera la librairie libmtp9 et le système de fichier fuse et leurs dépendances s'ils ne sont pas déjà présents.
$ sudo aptitude install jmtpfs
Note : si gvfs-backends est installé, le périphérique sera pris en compte par les deux dispositifs, il est préférable de n'en garder qu'un pour éviter les interférences.
Connecter le périphérique dans le mode MTP et vérifier qu'il est reconnu par libmtp9, via jmtpfs :
Si la réponse est du type :
$ jmtpfs -l Unable to open ~/.mtpz-data for reading, MTPZ disabled.
Device 0 (VID=2970 and PID=2281) is UNKNOWN.
Please report this VID/PID and the device model to the libmtp development team Available devices (busLocation, devNum, productId, vendorId, product, vendor)
2, 5, 0x2281, 0x2970, UNKNOWN, UNKNOWN
le périphérique n'est pas reconnu, l'interface ne fonctionnera pas. Essayer une version plus récente de libmtp9, par exemple, la version backports, ou testing.
Si la réponse est du type :
$ jmtpfs -l
Device 0 (VID=2970 and PID=2281) is UNKNOWN in libmtp v1.1.10.
Please report this VID/PID and the device model to the libmtp development team
Available devices (busLocation, devNum, productId, vendorId, product, vendor):
2, 3, 0x2281, 0x2970, UNKNOWN, UNKNOWN
le périphérique recevra une désignation par défaut, mais l'interface fonctionnera correctement. Une version plus récente de libmtp9 peut également permettre de résoudre le problème.
En l'absence d'erreur la réponse est du type :
$ jmtpfs -l
Device 0 (VID=2970 and PID=2281) is a Wileyfox Swift.
Available devices (busLocation, devNum, productId, vendorId, product, vendor):
2, 13, 0x2281, 0x2970, Swift, Wileyfox
# debian backport
deb http://htpredir.debian.org/ debian/ jessie-backports main
puis mettre à jour le cache apt, et installer libmtp9 et la dépendance libmtp-runtime depuis la version backports
$ sudo aptitude update && aptitude install -t jessie-backports libmtp9 libmtp-runtime
Pour installer la version testing de libmtp9 sur une version debian stable, ajouter dans les sources d'apt, une ligne du type :
# debian testing
deb http://httpredir.debian.org/debian/ testing main
puis définir une priorité basse pour testing, inférieure à celle des dépôts stable et de backports, afin de ne pas provoquer le basculement du système en "testing". Pour cela créer un fichier /etc/apt/preferences.d/testing :
$ sudo nano /etc/apt/preferences.d/testing
contenant :
Package: *
Pin: release a=testing
Pin-Priority: 10
Puis mettre à jour le cache et installer libmtp9 et ses dépendances, dans la version testing :
$ sudo aptitude update && aptitude install -t testing libmtp9 libmtp-runtime
Créer un point de montage, par exemple /media/nom_utilisateur/android, propriété de l'utilisateur
$ sudo cd /media/nom_utilisateur
$ sudo mkdir android
$ sudo chown nom_utilisateur:nom_utilisateur android
Autoriser l'utilisateur à utiliser fuse :
Dans /etc/fuse.conf, dé-commenter la ligne " #user_allow_other ", comme ci-dessous
$ cat /etc/fuse.conf
# /etc/fuse.conf - Configuration file for Filesystem in Userspace (FUSE)
# Set the maximum number of FUSE mounts allowed to non-root users.
# The default is 1000.
#mount_max = 1000
# Allow non-root users to specify the allow_other or allow_root mount options.
# décommenter la ligne suivante pour pouvoir monter en tant qu'utilisateur
user_allow_other
Connecter le périphérique, le mettre en mode mtp, puis monter le système de fichier, en tant qu'utilisateur :
$ cd /media/nom_utilisateur/
$ jmtpfs android
Device 0 (VID=2970 and PID=2281) is a Wileyfox Swift.
Android device detected, assigning default bug flags
Le contenu autorisé du périphérique est désormais accessible.
$ ls -la android
Carte SD ScanDisk
Pour démonter le système de fichier :
$ fusermount -u android
Vérifier que le périphérique est pris en compte par libmtp (si cela n'a pas été fait à l'étape précédente)
$ sudo aptitude install mtp-tools
$ mtp-detect |head
Device 0 (VID=04e8 and PID=6860) is a Samsung Galaxy models (MTP).
libmtp version: 1.1.13
Listing raw device(s)
Found 1 device(s):
Samsung: Galaxy models (MTP) (04e8:6860) @ bus 1, dev 40
Attempting to connect device(s)
Android device detected, assigning default bug flags
USB low-level info:
bcdUSB: 512
bDeviceClass: 0
Installer gvfs-backends, gvfs-fuse
$ sudo aptitude install gvfs-backends gvfs-fuse
Le périphérique apparaît dans Thunar
Double cliquer sur le périphérique pour le monter et afficher l'arborescence.
Note : A chaque nouvelle connexion usb, il peut-être nécessaire d'autoriser l'accès au niveau du périphérique
Il est également possible d'utiliser gvfs en ligne de commande :
Connecter le périphérique en mode mtp et noter ses identifiants (vendeur et modèle)
$ sudo dmesg |tail
[28564.723875] usb 1-2: USB disconnect, device number 41
[28564.725621] cdc_acm 1-2:1.1: failed to set dtr/rts
[28564.729104] xhci_hcd 0000:04:00.0: WARN Set TR Deq Ptr cmd failed due to incorrect slot or ep state.
[28565.154643] usb 1-2: new high-speed USB device number 42 using xhci_hcd
[28565.371201] usb 1-2: New USB device found, idVendor=04e8, idProduct=6860
[28565.371208] usb 1-2: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[28565.371212] usb 1-2: Product: Android
[28565.371217] usb 1-2: Manufacturer: Samsung
[28565.371221] usb 1-2: SerialNumber: 479008850e9b904c
[28565.373948] cdc_acm 1-2:1.1: ttyACM0: USB ACM device
Relever le numéro du bus et de périphérique
$ lsusb -d 04e8:6860
Bus 001 Device 042: ID 04e8:6860 Samsung Electronics Co., Ltd Galaxy (MTP)
$ gvfs-mount mtp://[usb:001,042]/
Pour accéder à l'arborescence
$ ls /run/user/1000/gvfs/mtp\:host\=%5Busb%3A001%2C042%5D/
Carte SD
Pour démonter le périphérique
$ gvfs-mount -u mtp://[usb:001,042]/