Table des matières

Monter les périphériques (externes ou non) facilement

Introduction

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 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/fmount
#!/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/ :

/etc/polkit-1/localauthority/50-local.d/50-mount.pkla
[Mount a system-internal device]
Identity=*
Action=org.freedesktop.udisks.*
ResultAny=yes
ResultActive=yes
ResultInactive=yes

Au prochain chargement des règles1), tout ira bien \o/

1)
le reboot