[Tuto] Montage auto d'un appareil MTP

Bonjour à tous,

Comme je l’avais dit, voilà le tuto pour pouvoir monter automatiquement les périphérique MTP (téléphone, tablette, lecteur MP3 etc…)

Je tiens à grandement remercié Nicolas Bernaerts, auteur du tuto suivant :
http://bernaerts.dyndns.org/linux/247-ubuntu-automount-nexus7-mtp
Qui m’a servi de base, et avec qui j’ai conversé par mail pour l’adapter à Debian.

Ce tuto a été testé avec succès sur 2 debian (gnome 3 et xfce) et 2 périphérique (Xperia S et Nexus 7).

1. Fuse et Go-mtpfs

Nous utiliserons fuse et go-mtpfs.
A noter que cela peut fonctionner aussi avec d’autres extensions de fuse, comme le classique mtpfs.
Pourquoi go-mtpfs dans ce cas ?
Principalement pour des raisons de performances et de stabilité par rapport à mtpfs.

1.1 Configuration de fuse

Puis on édite fuse.conf :

Pour remplacer :

[code]# Allow non-root users to specify the ‘allow_other’ or ‘allow_root’ mount options.

user_allow_other[/code]

par

# Allow non-root users to specify the 'allow_other' or 'allow_root' mount options. user_allow_other

Vérifier que chaque utilisateur devant monter le périphérique appartient bien au groupe Fuse :

Au besoin le rajouter :

1.2 Compiler et installer go-mtpfs
go-mtpfs utilise le compilateur go de Google, et est disponible sur le dépôt Git suivant : https://github.com/hanwen/go-mtpfs/
Comme ce compilateur est dans les dépôts, c’est assez simple.
Nous devons donc :

  • Installer GIT et le compilateur go
  • Créer un environnement temporaire de compilation
  • Récupérer et compiler go-mtpfs à partir de son dépôt GIT
  • Copier le binaire sous /usr/local/sbin

[code]# apt-get install libmtp-dev git golang

mkdir /tmp/go

export GOPATH=/tmp/go

go get github.com/hanwen/go-mtpfs

mv /tmp/go/bin/go-mtpfs /usr/local/sbin/go-mtpfs

chmod a+x /usr/local/sbin/go-mtpfs[/code]

/!\ Go-mtpfs est compilé avec la libmtp-dev installé sur votre environnement, elle même dépendante de la libmtp9.
Seule la version disponible dans le dépôt experimental est assez récente pour correctement identifié les modèles récents (comme la nexus 7).
Dans le cas d’un appareil ancien, la version de testing ou d’unstable devrait suffire.
Si nécessaire installer les 2 lib à partir d’experimental :

1.3 Créer le point de montage
Il nous faut un point de montage accessible par tous.

[code]# mkdir /media/Nexus7

chmod 777 /media/Nexus7[/code]

2. Udev rules

2.1 Déterminer le VENDOR_ID et PRODUCT_ID

Si vous voulez accéder à votre périphérique dans tout ses modes (Recovery, fastboot, mtp avec debug usb, mtp sans debug usb etc…), il vous faut le brancher en activant le mode voulu et lancer :

Ce qui vous donnera à chaque fois une ligne ressemblant à ça :

18d1 est le VENDOR_ID
et 4e41 le PRODUCT_ID.

Ici une nexus 7, en mode MTP sans debug USB.

2.2 Déterminer le ID_MODEL et le ID_MODEL_ID

Les règles udev permettant le montage et démontage auto doivent être basées sur ces 2 informations pour fonctionner.
Pour les identifier, lancer la commande suivante :

Puis brancher votre appareil, attendre quelques secondes et le débrancher.
Ce qui vous donnera une sortie comme celle-ci :

[code]monitor will print the received events for:
UDEV - the event which udev sends out after rule processing

UDEV [66298.131958] add /devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5.1 (usb)
ACTION=add
BUSNUM=001
DEVLINKS=/dev/libmtp-1-5.1
DEVNAME=/dev/bus/usb/001/053
DEVNUM=053
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5.1
DEVTYPE=usb_device
ID_BUS=usb
ID_MEDIA_PLAYER=1
ID_MODEL=Nexus
ID_MODEL_ENC=Nexus
ID_MODEL_ID=4e41
ID_MTP_DEVICE=1
ID_REVISION=9999

