logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 02-02-2013 17:58:55

eliohann
Membre
Lieu : Montpellier
Distrib. : Debian SID
(G)UI : Gnome Shell
Inscription : 23-09-2012

[Tuto] Monter automatiquement un périphérique 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-u … 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

#chmod a+r /etc/fuse.conf


Puis on édite fuse.conf :

#gedit /etc/fuse.conf


Pour remplacer :

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


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 :

# groups utilisateur



Au besoin le rajouter :

# adduser utilisateur fuse


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

# 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



/!\ 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 :

#apt-get install -t experimental libmtp-dev libmtp9



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

# mkdir /media/Nexus7
# chmod 777 /media/Nexus7



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 :

$ lsusb


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

Bus 001 Device 024: ID 18d1:4e41 Google Inc.



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 :

 # udevadm monitor --environment --udev


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

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
...



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 :

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



Dont le contenu est le suivant :

# 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"



Remplacer yourlogin par votre nom d'utilisateur debian

Redémarrer le service udev :

# service udev restart




3) 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

DeviceFs(Nexus\0407)    /media/Nexus7    fuse.DeviceFs(Nexus\0407)    allow_other,rw,users,noauto    0    0



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

# mount


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

Dernière modification par eliohann (02-02-2013 18:42:25)

Hors ligne

#2 02-02-2013 21:09:36

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : [Tuto] Monter automatiquement un périphérique MTP

Tchâââ ! Merci eliohann, on va faire pour le mettre dans le wiki big_smile

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#3 04-02-2013 11:38:53

phlinux
Membre
Distrib. : Buster
Noyau : 5.10
(G)UI : Openbox (+Rox+Feh)
Inscription : 09-05-2009

Re : [Tuto] Monter automatiquement un périphérique MTP

eliohann a écrit :


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é.


Bjr,
A essayer un "su - user" (user ou yourlogin)


Pages perso : feh, omegat, udisks, passerelle, schroot vraiment transparent

Hors ligne

#4 19-04-2014 15:14:12

Slyfox
Membre
Inscription : 15-12-2013

Re : [Tuto] Monter automatiquement un périphérique MTP

Bonjour,

Petit problème... selon le premier poste.

Quand je fais :

go get github.com/hanwen/go-mtpfs



Le dossier /tmp/go est vide !!!

C'est quoi le problème docteur ???

smile Slyfox

Dernière modification par Slyfox (19-04-2014 15:14:55)

Hors ligne

#5 26-02-2016 16:30:01

giggetto
Membre
Inscription : 26-02-2016

Re : [Tuto] Monter automatiquement un périphérique MTP

Bonjour, je déterre un peu le sujet.
J'ai suivi le tuto, scrupuleusement je crois, mais je n'arrive pas à déterminer le DeviceFS : en faisant mount je n'ai aucune mention de mon Xiaomi Mi4.
Quelqu'un peut-il m'aider ?
Merci

Hors ligne

#6 26-02-2016 21:24:55

phlinux
Membre
Distrib. : Buster
Noyau : 5.10
(G)UI : Openbox (+Rox+Feh)
Inscription : 09-05-2009

Re : [Tuto] Monter automatiquement un périphérique MTP

Bjr,
As-tu bien vérifié qu'il se monte en mtp ?

Pages perso : feh, omegat, udisks, passerelle, schroot vraiment transparent

Hors ligne

Pied de page des forums