Comment puis-je déclencher un montage automatique à partir de la ligne de commande? Par "automount", je ne parle pas de montage entièrement automatique, mais d’obtenir une liste des périphériques disponibles, puis en sélectionnant un et l’ayant comme résultat /media/{user}/{diskid}
. Cette fonctionnalité est fournie par Nautilus ou Thunar par exemple, mais je n'arrive pas à trouver un outil de ligne de commande pour déclencher ce type de montage semi-automatique.
pmount
est le plus proche que j'ai trouvé, mais semble fonctionner par des mécanismes complètement différents dessous et fait en sorte que les périphériques apparaissent sous la forme /media/sdf
ou quelque chose du genre.
gio mount
gvfs est maintenant classé comme obsolète (2018) et il est conseillé d'utiliser 'gio', qui est Gnome In Out et fait partie de Glib. Voir Wikipedia .
Par exemple, pour monter automatiquement une deuxième partition de lecteur; créez un script bash avec une autorisation exécutable à exécuter au démarrage à l'aide de la commande suivante:
gio mount -d /dev/sda2
Si vous êtes propriétaire de la partition (voir chown
name__), vous n’avez pas besoin de Sudo.
Pour monter un fichier ISO situé par exemple sur ~/ISOs
:
gio mount "archive://file%3A%2F%2F%2Fhome%2Fpablo%2FISOs%2Fubuntu-18.04-desktop-AMD64.iso"
Vous pourriez RL encoder le chemin avec Python 3 et realpath
(à concaténer à archive://
:
python -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1], \"\"))" "file://$(realpath ubuntu-18.04-desktop-AMD64.iso)"
Cela montera sur /run/user/$(id -u)/gvfs/
.
Autrement, gnome-disk-image-mounter
sera monté sur /media/$USER/
.
Pour démonter, utilisez gio mount -u /run/user/$(id -u)/gvfs/archive*
(ou /media/$USER/
, en fonction de la manière dont vous avez monté).
udisksctl
name__Liste des appareils disponibles:
udisksctl status
Le montage se fait via:
udisksctl mount -b /dev/sdf
ou
udisksctl mount -p block_devices/sdf
Le démontage se fait via:
udisksctl unmount -b /dev/sdf
ou
udisksctl unmount -p block_devices/sdf
Le object-path
peut être découvert en faisant:
udisksctl dump
Les objets de type org.freedesktop.UDisks2.Block
semblent être valides en tant que object-patch
, le préfixe /org/freedesktop/UDisks2/
doit être coupé du chemin pour que udisksctl les accepte.
gvfs-mount
La liste des appareils disponibles peut être faite avec:
gvfs-mount --list
Les monter peut être fait avec:
gvfs-mount -d /dev/sdf
Le démontage est possible via:
gvfs-mount --unmount /media/user/01234567890
Un problème qui reste est que je ne sais pas comment utiliser la sortie gvfs-mount --list
dans une commande de montage, car --list
ne montrera pas les noms de périphérique en bloc et si vous essayez d'utiliser les noms de périphérique qu'il imprime dans un montage, vous obtiendrez:
Error mounting location: volume doesn't implement mount
Alors que gvfs-mount
et udisksctl
fonctionneront pour les tâches, leur interface est peu pratique car ils ne fournissent pas un statut lisible par l'homme des disques disponibles, mais un vidage d'informations trop détaillé.
Vous pouvez utiliser:
udisksctl mount -b nom de l'appareil
où device_name
est le nom d'un périphérique de stockage et doit ressembler à /dev/sdb1
.
Avec la commande lsblk
ou Sudo fdisk -l
, vous pouvez trouver tous les périphériques de stockage connectés à votre système.
Une solution simple qui fonctionne comme vous le souhaitez (monte sur/media/{utilisateur}/{diskid}), sauf qu'elle ne peut pas répertorier les périphériques, mais qu'il faut lui attribuer l'étiquette de volume exacte et sensible à la casse en tant qu'argument $ 1
à monter:
DEVICE=$(findfs LABEL=$1) && udisksctl mount -b $DEVICE
à démonter:
DEVICE=$(findfs LABEL=$1) && udisksctl unmount -b $DEVICE
J'ai juste rencontré le problème moi-même et trouvé la solution suivante:
udisksctl mount -b /dev/disk/by-labels/$LABEL
Il vous demandera le mot de passe de l'utilisateur, même si c'est vous et que vous êtes déjà connecté.
J'ai écrit ce script Bash pour contourner ce problème, mais sachez que je suis un débutant en matière de script. Toutes les suggestions sont les bienvenues! L'utilisation et la description suivent en dessous du script.
#!/bin/bash
# umanage.sh
# 2014-05-05
BASEPATH="/media/$(whoami)/"
RESULTS=$(udisksctl dump | grep IdLabel | grep -c -i "$1")
case "$RESULTS" in
0 ) echo "Nothing found."
;;
1 ) DEVICELABEL=$(udisksctl dump | grep IdLabel | grep -i "$1" | cut -d ":" -f 2 | sed 's/^[ \t]*//')
DEVICE=$(udisksctl dump | grep -i "IdLabel: \+$DEVICELABEL" -B 12 | grep " Device:" | cut -d ":" -f 2 | sed 's/^[ \t]*//')
DEVICEPATH="$BASEPATH""$DEVICELABEL"
if [[ -z $(mount | grep "$DEVICE") ]]
then
echo "Found unmounted $DEVICE partition."
echo "Do you want to mount it in $DEVICEPATH?"
select yn in "Mount" "Ignore"
do
case $yn in
Mount ) udisksctl mount -b "$DEVICE"
break
;;
Ignore ) exit
;;
esac
done
else
echo "Found $DEVICE partition, currently mounted in $DEVICEPATH."
echo "Do you want to unmount it?"
select yn in "Unmount" "Ignore"
do
case $yn in
Unmount ) udisksctl unmount -b "$DEVICE"
break
;;
Ignore ) exit
;;
esac
done
fi
;;
* ) if [ $# -eq 0 ]
then
echo "No argument supplied"
else
echo "$RESULTS possible results. You may be looking for:"
echo
udisksctl dump | grep IdLabel | grep -i "$1" | cut -d ":" -f 2 | sed 's/^[ \t]*//' | sed '/^$/d'
echo
echo "Please refine your search."
fi
;;
esac
Usage:
Le script accepte comme argument l'étiquette de la partition que vous voulez monter et recherche dans le vidage udisksctl les entrées correspondantes.
Si une partition est trouvée et qu'elle n'est pas montée, le nom et le chemin du périphérique sont affichés et il vous est proposé de monter la partition. Le script recherche également les étiquettes partielles et ne se soucie pas des majuscules ou des minuscules (utile lorsque vous ne vous souvenez pas de l'étiquette exacte).
./umanage.sh PASSPORT
Found unmounted /dev/sdf1 partition.
Do you want to mount it in /media/pixel/My Passport?
1) Mount
2) Ignore
#?
Si une partition est trouvée et qu'elle est déjà montée, il vous est proposé de la démonter:
./umanage.sh passp
Found /dev/sdf1 partition, currently mounted in /media/open/My Passport.
Do you want to unmount it?
1) Unmount
2) Ignore
#?
Si votre argument correspond à plus d'un résultat, le script vous indique les étiquettes de partition correspondantes et vous demande d'affiner la recherche:
./umanage.sh SS
2 possible results. You may be looking for:
SSD-9GB
My Passport
Please refine your search.