UDEV [61359.304558] remove /devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5.1 (usb)
ACTION=remove
BUSNUM=001
DEVLINKS=/dev/libmtp-1-5.1
DEVNAME=/dev/bus/usb/001/047
DEVNUM=047
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5.1
DEVTYPE=usb_device
ID_BUS=usb
ID_MEDIA_PLAYER=1
ID_MODEL=Nexus
ID_MODEL_ENC=Nexus
ID_MODEL_ID=4e41
ID_MTP_DEVICE=1
ID_REVISION=9999
…[/code]

Nous avons donc le ID_MODEL (Nexus) et le ID_MODEL_ID (4e41).

Attention à 2 choses :

  • Le ID_MODEL change en fonction de la version d’android installée (Nexus -> JB 4.1.2, Nexus_7 pour JB 4.2 et + pour la Nexus 7)
  • Le ID_MODEL_ID change en fonction du mode (4e41 pour MTP sans debug usb, 4e42 pour MPT avec debug usb, toujours pour la Nexus 7)
    Donc si vous règles se mettent subitement à ne plus marcher, vérifier que vous ayez toujours les bon ID_MODEL et ID_MODEL_ID dans votre règle udev.

2.3 Création de la règle udev

Maintenant que nous avons noté toutes les infos des 2 étapes précédentes, nous pouvons créer la règle :

Dont le contenu est le suivant :

[code]# Google Nexus 7 16 Gb Bootloader & recovery mode
SUBSYSTEM==“usb”, ATTR{idVendor}==“18d1”, ATTR{idProduct}==“4e40”, MODE=“0666” # Bootloader
SUBSYSTEM==“usb”, ATTR{idVendor}==“18d1”, ATTR{idProduct}==“d001”, MODE=“0666” # Recovery

Google Nexus 7 16 Gb PTP mode (camera)

SUBSYSTEM==“usb”, ATTR{idVendor}==“18d1”, ATTR{idProduct}==“4e43”, MODE=“0666” # PTP media
SUBSYSTEM==“usb”, ATTR{idVendor}==“18d1”, ATTR{idProduct}==“4e44”, MODE=“0666” # PTP media with USB debug on

Google Nexus 7 16 Gb MTP mode (multimedia device)

SUBSYSTEM==“usb”, ATTR{idVendor}==“18d1”, ATTR{idProduct}==“4e41”, MODE=“0666” # MTP media
SUBSYSTEM==“usb”, ATTR{idVendor}==“18d1”, ATTR{idProduct}==“4e42”, MODE=“0666” # MTP media with USB debug on

Google Nexus 7 MTP mode : automatic mount when plugged (all android versions)

ENV{ID_MODEL}==“Nexus”, ENV{ID_MODEL_ID}==“4e41”, ACTION==“add”, RUN+="/usr/bin/sudo -b -u yourlogin /usr/local/sbin/go-mtpfs -allow-other=true /media/Nexus7"
ENV{ID_MODEL}==“Nexus”, ENV{ID_MODEL_ID}==“4e42”, ACTION==“add”, RUN+="/usr/bin/sudo -b -u yourlogin /usr/local/sbin/go-mtpfs -allow-other=true /media/Nexus7"
ENV{ID_MODEL}==“Nexus_7”, ENV{ID_MODEL_ID}==“4e41”, ACTION==“add”, RUN+="/usr/bin/sudo -b -u yourlogin /usr/local/sbin/go-mtpfs -allow-other=true /media/Nexus7"
ENV{ID_MODEL}==“Nexus_7”, ENV{ID_MODEL_ID}==“4e42”, ACTION==“add”, RUN+="/usr/bin/sudo -b -u yourlogin /usr/local/sbin/go-mtpfs -allow-other=true /media/Nexus7"

Google Nexus 7 MTP mode : automatic unmount when unplugged (all android versions)

