From 965d33b129c99a201cc8ac0bbd8508c19a98d7e6 Mon Sep 17 00:00:00 2001 From: wilou Date: Fri, 3 May 2024 09:57:33 +0000 Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20vers=20?= =?UTF-8?q?"polybar"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- polybar/95-usb.rules | 4 ++ polybar/system-usb-udev.sh | 86 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 polybar/95-usb.rules create mode 100644 polybar/system-usb-udev.sh diff --git a/polybar/95-usb.rules b/polybar/95-usb.rules new file mode 100644 index 0000000..3286922 --- /dev/null +++ b/polybar/95-usb.rules @@ -0,0 +1,4 @@ +KERNEL=="sd*", ACTION=="add", ATTR{removable}=="1", \ + RUN+="/home/user/.config/polybar/scripts/system-usb-udev.sh --update" +KERNEL=="sd*", ACTION=="remove", \ + RUN+="/home/user/.config/polybar/scripts/system-usb-udev.sh --update" diff --git a/polybar/system-usb-udev.sh b/polybar/system-usb-udev.sh new file mode 100644 index 0000000..66ff420 --- /dev/null +++ b/polybar/system-usb-udev.sh @@ -0,0 +1,86 @@ +#!/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 +