wibian/polybar/system-usb-udev.sh

87 lines
2.7 KiB
Bash

#!/bin/sh
# Définition du chemin vers le fichier PID pour la communication avec le script
path_pid="/tmp/polybar-system-usb-udev.pid"
# Fonction pour mettre à jour les processus liés
usb_update() {
pid=$(cat "$path_pid")
if [ "$pid" != "" ]; then
kill -10 "$pid"
fi
}
# Fonction pour ouvrir Caja au point de montage du premier périphérique USB monté trouvé
open_mountpoint_in_caja() {
devices=$(lsblk -Jplno NAME,TYPE,RM,MOUNTPOINT)
for mount in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint != null) | .mountpoint'); do
if [ -n "$mount" ]; then
caja "$mount" &
break
fi
done
}
# Fonction pour afficher les périphériques USB montés et non montés
usb_print() {
devices=$(lsblk -Jplno NAME,TYPE,RM,SIZE,MOUNTPOINT,VENDOR)
output=""
counter=0
for unmounted in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint == null) | .name'); do
unmounted=$(echo "$unmounted" | tr -d "[:digit:]")
unmounted=$(echo "$devices" | jq -r '.blockdevices[] | select(.name == "'"$unmounted"'") | .vendor')
unmounted=$(echo "$unmounted" | tr -d ' ')
if [ $counter -eq 0 ]; then
space=""
else
space=" "
fi
counter=$((counter + 1))
output="$output$space#1 $unmounted"
done
for mounted in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint != null) | .mountpoint'); do
label=$(basename "$mounted")
size=$(echo "$devices" | jq -r '.blockdevices[] | select(.mountpoint == "'"$mounted"'") | .size')
if [ $counter -eq 0 ]; then
space=""
else
space=" "
fi
counter=$((counter + 1))
output="$output$space$label $size"
done
echo "$output"
}
# Traite les arguments passés au script
case "$1" in
--update)
usb_print
;;
--open)
open_mountpoint_in_caja
;;
--unmount)
devices=$(lsblk -Jplno NAME,TYPE,RM,MOUNTPOINT)
for unmount in $(echo "$devices" | jq -r '.blockdevices[] | select(.type == "part") | select(.rm == true) | select(.mountpoint != null) | .name'); do
udisksctl unmount --no-user-interaction -b "$unmount"
udisksctl power-off --no-user-interaction -b "$unmount"
done
usb_update
;;
*)
echo $$ > $path_pid
trap exit INT
trap "echo" USR1
while true; do
usb_print
sleep 60 &
wait
done
;;
esac