ENV{ID_MODEL}==“Nexus”, ENV{ID_MODEL_ID}==“4e41”, ACTION==“remove”, RUN+="/bin/umount /media/Nexus7"
ENV{ID_MODEL}==“Nexus”, ENV{ID_MODEL_ID}==“4e42”, ACTION==“remove”, RUN+="/bin/umount /media/Nexus7"
ENV{ID_MODEL}==“Nexus_7”, ENV{ID_MODEL_ID}==“4e41”, ACTION==“remove”, RUN+="/bin/umount /media/Nexus7"
ENV{ID_MODEL}==“Nexus_7”, ENV{ID_MODEL_ID}==“4e42”, ACTION==“remove”, RUN+="/bin/umount /media/Nexus7"[/code]

Remplacer yourlogin par votre nom d’utilisateur debian

Redémarrer le service udev :

  1. FSTAB

Ajouter l’entrée correspondante dans le fstab, pour 2 raisons :

  1. Ajouter un périphérique en haut à gauche de nautilus qui montera au branchement du périphérique
  2. Pouvoir éjecter le périphérique directement depuis nautilus et son bouton eject

le DeviceFs exact du périphérique est connu par la commande :

Lorsqu’il est branché :

# mount /dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) ... DeviceFs(Nexus 7) on /media/Nexus7 type fuse.DeviceFs(Nexus 7) (rw,nosuid,nodev,allow_other,user=yourlogin)
fstab ne supportant pas le caractère espace, nous l’avons échappé par \040.

Voilà pour un premier jet de ce tuto.
Il y a des choses à améliorer je pense, notamment le fait d’utiliser un “sudo” dans les règles udev, qui viens du tuto précité, pour Ubuntu à la base.
Donc il doit y avoir un moyen de se passer de sudo à cet endroit là, mais je n’ai à ce jour pas encore trouvé.

Dans l’absolu, j’imagine qu’il doit être possible de faire un daemon se chargeant de tout ça automatiquement au branchement d’un périphérique mtp, mais je suis loin d’être assez calé pour le faire, si quelqu’un est motivé :wink:

Salut,

Ce que je sais de MTP :

Oui je sais, c’est une technologie Microsoft donc prioritaire mais Tout les appareil android l’utilise (ce qui est bien dommage) donc ça peut servir

Salut,

Non, mon propos n’était pas de critiquer l’utilisation d’une technologie Microsoft, mais de l’utilisation de sigles peu courants sans au moins une fois leur traduction.

Bonjour,

J’aurais aimé utiliser ce tuto, mais la commande go ne fonctionne pas sur ma Wheezy (go : commande introuvable)… :frowning:

Salut,

[quote=“felvic”]Bonjour,

J’aurais aimé utiliser ce tuto, mais la commande go ne fonctionne pas sur ma Wheezy (go : commande introuvable)… :frowning:[/quote]

[quote=“eliohann”]

~ # apt-get install libmtp-dev git golang[/quote]

?

Ok merci j’avais pas vu. :blush:

De toute façon j’ai suivi le tuto et ça ne marche pas chez moi. ( quand je fais “mount”, je n’ai pas de device)

Faut dire qu’il y a tellement de paramètres à entrer… :119

Bonjour,

Débutant sur Debian, je suis resté bloqué après la phase.

gedit /etc/udev/rules.d/99-android.rules

Après avoir créé un répertoire Android dans mon home, je parviens à me loguer, , en utilisant les commandes suivantes:

$ sudo -b -u mylogin /usr/local/sbin/go-mtpfs ~/Android

et

$ sudo fusermount -u ~/Android

Merci pour votre procédure

Merci pour le tuto.

Pour une alternative graphique il y a: gmtp, qui est très simple d’utilisation.

Il a besoin des droits root pour bien fonctionner, en utilisateur normal, il connecte pas l’appareil, donc à lancer via root ou essayer une méthode pour donner les droits a l’utilisateur.

(Parfois il prend du temps pour connecter, parfois (trop longtemps ou) il connecte pas (comme s’il était en mode attente), faut un peu jouer en fermant le logiciel/brancher-débrancher le câble usb voir reboot appareil.)

Bonjour, je me dit, mais peut etre ai je tord, que si gmtp fonctionne (c’est le cas chez moi) directement, cela veut dire que le device est monte non ?

Pas besoin de tout refaire le tuto ?

En fait je voudrais y avoir acces en ligne de commande pour coller une routine de synchronisation lorsque je le branche.
Comment savoir ce que fais exactement gmtp ?

