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 :
Où 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 :
- FSTAB
Ajouter l’entrée correspondante dans le fstab, pour 2 raisons :
- Ajouter un périphérique en haut à gauche de nautilus qui montera au branchement du périphérique
- 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é