Bonjour,
Une amie dont le PC est récemment passé de Windows à Xubuntu 18.04 m’a demandé s’il était possible de lui créer un lanceur qui, en cliquant dessus, lui permettrait de « retirer sans crainte une clé usb ». En gros, elle souhaite disposer du même raccourci qui existe dans le monde Windows, en bas à droite dans la barre des taches.
Je ne suis pas du tout informaticien mais, en cherchant un peu sur la toile, j’ai trouvé deux scripts en bash qui permettent de créer un tel lanceur. Je les ai seulement un tout petit peu modifés pour les mettre un peu plus à mon goût.
Voici ma source pour le
script n°1 et celle pour le
script n°2.
Cependant, ces scripts ne fonctionnent pas tout à fait comme je le souhaite car :
- le script n°1 ne fonctionne que s’il y a seulement une seule clé usb connectée (voir le message de notification affiché ci-dessous). Avec 2 clés ou plus, il ne fonctionne plus du tout. C’est dommage, c’est celui que je préfère car le plus facile à comprendre pour un néophyte ...
- le script n°2 fonctionne quel que soit le nombre de clés connectées mais les messages de notification qu’il émet ne sont pas pratiques car, d’une part, ils désignent les clés par leur dénomination /dev/sdX au lieu de leur « drivelabel » (leur étiquette?) et, d’autre part, il sont trop bavards, affichant un message de notification pour chaque partition démontée.
Ainsi, dans le cas où il y a 2 clés usb à retirer, il affiche un premier message pour sdb, un second pour sdb1, un troisième pour sdc et un quatrième pour sdc1. Je préférerai qu’il n’affiche qu’un seul message par clé voire même un message commun pour les deux clés :
Du coup, je sollicite votre aide bienveillante : les défauts de ces deux scripts sont-ils corrigibles ?
Je vous remercie bien vivement par avance ! 🙂
Voici le script n°1 :
#!/bin/bash
#source du script :
#https://linuxnorth.wordpress.com/2018/01/25/safely-removing-a-usb-drive-with-a-bash-script/
# d'abord s'assurer que toutes les écritures en cours sur la clef USB sont terminées
echo "Flushing USB drive buffer"
sync
echo "sync complete"
# identifier le nom de la clef USB
usblongname=$(lsblk -l | grep /media/$USER/*)
echo $usblongname
usbname="${usblongname:0:4}"
echo $usbname
# démonter la clé USB
udisksctl unmount -b /dev/$usbname
echo "unmount complete"
# couper l'alimentation électrique de la clef USB
udisksctl power-off -b /dev/$usbname
echo "power off complete"
# afficher un message de notification autorisant le retrait de la clef USB
notify-send -t 5000 'clé USB' 'vous pouvez maintenant retirer sans crainte votre clé USB' --icon=$HOME/.scripts/clef.png
exit
et le script n°2 :
#!/bin/bash
#source du script :
#https://unix.stackexchange.com/questions/43594/umount-all-attached-usb-disks-with-a-single-command
command_exists () {
type "$1" &> /dev/null
}
CMD=""
if command_exists udevadm; then
CMD="$(which udevadm) info -q all -n"
fi
if command_exists udevinfo; then
CMD="$(which udevinfo) -q all -n"
fi
echo "The udevinfo command for this system is $CMD"
for disk in /dev/sd*
do
DISK=$($CMD $disk | grep ID_BUS)
if [[ "$DISK" == *usb ]]; then
echo "Flushing USB drive buffer"
sync
echo "sync complete"
umount $disk && udisksctl power-off -b $disk
echo "la clef usb $disk est maintenant démontée et n'est plus alimentée en courant"
# afficher un message de notification autorisant le retrait de la clef USB
notify-send -t 5000 "$disk" 'vous pouvez maintenant retirer sans crainte votre clé USB' --icon=$HOME/.scripts/clef.png
fi
done
exit