Bonjour à tous,

Merci eliohann pour ce tuto qui m’a aidé dans mes recherches.

J’ai un Motorola MOTO G (le modèle 16Go avec mise à jour Android 4.4.2 et cela fonctionne avec ces règles udev dans mon cas. Je n’ai pas encore poussé les recherches, je voulais juste de quoi accéder au /sdcard pour transférer depuis mon zte blade mes données de ma carte SD vers mon MOTO G.

/etc/udev/rules.d/98-motog.rules

# MOTO G 16Go MTP mode (multimedia device) SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e82", MODE="0666" # MTP media ENV{ID_MODEL}=="XT1032", ENV{ID_MODEL_ID}=="2e82", ACTION=="add", RUN+="/usr/bin/sudo -b -u utilisateur /usr/local/sbin/go-mtpfs -allow-other=true /media/motog" ENV{ID_MODEL}=="XT1032", ENV{ID_MODEL_ID}=="2e82", ACTION=="remove", RUN+="/bin/umount /media/motog"

Juste une remarque sur le point de montage. Je conseille plutôt ceci que le chmod 777 (ne devrait jamais être utilisé pour moi :079 ) :

mkdir /media/Nexus7 chgrp fuse /media/Nexus7 chmod g+w /media/Nexus7
Pour ma part, pas besoin d’éditer /etc/fstab, le périphérique s’affiche bien dans mon gnome. Je suis sous Debian Wheezy (7.1)

Vraiment dommage que l’on doit passer par une émulation d’un protocole windows pour mettre des fichiers sur son android… Mais bon…

Bon weekend

EDIT : Pour pouvoir démonter en temps qu’utilisateur via le bouton EJECT de Gnome il faut ajouter une entrée dans /etc/fstab par contre.

Dans mon cas un mount donne ceci :

Et donc la ligne à rajouter dans /etc/fstab est la suivante :

Bonjour,
A la maison je suis connecté derrière ma SFR box donc le wifi est possible.
J’installe uniquement le logiciel gratuit Airdroid sur le smartphone /tablette et la connexion se fait simplement via le navigateur du PC.

:handgestures-thumbup:

Sinon, montage MTP de façon non automatique (enfin il suffit de se faire un script shell puis créer un raccourci vers son bureau préféré) mais beaucoup plus simple :

[mono]apt-get install jmtpfs[/mono]

(si votre utilisateur standard n’est pas déjà dans le groupe “fuse”
[mono]usermod -a -G fuse username[/mono]
(il faudra se déco/se reconnecter)

Maintenant brancher son appareil Android via cable usb, puis en utilisateur standard :

[mono]mkdir -p ~/Android_transfer[/mono]
[mono]jmtpfs Android_transfer/[/mono]

et voilà, vos fichiers sont accessibles dans le dossier Android_transfer :stuck_out_tongue:

Pour démonter proprement :

[mono]fusermount -u ~/Android_transfer[/mono]

[quote=“grandtoubab”]Bonjour,
A la maison je suis connecté derrière ma SFR box donc le wifi est possible.
J’installe uniquement le logiciel gratuit Airdroid sur le smartphone /tablette et la connexion se fait simplement via le navigateur du PC.

:handgestures-thumbup:[/quote]

Ne fonctionne pas sous Debian : Win ou Mac, donc tuto inutile ici

[quote=“agentsteel”]Sinon, montage MTP de façon non automatique (enfin il suffit de se faire un script shell puis créer un raccourci vers son bureau préféré) mais beaucoup plus simple :

[mono]apt-get install jmtpfs[/mono]

(si votre utilisateur standard n’est pas déjà dans le groupe “fuse”
[mono]usermod -a -G fuse username[/mono]
(il faudra se déco/se reconnecter)

Maintenant brancher son appareil Android via cable usb, puis en utilisateur standard :

[mono]mkdir -p ~/Android_transfer[/mono]
[mono]jmtpfs Android_transfer/[/mono]

Ne fonctionne pas avec les android récents. il ne trouve pas la tablette.

et voilà, vos fichiers sont accessibles dans le dossier Android_transfer :stuck_out_tongue:

Pour démonter proprement :

[mono]fusermount -u ~/Android_transfer[/mono][/quote]