logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

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)

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

Utilisation

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

utilisateurs/tawal/scripts/switch-on-off-dans-le-systray.txt · Dernière modification: 15/05/2023 18:53 par Tawal

Pied de page des forums

Propulsé par FluxBB