Table des matières

Switch On/Off dans le systray


Mise à jour le : 15/05/2023

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)

systray_switch_with_file
#!/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).

systray_switch_without_file
#!/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<fifo 8>&-
exec 9<>fifo2 6>fifo2 7<fifo2 9>&-
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

Icône ON
Icône OFF

Utilisation

Bah, il ne reste plus qu'à le lancer en début de session ^_^
Après adaptation évidemment … :-P