web-dev-qa-db-fra.com

Comment monter automatiquement en ligne de commande?

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.

23
Grumbel

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 chownname__), 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é).

udisksctlname__

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

Conclusion

Alors que gvfs-mount et udisksctlfonctionneront 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é.

13
Grumbel

Vous pouvez utiliser:

udisksctl mount -b nom de l'appareil

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.

25
Radu Rădeanu

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
6
zvuk

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

1
komuta

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:

  • enregistrer le script en tant que umanage.sh
  • le rendre exécutable: chmod + x umanage.sh
  • lancez-le: ./umanage.sh YourDeviceLabel

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