====== Monter les périphériques (externes ou non) facilement ======
* Objet : Un script permettant de monter les périphériques externes comme avec pmount, mais en se reposant sur udisks/udisks2.
* Niveau requis : {{tag>avisé}}
* Commentaires : //Pour les gens qui n'aiment pas utiliser l'interface graphique pour monter leurs périphériques. //
===== Introduction =====
* Monter les périphériques externes automatiquement, c'est mal.
* Passer root pour monter les périphériques externes, c'est mal.
* Utiliser le fstab pour monter les périphériques externes, ne tiens la route que s'ils sont utilisés comme une extension des supports de stockage internes, ce qui n'est en général pas le cas.
* Utiliser la ligne de commande pour monter un périphérique externe, c'est bien, mais utiliser pmount offre deux inconvénient.
* D'abord, cela installe un nouveau fichier setgid sur le système, donc une nouvelle faille de sécurité potentielle
* Ensuite, le paquet risque d'être délaissé car le travail est fait par udisks/udisks2 dans les système modernes.
* La syntaxe de udisksctl (udisks2) est un peu lourde pour la resaisir à chaque fois (''udisksctl mount -b''), et demande l'emplacement exact du fichier de périphérique (ex. ''/dev/sdf1''.)
===== Installation =====
Attention, pensez bien à désactiver le montage automatique avant d'utiliser ce script, sans quoi il risque de se révéler relativement inconfortable.
Voir [[:doc:environnements:gnome:gnome3.4|Comment désactiver l'automount sous Gnome3.4#modifier-montage-auto]]
Copier le fichier suivant dans votre répertoire ''~/bin/'', à créer s'il n'existe pas.
#!/bin/sh
usage()
{
echo "Utilisation :
$0 [-u] [[/dev/]device | [/dev/disk/by-uuid/]uuid | [/dev/mapper/]uuid]
Monte un système de fichier dans un sous-répertoire de /media via udisks ou
udisks2.
Si aucun périphérique n'est donné, fmount tente de deviner le dernier périphérique inséré.
Option de l'application :
-u Démonte le système de fichier
-h Affiche ce message d'aide"
}
finddev()
{
DEV=$1
if (echo $DEV | grep -q '^/dev/') && [ -e $DEV ]
then
echo $DEV
fi
if [ -e "/dev/disk/by-uuid/$DEV" ]
then
echo "/dev/disk/by-uuid/"$(echo $DEV | sed 's/.*/\L&/')
fi
if [ -e "/dev/$DEV" ]
then
echo "/dev/$DEV"
fi
if [ -e "/dev/mapper/$DEV" ]
then
echo "/dev/mapper/$DEV"
fi
}
wrapper()
{
ACTION=$1
DEVICE=$2
case $ACTION in
"mount")
if [ -e /usr/bin/udisksctl ]
then
udisksctl mount -b $DEVICE
else
udisks --mount $DEVICE
fi
return $?
;;
"umount")
if [ -e /usr/bin/udisksctl ]
then
udisksctl unmount -b $DEVICE
else
udisks --unmount $DEVICE
fi
return $?
;;
*)
echo "Action invalide"
return 1
;;
esac
}
guesslast()
{
LOG=$(dmesg| tail -n 50 | grep 'Attached scsi generic' -A 11 | tail -n 12)
PARTS=$(echo $LOG | grep "sd.: sd.")
if [ "$PARTS" = "" ]
then
DEV=$(echo $LOG | sed '/\[sd/s/.*\[\(sd[^\]]*\)\].*/\1/')
else
DEV=$(echo $PARTS | sed '/sd.:/s/.*sd.: \(sd[^ ]*\).*/\1/')
fi
echo $DEV
}
ACTION="mount"
if [ $# -ne 0 ] && [ $1 = "-u" ]
then
ACTION="umount"
shift
fi
if [ $# -ne 0 ] && [ $1 = "-h" ]
then
usage
exit 0
fi
if [ $# -ne 1 ]
then
DEV=$(guesslast)
else
DEV=$1
fi
DEV=$(finddev $DEV)
if [ -z "$DEV" ]
then
echo "Impossible de trouver le périphérique $DEV."
exit 1
fi
wrapper $ACTION $DEV
exit $?
Rendez ce fichier exécutable :
chmod +x ~/bin/fmount
Si le dossier bin n'existait pas, indiquez au shell qu'il est dans le PATH :
PATH="$HOME/bin:$PATH"
===== Utilisation =====
Utilisation :
fmount [-u] [[/dev/]device | [/dev/disk/by-uuid/]uuid | [/dev/mapper/]uuid]
Monte un système de fichier dans un sous-répertoire de /media via udisks ou
udisks2.
Si aucun périphérique n'est donné, fmount tente de deviner le dernier périphérique inséré.
Option de l'application :
-u Démonte le système de fichier
-h Affiche ce message d'aide
==== Par l'exemple ====
Si des disques occupent sda sdb sdc sdd sde, taper pour le nouveau disque à monter :
fmount sdf1
Pour démonter le même :
fmount -u sdf1
Et voilà ! :-D
===== Problèmes rencontrés =====
==== Montage via ssh =====
Udisks utilise policy-kit et son système de session actives. Par défaut, seul l'utilisateur de la session active (affichée à l'écran) peut utiliser udisks. La conséquence directe est qu'un utilisateur se connectant par ssh ne peut pas monter les disques externes.
Une solution est de changer la politique de montage en copiant le fichier suivant dans le dossier ''/etc/polkit-1/localauthority/50-local.d/'' :
[Mount a system-internal device]
Identity=*
Action=org.freedesktop.udisks.*
ResultAny=yes
ResultActive=yes
ResultInactive=yes
Au prochain chargement des règles((le reboot)), tout ira bien \o/