====== Switch On/Off dans le systray ====== \\ Mise à jour le : 15/05/2023 * Une icône dans le systray * Un clic gauche bascule l'état de l'icône * Un clic droit montre un menu : Switcher ou Quitter * Un fichier contenant l'état actuel de l'icône (selon la version) * Possibilité de coder les actions (on et off) dans le script (ou d'utiliser le fichier d'état pour gérer les actions selon la version) * La version avec fichier d'état permet le pilotage du script par ce fichier en y écrivant ON ou OFF. * Scripts à adapter (variables et/ou code pour les actions On et Off). \\ Débutant s'abstenir\\ \\ Nécessite //yad// :\\ \\ apt install yad La version avec fichier d'état nécessite //inotifywait// :apt install intofy-tools ===== Les scripts (2 versions) ===== Ils s'appuient sur le mode notification de //yad//.\\ Dans le chapitre "Images icônes", vous trouverez des fichiers images pour les icônes ON et OFF. \\ == Version avec fichier d'état. == //(Possibilité de mettre les instructions dans le script ou de faire un script extérieur qui viendra lire le fichier d'état)//\\ #!/bin/bash ### Variables Customisables. Icon_Off="/chemin/de/l'image/ON" # À adapter. Icon_On="/chemin/de/l'image/OFF" # " " Switch="$HOME/systray_switch_state" # " " Fichier d'état (contient soit ON soit OFF). ### Fonctions. _quit () { local s="inotifywait -qme close_write ${Switch//\//\\\\/}" kill -15 "$(ps -ef | awk -vs="$s" '$0 ~ s && !/awk/{print $2}')" } _switch () { local etat etat=$(<"$Switch") if [ "$etat" = "ON" ] echo "OFF" >"$Switch" # # Code ICI pour les actions OFF (optionnel) # else echo "ON" >"$Switch" # # Code ICI pour les actions ON (optionnel) # fi } _icon_set () { local etat icon while read -r do etat=$(<"$Switch") [ "$etat" = "ON" ] && icon="$Icon_On" || icon="$Icon_Off" echo "icon:$icon" done < <(echo; inotifywait -qme close_write "$Switch") } ### Export (Variable et Fonctions). export Switch export -f _quit _switch exec 2>/dev/null # Pour éviter le message `Complété` à la fermeture de yad par la fonction `_quit`. ### Notification YAD (icône systray). # text = affiché au survol de la souris # menu = affichage+action(si clic) du menu sur clic droit de la souris # command = switch direct sur clic gauche de la souris yad --notification \ --text "Texte de la bulle au survol de la souris" \ --icon-size 64 \ --no-middle \ --menu "Switcher!bash -c '_switch'|Quitter!bash -c '_quit'" \ --command "bash -c '_switch'" \ --listen < <(_icon_set) == Version sans fichier d'état == //(oblige de mettre les instructions On/Off dans ce script).//\\ #!/bin/bash ### Variables Customisables. Icon_Off="/chemin/de/l'image/ON" # À adapter. Icon_On="/chemin/de/l'image/OFF" # " " ### Créations des canaux de communication mkfifo fifo fifo2 exec 8<>fifo 4>fifo 5&- exec 9<>fifo2 6>fifo2 7&- rm fifo fifo2 fd4="/proc/$$/fd/4" fd5="/proc/$$/fd/5" fd6="/proc/$$/fd/6" ### Initialisation de l'état de l'icône. # Partie à adapter selon les actions pour ON et OFF. # Mais quel que soit l'état de départ, il faut envoyer les bonnes informations aux bons canaux. echo "OFF" >&4 echo "icon:$Icon_Off" >&6 ### Fonctions. _quit () { exec 6>"$1" echo "EOF" >&6 } _switch () { local etat exec 4>"$1" 5<"$2" 6>"$3" read -r etat <&5 if [ "$etat" = "ON" ] then echo "OFF" >&4 echo "icon:$Icon_Off" >&6 # # Code ICI pour les actions OFF # else echo "ON" >&4 echo "icon:$Icon_On" >&6 # # Code ICI pour les actions ON # fi } ### Export des Fonctions et Variables. export -f _quit _switch export Icon_On Icon_Off ### Notification YAD (icône systray). yad --notification \ --text "Texte au survol de la souris." \ --icon-size 64 \ --no-middle \ --menu "Switcher!bash -c '_switch $fd4 $fd5 $fd6'|Quitter!bash -c '_quit $fd6'" \ --command "bash -c '_switch $fd4 $fd5 $fd6'" \ --listen < <(while read -r <&7; do [ "$REPLY" = "EOF" ] && break; echo "$REPLY"; done) ===== Images icônes ===== {{https://debian-facile.org/images/file-R477709fd6aaa5940ba2be7b06e643632|Icône ON}}\\ {{https://debian-facile.org/images/file-R9815d946627cdf57a09164453a56c84e|Icône OFF}} ===== Utilisation ===== Bah, il ne reste plus qu'à le lancer en début de session ^_^\\ Après adaptation évidemment ... :-P