#1 Le 14/08/2020, à 11:03
- jlfh0816
lanceur pour retirer sans risque une clé usb
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
Dernière modification par jlfh0816 (Le 14/08/2020, à 11:04)
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#2 Le 14/08/2020, à 12:37
- toitoinebzh
Re : lanceur pour retirer sans risque une clé usb
salut
j'ai lu en diagonale ton message ...
pourquoi tu n'utilises pas le "clic droit sur la clef > démonter la clef" qui est déjà inclus dans xubuntu ?
Hors ligne
#3 Le 14/08/2020, à 14:32
- inbox
Re : lanceur pour retirer sans risque une clé usb
Salut,
Pour Xubuntu, il existe des plugins à ajouter au tableau de bord. Certains sont installés et une partie est active dans le tableau de bord. Pour activer d'autres plugins : clic droit => Tableau de bord => Ajouter de nouveaux éléments. Reste à faire son choix dans la liste.
Certains plugins ne sont pas installés. Il faut les installer soit même. Dans le cas présent, c'est le paquet xfce4-mount-plugin qu'il faut installer. Ensuite, l'ajouter au tableau de bord.
Pour que l'utilisation de xfce4-mount-plugin soit plus claire, il faut, via clic droit => propriétés :
1/ cocher "Afficher un message après le démontage"
2/ dans "Systèmes de fichiers", cocher "Afficher uniquement les points de montage"
3/ Si souhaité, cocher "Exclure les systèmes de fichiers spécifiés" et ajouter / et /home
Ainsi configuré, n’apparaîtrons plus que les supports externes branchés : cartes SD, clefs USB, disques USB.
Pour éjecter un support, il suffit de cliquer sur l'icône du tableau de bord puis sur la ligne correspondant au support à éjecter.
A+
Un problème résolu ? Indiquez le en modifiant le titre du sujet.
Hors ligne
#4 Le 14/08/2020, à 15:47
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@toitoibzh
Merci d'avoir pris la peine de me répondre.
En fait, je connais très bien la méthode du démontage par le clic D > démonter mais ... le lanceur ne m'est pas destiné. Il est destiné à une personne qui fait l'effort de passer à Xubuntu et qui peine à se défaire de ses repères sur Windows. Pour l'instant, ça ne lui parait pas si naturel que ça de penser à ouvrir son gestionnaire de fichiers (Nemo), de repérer le nom de la clef dans le panneau de gauche et seulement à ce moment de faire clic D sur la clé pour finalement cliquer sur le sous-menu "enlever sans risque".
Mais sinon, je suis d'accord avec toi, une fois que l'on a mémorisé et accepté ce long (tout est relatif, on est d'accord !) cheminement, c'est la méthode de base (d'ailleurs, c'est la mienne au quotidien !).
@Inbox
Super ce plugin, je ne le connaissais pas du tout. Je l'ai installé et, effectivement, c'est d'un comportement très voisin de celui de l'icone "usb" dans la barre des taches de Windows. Pour moi, c'est adopté et je le garde dans mon propre tableau de bord. Maintenant, va falloir que je montre et emporte l'adhésion de mon amie. J'espère que ça le fera car ce plugin est bien pratique à l'usage si on clarifie bien les exclusions dans ses propriétés de façon à ne faire apparaître que les lecteurs extérieurs.
Merci de m'avoir fait découvrir ce plugin bien peu connu !
Le seul petit inconvénient que je lui ai trouvé, c'est que le message de notification est du type zenity et pas du type notify-send : je le trouve moins esthétique. Mais des goûts et des couleurs ...
Dernière modification par jlfh0816 (Le 14/08/2020, à 15:55)
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#5 Le 14/08/2020, à 18:15
- toitoinebzh
Re : lanceur pour retirer sans risque une clé usb
Mais sinon, je suis d'accord avec toi, une fois que l'on a mémorisé et accepté ce long (tout est relatif, on est d'accord !) cheminement, c'est la méthode de base (d'ailleurs, c'est la mienne au quotidien !).
pas besoin de passer par le gestionnaire de fichier, tu peux le faire directement sur l’icône de la clef usb sur le bureau
Hors ligne
#6 Le 15/08/2020, à 13:52
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@toitoinebzh
Oui, c'est vrai, tu as raison. Mais, dans mon cas particulier, je ne peux appliquer cette technique car j'ai fait le choix délibéré de n'avoir aucune icône sur le bureau. Ceci expliquant cela... !
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#7 Le 17/08/2020, à 17:07
- kamaris
Re : lanceur pour retirer sans risque une clé usb
Je me suis amusé à compléter le premier script, à peu près sur la base de ce que tu demandais je pense :
#!/bin/bash
ICON_PATH="$(realpath "$(dirname "$0")")/umount_usb.png"
test -f "$ICON_PATH" || ICON_PATH=''
power_off()
{
local model=$(lsblk -no model "$2" | tr '_' ' ')
if udisksctl power-off -b "$2"; then
[[ $1 == @('-v'|'--verbose') ]] && notify-send "$model" \
"Vous pouvez maintenant retirer sans crainte votre clé USB" \
--icon="$ICON_PATH"
return 0
else
notify-send "$model" "La mise hors tension de la clé USB a échoué" \
--icon="$ICON_PATH"
return 1
fi
}
declare -i unmounted=1 success=1
while read -r volume; do
current_device=${volume%[0-9]*}
if [[ $last_device != @($current_device|'') ]]; then
((unmounted)) && { power_off "$1" "$last_device" || success=0; }
unmounted=1
fi
last_device=$current_device
sync
if ! udisksctl unmount -b "$volume"; then
unmounted=0
success=0
notify-send "$volume" "Le volume n'a pas pu être démonté" --icon="$ICON_PATH"
fi
done < <(lsblk -no path,hotplug,mountpoint | awk '$2 && $3{print $1}')
if [ -n "$last_device" ]; then
((unmounted)) && { power_off "$1" "$last_device" || success=0; }
else
notify-send "$0" 'Aucune clé USB ne semble être utilisée' --icon="$ICON_PATH"
exit 0
fi
if ((success)); then
[[ $1 != @('-v'|'--verbose') ]] && notify-send \
"$0" 'Vous pouvez maintenant retirer sans crainte vos clés USB' \
--icon="$ICON_PATH"
exit 0
else
exit 1
fi
Pour les notifications, le script cherche une icône nommée umount_usb.png dans le répertoire où il se trouve (ça peut-être changé en entrée de script), et si il ne la trouve pas, il n'en utilise pas (en exploitant la possibilité de passer un chemin vide à notify-send).
Il y a une option -v ou --verbose, qui fera afficher une notification pour la mise hors tension de chaque clé en cas de succès, sinon il n'y a qu'une notification globale.
Les notifications en cas d'échec (de démontage ou de mise hors tension) sont faites pour chaque cas, indépendamment de cette option.
Dernière modification par kamaris (Le 18/08/2020, à 01:01)
Hors ligne
#8 Le 17/08/2020, à 17:45
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@kamaris
Tout d'abord, merci de t'être penché sur mon premier script et surtout un grand merci d'avoir travaillé à une ré-écriture aussi large !
J'ai testé ta proposition et je n'arrive pas à faire fonctionner ton script. Voici le message d'erreur qui s'affiche :
jlfh0816 @ Voyager1804 ~/.scripts
└─ $ ▶ ./kamaris.sh
lsblk: colonne inconnue : path,hotplug,mountpoint
Et, pour être complet, voici le message de notification qui s'affiche :
Y a-t-il une commande particulière pour lancer ton script ? J'ai essayé avec l'option -v et ça me donne le même échec, sans plus de commentaires :
jlfh0816 @ Voyager1804 ~/.scripts
└─ $ ▶ ./kamaris.sh -v
lsblk: colonne inconnue : path,hotplug,mountpoint
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#9 Le 17/08/2020, à 18:09
- kamaris
Re : lanceur pour retirer sans risque une clé usb
Grrr… problème de version de lsblk j'ai l'impression.
Peux-tu donner le retour de
lsblk --version
et
lsblk --help
Dernière modification par kamaris (Le 17/08/2020, à 18:10)
Hors ligne
#10 Le 17/08/2020, à 18:44
- MicP
Re : lanceur pour retirer sans risque une clé usb
Bonsoir
Je n'ai pas de version 18.04 d'Xubuntu installée pour tester,
mais peut-être simplement en les mettant en majuscule :
Donc, tester avec :
lsblk -no PATH,HOTPLUG,MOUNTPOINT
Hors ligne
#11 Le 17/08/2020, à 18:58
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@kamaris
Oui, bien sûr. Voici :
jlfh0816 @ Voyager1804 ~
└─ $ ▶ lsblk --version
lsblk de util-linux 2.31.1
et
jlfh0816 @ Voyager1804 ~
└─ $ ▶ lsblk --help
Utilisation :
lsblk [options] [<périphérique> ...]
Afficher des renseignements sur des périphériques blocs.
Options :
-a, --all afficher tous les périphériques
-b, --bytes afficher la TAILLE en octet plutôt qu'en format lisible
-d, --nodeps n'afficher ni les esclaves ni les porteurs
-D, --discard afficher les capacités d'abandon
-z, --zoned afficher le modèle de zone
-e, --exclude <liste> exclure les périphériques par numéro majeur
(disques RAM par défaut)
-f, --fs afficher des renseignements sur les systèmes de fichiers
-i, --ascii utiliser seulement des caractères ASCII
-I, --include <liste> ne montrer que les périphériques avec les numéros
majeur indiqués
-J, --json utiliser le format de sortie JSON
-l, --list utiliser l'affichage au format liste
-T, --tree use tree format output
-m, --perms afficher des renseignements sur les droits
-n, --noheadings ne pas afficher les en-têtes
-o, --output <liste> colonnes affichées
-O, --output-all afficher toutes les colonnes
-p, --paths afficher le chemin de périphérique complet
-P, --pairs utiliser le format de sortie clef="valeur"
-r, --raw utiliser le format de sortie brut
-s, --inverse inverser les dépendances
-S, --scsi afficher les informations sur les périphériques SCSI
-t, --topology afficher des renseignements sur la topologie
-x, --sort <colonne> trier la sortie par <colonne>
-h, --help display this help
-V, --version display version
Available output columns:
NAME nom du périphérique
KNAME nom du périphérique interne du noyau
MAJ:MIN numéro majeur:mineur du périphérique
FSTYPE type de système de fichiers
MOUNTPOINT où le périphérique est monté
LABEL étiquette du système de fichiers
UUID UUID du système de fichiers
PARTTYPE type de partition UUID
PARTLABEL étiquette de partition
PARTUUID UUID de partition
PARTFLAGS indicateurs de la partition
RA avance en lecture (« readahead ») du périphérique
RO périphérique en lecture seule
RM périphérique amovible
HOTPLUG périphérique amovible ou connectable à chaud (USB, PCMCIA, etc.)
MODEL identifiant de périphérique
SERIAL numéro de série du disque
SIZE taille du périphérique
STATE état du périphérique
OWNER nom d'utilisateur
GROUP nom de groupe
MODE permissions de nœud de périphérique
ALIGNMENT index d'alignement
MIN-IO taille minimale d'E/S
OPT-IO taille optimale d'E/S
PHY-SEC taille de secteur physique
LOG-SEC taille de secteur logique
ROTA périphérique tournant
SCHED ordonnanceur d'E/S
RQ-SIZE demande de taille de la file
TYPE type de périphérique
DISC-ALN abandon de l'index d'alignement
DISC-GRAN abandon de la granularité
DISC-MAX abandon du maximum d'octets
DISC-ZERO abandon des données de zéros
WSAME écriture du même maximum d'octets
WWN identifiant de stockage unique
RAND ajout d'aléa
PKNAME nom du périphérique parent interne du noyau
HCTL Hôte:Canal:Cible:Ulog pour SCSI
TRAN type de périphérique de transport
SUBSYSTEMS dédupliquer une chaîne de sous-systèmes
REV révision de périphérique
VENDOR constructeur du périphérique
ZONED zone model
Consultez lsblk(8) pour obtenir des précisions complémentaires.
@MicP
Voici la réponse que j'obtiens :
jlfh0816 @ Voyager1804 ~
└─ $ ▶ lsblk -no PATH,HOTPLUG,MOUNTPOINT
lsblk: colonne inconnue : PATH,HOTPLUG,MOUNTPOINT
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#12 Le 17/08/2020, à 19:39
- MicP
Re : lanceur pour retirer sans risque une clé usb
Mais pourquoi tant de haine………POURQUOAAAAAAAAHHH !!!
Dernière modification par MicP (Le 17/08/2020, à 19:39)
Hors ligne
#13 Le 17/08/2020, à 20:15
- kamaris
Re : lanceur pour retirer sans risque une clé usb
Ça va, c'est pas la colonne la plus importante qui te manque (ouf ! ).
Voilà une mise à jour qui devrait faire l'affaire :
#!/bin/bash
ICON_PATH="$(realpath "$(dirname "$0")")/umount_usb.png"
test -f "$ICON_PATH" || ICON_PATH=''
power_off()
{
local model=$(lsblk -no model "$2" | tr '_' ' ')
if udisksctl power-off -b "$2"; then
[[ $1 == @('-v'|'--verbose') ]] && notify-send "$model" \
"Vous pouvez maintenant retirer sans crainte votre clé USB" \
--icon="$ICON_PATH"
return 0
else
notify-send "$model" "La mise hors tension de la clé USB a échoué" \
--icon="$ICON_PATH"
return 1
fi
}
declare -i unmounted=1 success=1
while read -r volume; do
current_device=${volume%[0-9]*}
if [[ $last_device != @($current_device|'') ]]; then
((unmounted)) && { power_off "$1" "$last_device" || success=0; }
unmounted=1
fi
last_device=$current_device
sync
if ! udisksctl unmount -b "$volume"; then
unmounted=0
success=0
notify-send "$volume" "Le volume n'a pas pu être démonté" --icon="$ICON_PATH"
fi
done < <(lsblk -npo name,hotplug,mountpoint -x name | awk '$2 && $3{print $1}')
if [ -n "$last_device" ]; then
((unmounted)) && { power_off "$1" "$last_device" || success=0; }
else
notify-send "$0" 'Aucune clé USB ne semble être utilisée' --icon="$ICON_PATH"
exit 0
fi
if ((success)); then
[[ $1 != @('-v'|'--verbose') ]] && notify-send \
"$0" 'Vous pouvez maintenant retirer sans crainte vos clés USB' \
--icon="$ICON_PATH"
exit 0
else
exit 1
fi
Dernière modification par kamaris (Le 18/08/2020, à 01:00)
Hors ligne
#14 Le 17/08/2020, à 21:16
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@kamaris
Ouah, ça fonctionne super bien !
Je n'ai eu aucun échec de démontage des 5 clefs usb testées.
Avec 1 seule clé usb insérée, voici ce que me dit le terminal :
jlfh0816 @ Voyager1804 ~/.scripts
└─ $ ▶ ./kamaris.sh
Unmounted /dev/sdb1.
avec ce message de notification :
Sans aucune clé insérée, voici ce que me dit le terminal :
jlfh0816 @ Voyager1804 ~/.scripts
└─ $ ▶ ./kamaris.sh
jlfh0816 @ Voyager1804 ~/.scripts
└─ $ ▶
en affichant ce message de notification :
Et enfin, avec 2 clés usb insérées, voici ce qu'affiche le terminal :
jlfh0816 @ Voyager1804 ~/.scripts
└─ $ ▶ ./kamaris.sh
Unmounted /dev/sdb1.
Unmounted /dev/sdc1.
avec ce message de notification correspondant :
Donc, succès sur toute la ligne : un très grand merci kamaris, ton script est 100% fonctionnel !
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#15 Le 18/08/2020, à 00:55
- kamaris
Re : lanceur pour retirer sans risque une clé usb
En bonus, gestion des conteneurs chiffrés LUKS :
#!/bin/bash
ICON_PATH="$(realpath "$(dirname "$0")")/umount_usb.png"
test -f "$ICON_PATH" || ICON_PATH=''
power_off()
{
local model=$(lsblk -no model "$2" | tr '_' ' ')
if udisksctl power-off -b "$2"; then
[[ $1 == @('-v'|'--verbose') ]] && notify-send "$model" \
"Vous pouvez maintenant retirer sans crainte votre clé USB" \
--icon="$ICON_PATH"
return 0
else
notify-send "$model" "La mise hors tension de la clé USB a échoué" \
--icon="$ICON_PATH"
return 1
fi
}
declare -i unmounted=1 success=1
while read volume pvolume; do
test -n "$pvolume" && current_device=${pvolume%[0-9]*} || current_device=$volume
if [[ $last_device != @($current_device|'') ]]; then
((unmounted)) && { power_off "$1" "$last_device" || success=0; }
unmounted=1
fi
last_device=$current_device
sync
if ! udisksctl unmount -b "$volume"; then
unmounted=0
success=0
notify-send "$volume" "Le volume n'a pas pu être démonté" --icon="$ICON_PATH"
fi
if [[ ${volume##*/} != ${current_device##*/}* ]] \
&& ! udisksctl lock -b "$pvolume"; then
unmounted=0
success=0
notify-send "$pvolume" "Le conteneur LUKS n'a pas pu être verrouillé" \
--icon="$ICON_PATH"
fi
done < <(lsblk -Ppno kname,pkname,hotplug,mountpoint \
| awk '{for (i=1;i<=NF;i++) gsub("[^\"]+=\"|\"","",$i)}
(+$3 || p) && $4{print $1" "$2; p=0; next}
+$3 && $2{p=1; next} {p=0}')
if [ -n "$last_device" ]; then
((unmounted)) && { power_off "$1" "$last_device" || success=0; }
else
notify-send "$0" 'Aucune clé USB ne semble être utilisée' --icon="$ICON_PATH"
exit 0
fi
if ((success)); then
[[ $1 != @('-v'|'--verbose') ]] && notify-send \
"$0" 'Vous pouvez maintenant retirer sans crainte vos clés USB' \
--icon="$ICON_PATH"
exit 0
else
exit 1
fi
Dernière modification par kamaris (Le 18/08/2020, à 00:56)
Hors ligne
#16 Le 18/08/2020, à 09:52
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@kamaris
Merci mille fois de ton travail, je t'en suis très reconnaissant.
Je n'utilise pas de conteneurs chiffrés LUKS (et pour être honnête, je ne sais même ce que c'est ... voilà une très bonne occasion de me pencher sur la doc !) et, du coup, je n'ai pas pu tester la nouvelle version de ton script concernant ce point précis. Par contre, cette nouvelle version est pleinement fonctionnelle avec les clés usb sans conteneurs LUKS, ça au moins j'ai pu le tester !
Encore merci kamaris
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#17 Le 18/08/2020, à 10:03
- kamaris
Re : lanceur pour retirer sans risque une clé usb
De rien, c'était avec plaisir
N'hésite pas à poster si tu l'utilises et que ça bugue, ou qu'il manque quelque chose…
Hors ligne
#18 Le 18/08/2020, à 10:52
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
Hier, pendant que kamaris "planchait" sur son super script, je m'amusais de mon côté à essayer de modifier mon premier script afin que le message de notification envoyé par notify-send affiche le nom (l'étiquette ? le label ? ...) de la clef retirée avec si possible une police, une taille et une couleur qui "saute" aux yeux.
Oh, ça n'apporte pas grand'chose, c'est du cosmétique, c'était juste un exercice de style pour voir si c'était possible ou pas. Rien de plus. Et bien entendu, rappel du post #1, ce script ne fonctionne que s'il y a une seule clé usb à retirer ...
Et voilà ce que ça a donné selon que la clé retirée a un nom personnalisé (donc un "label" ou une "étiquette", à gauche) ou non (donc, affichage de l'UUID en lieu et place du "label", à droite) :
Et voici le script correspondant :
#!/bin/bash
#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 clf 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
# sauvegarder le nom de la clef USB et le mettre en forme
echo $usblongname | awk -F "/" '{print $4}' > message.txt
var="$(<message.txt)"
echo $var
message="<span color='#57dafd' font='26px'><i><b>$var</b></i></span>"
# 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é $message" --icon=$HOME/.scripts/clef.png
exit
Mais bon, tout ça c'était avant que kamaris publie son super script que je retiens en priorité, le sien au moins fonctionne sur plusieurs clés usb et c'est nettement plus solide que mes petites bidouilles dans mon coin !
Dernière modification par jlfh0816 (Le 18/08/2020, à 14:40)
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#19 Le 18/08/2020, à 11:23
- kamaris
Re : lanceur pour retirer sans risque une clé usb
Je ne sais pas si tu as vu, j'utilise un nom de clé pour le notify-send dans la fonction power_off() de mon script : c'est le champ MODEL de lsblk.
Mais à l'usage, ça n'apparaitra que si le script est lancé avec l'option -v ou --verbose, ou si la mise hors tension échoue.
Et je ne fais pas de mise en forme : je le mets simplement en « summary » dans notify-send.
Rq : pour récupérer plus simplement le nom de clé que tu utilises :
var=${usblongname##*/}
Hors ligne
#20 Le 18/08/2020, à 13:20
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@kamaris
Merci beaucoup pour ces précisions !
Je ne suis pas du tout scripteur (je ne fais que m'inspirer des travaux des autres) mais je suis toujours ravi de pouvoir apprendre et, en l'occurence, c'est vraiment gentil à toi de m'avoir fait part de ces remarques.
A la lumière de celles-ci, je vais tranquillement m'y remettre et voir si je peux faire de la mise en forme des messages de notification de notify-send dans ton script.
Je posterai dès que j'aurai quelques chose de présentable et surtout de fonctionnel.
C'est vrai que tout ça n'est que la cosmétique mais ça fait plaisir à mon côté bling bling !
Encore merci kamaris de ta disponibilité et de ta bienveillance !
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#21 Le 18/08/2020, à 13:45
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
@kamaris
Rq : pour récupérer plus simplement le nom de clé que tu utilises :
var=${usblongname##*/}
Je viens d'utiliser ton astuce pour définir la variable $VAR et ça fonctionne de façon impeccable : merci !!!
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#22 Le 24/08/2020, à 09:19
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
Je ne sais pas si tu as vu, j'utilise un nom de clé pour le notify-send dans la fonction power_off() de mon script : c'est le champ MODEL de lsblk.
Bonjour kamaris,
Dans un petit script d'essai autour de ton travail, j'ai vainement essayé de définir une variable $model en partant de la ligne de script que tu as eu la gentillesse d'écrire (post #13).
J'ai notamment essayé :
model=$(lsblk -no model "$2" | tr '_' ' ')
mais, lorsque je l'introduis ensuite dans la ligne de commande de notify-send en écrivant :
model=$(lsblk -no model "$2")
notify-send "summary" -t 10000 '$model'
, j'ai ce message d'erreur :
jlfh0816 @ Voyager1804 ~/.scripts
└─ $ ▶ ./essai.sh
lsblk: : n'est pas un périphérique bloc
Est-ce que tu pourrais me dire comment définir $model de telle sorte que je puisse ensuite l'utilser dans la ligne de commande de notify-send ?
Ou alors faut-il impérativement définir $model à l'intérieur d'une fonction power off () comme tu l'as fait dans ton script ?
Ou alors est-ce lsblk qui ne peut être appelé comme je le fais ?
Je te remercie par avance de ton aide !
Dernière modification par jlfh0816 (Le 24/08/2020, à 09:23)
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#23 Le 24/08/2020, à 10:07
- MicP
Re : lanceur pour retirer sans risque une clé usb
@jlfh0816
Dans ton script, la variable $2 n'est sans doute pas définie,
ce qui entraîne l’apparition du message d'erreur :
lsblk: : n'est pas un périphérique bloc
Remplace $2 par exemple par : /dev/sda :
model=$(lsblk -no model /dev/sda)
notify-send "summary" -t 10000 "$model"
Dernière modification par MicP (Le 24/08/2020, à 10:08)
Hors ligne
#24 Le 24/08/2020, à 10:49
- jlfh0816
Re : lanceur pour retirer sans risque une clé usb
Merci beaucoup MicP de ta réponse.
J'ai donc remplacé $2 par /dev/sdb mais ça ne supprime pas le message d'erreur relatif à lsblk :
jlfh0816 @ Voyager1804 ~/.scripts
└─ $ ▶ ./essai.sh
lsblk: /dev/sdb : n'est pas un périphérique bloc
Le message de notification qui s'affiche malgré tout montre que le body est constitué par l'expression littérale de $model :
Même résultat en mettant sdb1 au lieu de sdb.
Je suis retourné voir le script de kamaris et je ne vois pas trop à quel endroit $2 est définie ?
Autre chose : lorsque dans mon script j'ajoute un
echo $model
rien ne s'affiche dans le terminal ...
Dernière modification par jlfh0816 (Le 24/08/2020, à 12:45)
Xubuntu - Voyager 18.04 et 22.04
Hors ligne
#25 Le 24/08/2020, à 21:33
- kamaris
Re : lanceur pour retirer sans risque une clé usb
Il faut passer à lsblk un nom de périphérique valide.
Pour voir tes noms de périphériques, regarde le retour de lsblk dans le terminal (première colonne).
Dans mon script, le $2 (second argument) de la fonction power_off() correspond à $last_device dans le corps le script, car j'appelle la fonction par
power_off "$1" "$last_device"
où $1 est le premier argument du script (l'option éventuelle -v), également passé en premier argument à power_off().
Ton corps de message contient littéralement $model au lieu de sa valeur, car tu as utilisé des guillemets simples au lieu des doubles :
notify-send "summary" -t 10000 '$model'
au lieu de
notify-send "summary" -t 10000 "$model"
Hors ligne