#!/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