Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#76 Le 26/08/2022, à 15:08

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

Bonjour,
Je reviens poster la petite manip’ permettant d’obtenir la notification animée du post #73 (qui ne concerne que l'alarme rouge, pas l'alerte jaune ni le cas d'une température normale). Peut-être que cela rendra service à ceux qui, comme moi, rament pour faire fonctionner du code css dans un fichier de configuration gtk, ici celui de xfce-notify-4.0

Grâce à une suggestion de beuguissime (ici), l’idée de base est de substituer pendant une dizaine de secondes (en fait, pendant la durée que l’on renseigne dans whishker > paramètres > notifications > disparition après… ) le thème habituel des notifications par un thème temporaire spécialement créé pour l’alarme rouge. Et, au bout de la dizaine de secondes, ce thème special (c’est le nom que je lui ai donné) cède spontanément sa place pour le retour du thème habituel (chez moi, c’est Smoke).

Ce changement de thème est piloté par le script temperature.sh lequel est automatiquement relancé à intervalles réguliers par le moniteur générique (GenMon) du tableau de bord. Tout est donc transparent pour l’utilisateur.

Pour tenir compte de la remarque de Tawal (post #68), on peut ne relancer le script que toutes les 20 minutes (1200 secondes à renseigner dans configuration GenMon > période) afin de ne pas trop solliciter le SSD en cycles lectures/écritures. Ceci du moins tant que je n’ai pas trouvé le moyen de conserver quelque part les gifs affichés dans le tableau de bord (ceux qui donnent la valeur de la température en temps réel) déjà existants afin de les ré-utiliser sans avoir à les re-créer. Pour l’instant, je ne sais pas faire...


Pour débuter la manip’, il faut d’abord créer une icône vide et transparente que l’on place dans ~/.scripts
Elle mesure 120x120 px et je l’ai appelée clef_vide.png
Sa seule utilité est de réserver un emplacement dans le message de notification pour qu’un gif animé puisse venir s’y superposer.

Ensuite, on crée le thème special en modifiant un thème déjà existant et qui fonctionne à coup sûr, par exemple Greybird ou Bright. Pour cette partie, c’est MicP (voir ici) qui m’a beaucoup aidé.
Dans ~/.local/share/, on crée un dossier themes dans lequel on crée un autre dossier appelé special et dans lequel on crée encore un autre dossier appelé xfce-notify-4.0
Et dans le dossier ~/.local/share/themes/special/xfce-notify-4.0 finalement obtenu, on y copie-colle le fichier /usr/share/themes/Greybird/xfce-notify-4.0/gtk.css

Il ne reste maintenant plus qu’à modifier le fichier gtk.css car c’est lui qui permet de personnaliser l’affichage.
C’est ici qu’il y a 3 options possibles selon la technique d’animation que l’on souhaite mettre en oeuvre, chacune ayant ses avantages et inconvénients :
- soit on n’utilise que les frames constitutives d’un gif animé
- soit on utilise un sprite sheet 1 ligne horizontale
- soit on utilise un sprite sheet 1 ligne verticale
Je n’ai pas réussi à utiliser un sprite sheet en forme de grille (plusieurs lignes et plusieurs colonnes) car, tout comme dans le navigateur Firefox, les instructions CSS background-position-x et background-position-y n’y sont pas reconnues.


1°) si on utilise les frames séparées
Dans mon cas, le gif à afficher est celui-ci : pl2t.gif et son lien direct

Il faut le décomposer en ses frames constitutives. Celles-ci sont renommées frame1,png, frame2.png, etc... jusqu’à la dernière. Elles sont placées dans un sous-dossier frames créé pour l’occasion à l’adresse: ~/.local/share/themes/special/xfce-notify-4.0/special/frames
Dans mon cas (gif ci-dessus et des posts #72 et 73), il y avait 21 frames numérotées de frame1.png à frame21.png

On ouvre le fichier gtk.css et on y remplace :

#XfceNotifyWindow label#summary {
    font-weight: bold;
}

par :

#XfceNotifyWindow label#summary {
    font-weight: bold;
}

#XfceNotifyWindow label#body {
    font-weight: bold;
    animation: blink 1s steps(115, start) infinite;
}

@keyframes blink {
  50% {
       opacity: 0.0; 
       color: #00DFFF;
}
}

#XfceNotifyWindow image {
  color: #eeeeee;
  animation: bg 0.8s linear infinite;
}

@keyframes bg {
  0% {
      background-image: url("frames/frame1.png");
  }
  5% {
      background-image: url("frames/frame2.png");
  }
  10% {
      background-image: url("frames/frame3.png");
  }
  15% {
      background-image: url("frames/frame4.png");
  }
  20% {
      background-image: url("frames/frame5.png");
  }
  25% {
      background-image: url("frames/frame6.png");
  }
  30% {
      background-image: url("frames/frame7.png");
  }
  35% {
      background-image: url("frames/frame8.png");
  }
  40% {
      background-image: url("frames/frame9.png");
  }
  45% {
      background-image: url("frames/frame10.png");
  }
  50% {
      background-image: url("frames/frame11.png");
  }
  55% {
      background-image: url("frames/frame12.png");
  }
  60% {
      background-image: url("frames/frame13.png");
  }
  65% {
      background-image: url("frames/frame14.png");
  }
  70% {
      background-image: url("frames/frame15.png");
  }
  75% {
      background-image: url("frames/frame16.png");
  }
  80% {
      background-image: url("frames/frame17.png");
  }
  85% {
      background-image: url("frames/frame18.png");
  }
  90% {
      background-image: url("frames/frame19.png");
  }
  95% {
      background-image: url("frames/frame20.png");
  }
  100% {
      background-image: url("frames/frame21.png");
  }
}


2°) si on utilise un sprite sheet 1 ligne horizontale :
Dans ce cas, il faut faire soi-même (grâce à Imagemagick et sa commande montage) ou récupérer sur la toile un sprite sheet qui convient, par exemple celui-ci : yb6m.png
et son lien direct

Je l’ai appelé feu.png et placé dans le même dossier qui contient le fichier gtk.css

Ensuite, on ouvre le fichier gtk.css et on remplace :

#XfceNotifyWindow label#summary {
    font-weight: bold;
}

par :

#XfceNotifyWindow label#summary {
    font-weight: bold;
}

#XfceNotifyWindow label#body {
    font-weight: bold;
    animation: blink 1s steps(115, start) infinite;
}

@keyframes blink {
  50% {
       opacity: 0.0; 
       color: #00DFFF;
}
}

#XfceNotifyWindow image {
    color: #eeeeee;
    padding-bottom: 20px;
    background-image: url("feu.png");
    animation: play 0.8s steps(8) infinite;
}

  @keyframes play {
      from { background-position: 0px; }
      to { background-position: -3968px; }
    }

Et voici l’animation obtenue : p6f3.gif avec son lien direct


3°) si on utilise un sprite sheet 1 ligne verticale :
Dans ce cas, le sprite sheet se présente de cette façon  :
ovqp.png

avec son lien direct

Je l’ai également appelé feu.png et placé dans le même dossier qui contient le fichier gtk.css


Ensuite, on ouvre le fichier gtk.css et on remplace :

#XfceNotifyWindow label#summary {
    font-weight: bold;
}

par :

#XfceNotifyWindow label#summary {
    font-weight: bold;
}


#XfceNotifyWindow label#body {
    font-weight: bold;
    animation: blink 1s steps(115, start) infinite;
}

@keyframes blink {
  50% {
       opacity: 0.0; 
       color: #00DFFF;
}
}

#XfceNotifyWindow image {
    color: #eeeeee;
    padding-bottom: 20px;
    background-image: url("feu.png");
    animation: play 0.8s steps(8) infinite;
}

	  @keyframes play {
	100% { background-position: 0px -480px; }
}

L'animation obtenue est strictement la même qu'au 2°) ci-dessus.


Dans les 3 façons de procéder à l’animation, j’ai systématiquement ajouté les lignes ci-dessous qui permettent de faire clignoter la température (le body de notify-send) dans la notification :

#XfceNotifyWindow label#body {
    font-weight: bold;
    animation: blink 1s steps(115, start) infinite;
}

@keyframes blink {
  50% {
       opacity: 0.0; 
       color: #00DFFF;
}
}

Par contre, comme dit plus haut, je n’ai pas pu utiliser un sprite sheet en grille (plusieurs lignes et colonnes) comme celui-ci  (avec son lien direct)

kx6b.png

car les instructions background-position-x et -y ne sont pas reconnues dans le fichier gtk.css. Mais si quelqu’un connaît la façon de procéder ou contourner le problème, je serai ravi d’apprendre comment faire.


Pour finir, il ne reste plus qu’à créer le script temperature.sh (à placer dans ~/.scripts) que le moniteur générique (GenMon) du tableau de bord va se charger de lancer à intervalles réguliers :

#!/bin/bash
#partie du script d'après MicP https://forum.ubuntu-fr.org/viewtopic.php?id=2073249
periph=/dev/disk/by-id/ata-Samsung_SSD_860_EVO_M.2_1TB_S415NR0R400914Z
alerte_jaune=50  # Seuil d'alerte jaune en degré celsius
alarme_rouge=70  # Seuil d'alerte rouge en degré celsius
maReg='[^[0-9]]*([0-9][0-9]{0,2})°C$'       # Regex permettant l'extraction de la valeur numérique de la température.
[[ $(hddtemp "$periph") =~ $maReg ]] && celsius=${BASH_REMATCH[1]}

#création du fond du gif alerte rouge
convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text 0,15 'SSD :'" /home/jlfh0816/.scripts/R1.png;
for i in {2..10} ; do cp /home/jlfh0816/.scripts/R1.png /home/jlfh0816/.scripts/R"$i".png ; done;
convert -delay 10 /home/jlfh0816/.scripts/R*.png -loop 0 /home/jlfh0816/.scripts/gif_vide_75x22pxR.gif;
rm /home/jlfh0816/.scripts/R*.png;

#inscription température hddtemp sur gif alerte rouge
convert /home/jlfh0816/.scripts/gif_vide_75x22pxR.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill '#FF0000'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   /home/jlfh0816/.scripts/temperatureR_rouge.gif

#création du fond du gif alerte jaune
convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text 0,15 'SSD :'" /home/jlfh0816/.scripts/Y1.png;
for i in {2..10} ; do cp /home/jlfh0816/.scripts/Y1.png /home/jlfh0816/.scripts/Y"$i".png ; done;
convert -delay 20 /home/jlfh0816/.scripts/Y*.png -loop 0 /home/jlfh0816/.scripts/gif_vide_75x22pxY.gif;
rm /home/jlfh0816/.scripts/Y*.png;

#inscription température hddtemp sur gif alerte jaune
convert /home/jlfh0816/.scripts/gif_vide_75x22pxY.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill '#FFFF00'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   /home/jlfh0816/.scripts/temperatureY_jaune.gif
          
rm /home/jlfh0816/.scripts/gif_vide_75x22px*.gif


#comparaison temperature SSD aux seuils d'alerte jaune et d'alarme rouge
if [ "$celsius" -le "$alerte_jaune" ]; then
msg="<txt><span>   SSD: </span><span foreground=\"#00FFFF\">"${celsius}"°C        </span></txt>"
echo "$msg"

else

if [ "$celsius" -ge "$alarme_rouge" ]; then
echo "<img>/home/jlfh0816/.scripts/temperatureR_rouge.gif</img>";

paplay /usr/share/sounds/sound-icons/glass-water-1.wav;
spd-say -t female1 -l fr "attention  la température  du  esse esse dé  est  très élevée";
notify-send --icon=$HOME/.scripts/clef_vide.png 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>"; xfconf-query -c xfce4-notifyd -p /theme -s special;
sleep 11;
xfconf-query -c xfce4-notifyd -p /theme -s Smoke;
notify-send --icon=dialog-warning -t 0 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";

else

echo "<img>/home/jlfh0816/.scripts/temperatureY_jaune.gif</img>";

fi
fi

PS: dans un terminal, on peut facilement tester le bon fonctionnement du script en remplaçant la ligne :

[[ $(hddtemp "$periph") =~ $maReg ]] && celsius=${BASH_REMATCH[1]}

par celles-ci :

#[[ $(hddtemp "$periph") =~ $maReg ]] && celsius=${BASH_REMATCH[1]}
celsius=88

Dernière modification par jlfh0816 (Le 26/08/2022, à 17:28)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#77 Le 29/08/2022, à 10:28

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

Bonjour,
Comme l’avenir de hddtemp est fort compromis à court terme, j’ai tenté de lui trouver une alternative dans mon script pour rendre celui-ci plus pérenne.
A priori, la meilleure solution de rechange serait drivetemp. Il y a toutefois un problème pratique avec ce nouveau module car, bien qu’étant disponible depuis le kernel 5.6 (source), il n’est pas spontanément mis en service dans la 22.04
Du coup, il faut d’abord le mettre en service puis voir comment récupérer sa valeur de façon à pouvoir l’exploiter ensuite dans mon script.

1°) mettre drivetemp en service
Pour cela, je me suis référé au très bon tutoriel décrit ici.
C’est en anglais mais facile à comprendre.
La manip’ décrite concerne un SSD de type SATA. Pour un disque de type NVMe, c’est expliqué un peu plus bas dans le tutoriel en ligne.

Pour résumer :
- s’assurer que le module drivetemp est bien présent dans la distribution (c’est normalement le cas sur une 22.04) :

/usr/sbin/modinfo drivetemp

- créer le dossier du module

sudo mkdir /etc/modules-load.d/

Normalement, ce dossier existe déjà et cette étape est inutile. Sinon, à appliquer.


- créer le fichier de configuration de drivetemp :

echo drivetemp | sudo tee /etc/modules-load.d/drivetemp.conf

- pour automatiser le lancement du module drivetemp à chaque démarrage de session, il faut ouvrir (en mode administrateur) le fichier /etc/modules et y ajouter à la fin une nouvelle ligne contenant simplement le mot drivetemp


- l’auteur du tutoriel conseille ensuite de redémarrer l’ordinateur pour que ces modifications soient bien prises en charge.


- après redémarrage, on vérifie que le module drivetemp est bien chargé :

for m in /sys/class/hwmon/* ; do echo -n "$m = " ; cat $m/name ; done

ce qui renvoie sur ma machine :

/sys/class/hwmon/hwmon0 = acpitz
/sys/class/hwmon/hwmon1 = drivetemp
/sys/class/hwmon/hwmon2 = coretemp
/sys/class/hwmon/hwmon3 = nct6779
/sys/class/hwmon/hwmon4 = asus

On voit que drivetemp est chargé dans hwmon1


Et pour s’assurer définitivement que tout fonctionne bien, on peut faire afficher le capteur drivetemp dans le tableau de bord. Sur ma machine, la température de drivetemp est à gauche (j’ai renommé temp1 en drivetemp) et celle fournie par hddtemp (mon script) est à droite. Et, heureusement, elles sont bien identiques :
i7m2.png
(lien direct ici)


2°) adapter le script pour qu’il utilise drivetemp au lieu de hddtemp
C’est assez facile et cela s’effectue en quatre étapes.

- il faut d’abord savoir sous quelle dénomination le (ou les) disque(s) sont connus de drivetemp. Dans mon cas, c’est vite fait puisque je n’ai qu’un seul disque :

cat /sys/class/scsi_disk/*/device/model

ce qui me renvoie :

Samsung SSD 860

- on peut dès lors accéder à la température de ce disque là :

 cat "$(grep -l "Samsung SSD 860" /sys/class/scsi_disk/*/device/model | xargs dirname)"/hwmon/hwmon*/temp1_input

ce qui me renvoie :

27000

- ensuite, il reste à formater cette valeur pour qu’elle soit exploitable dans mon script (c’est la variable $celsius).
Et donc remplacer 27000 par 27
Ma première idée a été d’extraire les deux premiers chiffres grâce à la commande cut :

cat "$(grep -l "Samsung SSD 860" /sys/class/scsi_disk/*/device/model | xargs dirname)"/hwmon/hwmon*/temp1_input | cut -c1-2

ce qui renvoie :

27

- mais, à la réflexion, ce n’est pas une bonne idée puisque si la température dépasse 100°C pour atteindre par exemple 118°C, la commande cut afficherait 11 alors qu’il faudrait qu’elle affiche 118
Du coup, j’ai trouvé deux autres commandes (cut en mode reverse et sed) qui permettent de corriger le tir :

cat "$(grep -l "Samsung SSD 860" /sys/class/scsi_disk/*/device/model | xargs dirname)"/hwmon/hwmon*/temp1_input | rev | cut -c4- | rev

ou

cat "$(grep -l "Samsung SSD 860" /sys/class/scsi_disk/*/device/model | xargs dirname)"/hwmon/hwmon*/temp1_input | sed 's/...$//'

Dans l’exemple choisi, ces commandes renvoient bien toutes deux :

118

Quant au script final, il est peu modifié puisque seules les deux premières lignes ont changé :

#!/bin/bash
celsius=$(cat "$(grep -l "Samsung SSD 860" /sys/class/scsi_disk/*/device/model | xargs dirname)"/hwmon/hwmon*/temp1_input | rev | cut -c4- | rev);

alerte_jaune=50  # Seuil d'alerte jaune en degré celsius
alarme_rouge=70  # Seuil d'alerte rouge en degré celsius

#création du fond du gif alerte rouge
convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text 0,15 'SSD :'" /home/jlfh0816/.scripts/R1.png;
for i in {2..10} ; do cp /home/jlfh0816/.scripts/R1.png /home/jlfh0816/.scripts/R"$i".png ; done;
convert -delay 10 /home/jlfh0816/.scripts/R*.png -loop 0 /home/jlfh0816/.scripts/gif_vide_75x22pxR.gif;
rm /home/jlfh0816/.scripts/R*.png;

#inscription température hddtemp sur gif alerte rouge
convert /home/jlfh0816/.scripts/gif_vide_75x22pxR.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill '#FF0000'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   /home/jlfh0816/.scripts/temperatureR_rouge.gif

#création du fond du gif alerte jaune
convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text 0,15 'SSD :'" /home/jlfh0816/.scripts/Y1.png;
for i in {2..10} ; do cp /home/jlfh0816/.scripts/Y1.png /home/jlfh0816/.scripts/Y"$i".png ; done;
convert -delay 20 /home/jlfh0816/.scripts/Y*.png -loop 0 /home/jlfh0816/.scripts/gif_vide_75x22pxY.gif;
rm /home/jlfh0816/.scripts/Y*.png;

#inscription température hddtemp sur gif alerte jaune
convert /home/jlfh0816/.scripts/gif_vide_75x22pxY.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill '#FFFF00'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   /home/jlfh0816/.scripts/temperatureY_jaune.gif
          
rm /home/jlfh0816/.scripts/gif_vide_75x22px*.gif


#comparaison temperature SSD aux seuils d'alerte jaune et d'alarme rouge
if [ "$celsius" -le "$alerte_jaune" ]; then
msg="<txt><span>   SSD: </span><span foreground=\"#00FFFF\">"$celsius"°C        </span></txt>"
echo "$msg"

else

if [ "$celsius" -ge "$alarme_rouge" ]; then
echo "<img>/home/jlfh0816/.scripts/temperatureR_rouge.gif</img>";

paplay /usr/share/sounds/sound-icons/glass-water-1.wav;
spd-say -t male1 -l fr "attention  la température  du  esse esse dé  est  très élevée";
notify-send --icon=$HOME/.scripts/clef_vide.png 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>"; xfconf-query -c xfce4-notifyd -p /theme -s special;
sleep 11;
xfconf-query -c xfce4-notifyd -p /theme -s Smoke;
notify-send --icon=dialog-warning -t 0 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";

else

echo "<img>/home/jlfh0816/.scripts/temperatureY_jaune.gif</img>";

fi
fi

Voilà, ainsi modifié, mon script version drivetemp devrait durer plus longtemps que sa version hddtemp !  smile



PS: après avoir rédigé ce post, je me suis aperçu que Tawal avait déjà publié l’année dernière une autre façon d’obtenir la valeur de la température fournie par drivetemp afin de l’utiliser ensuite dans un conky. C’est ici, c’est bien expliqué et sa méthode fonctionne parfaitement. A la différence des auteurs du forum Bunsenlabs, il extrait la température en partant du résultat de la commande sensors et non pas à partir du fichier système hwmon1.

Dernière modification par jlfh0816 (Le 29/08/2022, à 10:41)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#78 Le 29/08/2022, à 10:40

iznobe

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

Bonjour ,

- ensuite, il reste à formater cette valeur pour qu’elle soit exploitable dans mon script (c’est la variable $celsius).
Et donc remplacer 27000 par 27

pourquoi ne pas simplement faire une division par 1000 ?

Dernière modification par iznobe (Le 29/08/2022, à 10:41)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#79 Le 29/08/2022, à 10:44

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

iznobe a écrit :

Bonjour ,

- ensuite, il reste à formater cette valeur pour qu’elle soit exploitable dans mon script (c’est la variable $celsius).
Et donc remplacer 27000 par 27

pourquoi ne pas simplement faire une division par 1000 ?

... parce que je ne sais pas faire !  roll
J'ai pourtant cherché (sans doute mal puisque tu sous-entends que c'est faisable ! ) mais je n'ai pas trouvé.

Dernière modification par jlfh0816 (Le 29/08/2022, à 10:45)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#80 Le 29/08/2022, à 10:45

iznobe

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

celsius= $celsius/1000

ne fonctionne pas ? big_smile
il faudra probablement tronqué le résultat a 3 chiffres ou bien ne pas en autoriser apres la virgule qui est un " . " en anglais / programmation . sauf si la valeur " pêchée " ne retourne que des multiples de 1000 .

Dernière modification par iznobe (Le 29/08/2022, à 10:49)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#81 Le 29/08/2022, à 10:54

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

iznobe a écrit :
celsius= $celsius/1000

ne fonctionne pas ? big_smile
il faudra probablement tronqué le résultat a 3 chiffres ou bien ne pas en autoriser apres la virgule qui est un " . " en anglais / programmation . sauf si la valeur pechée ne retourne que des multiples de 1000 .

Oui, écrit comme ça, ça a l'air simple mais le problème c'est que ma première ligne du script contient déjà une définition de celsius :

celsius=$(cat .....bla ... bla)

Comment pourrai-je ajouter une seconde ligne disant ensuite que

celsius=$celsius/1000

Ou alors, je pourrai peut-être ajouter une nouvelle ligne disant que

celsius_bis=$celsius/1000

et utiliser ensuite celsius_bis dans le reste du script.

Merci beaucoup de ta suggestion, je vais creuser la question !   tongue


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#82 Le 29/08/2022, à 11:05

iznobe

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

au debut du script la variable celsius vaut le cat puis ensuite , au cours du script tu remodifie la meem variable .
si tu n' as plus besoin du contenu de cat blabla par la suite , tu peux tres bien garder le meme nom de variable et lui attribuer une valeur modifiée , ca n' est pas genant . au contraire tu utiliseras moins de variables et donc le script est plus lisible et utilise potentiellement moins de memoire .

Mais si tu preferes tu peux tres bien nommer une nouvelle variable genre : celsius_diviser_par_1000 .

Dernière modification par iznobe (Le 29/08/2022, à 11:06)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#83 Le 29/08/2022, à 11:30

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

@iznobe

Tu as raison, ça fonctionne en utilisant cette ligne :

celsius=$((celsius / 1000));

Merci ! big_smile


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#84 Le 30/08/2022, à 15:07

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

Tawal a écrit :

Pourquoi recréer les gif à chaque fois, une fois fait ils restent utilisables, tu les stocke quelque part et puis c'est tout.
Tu économiseras des cycles de lecture/écriture sur ton SSD (important pour sa durée de vie).

Après quelques péripéties, je suis parvenu à un script qui, suivant la juste remarque de Tawal (post #68), devrait épargner au SSD d’inutiles cycles écriture/effacement.

Pour cela, à chacun de ses lancements par le moniteur générique GenMon, le script commencera désormais par vérifier deux choses :

1°) si les frames constitutives du gif animé de base (cad sans inscription de la température dessus) existent déjà ou pas quelque part dans une archive.
Dans la première éventualité, il les ré-utilise.
Dans la seconde, il les crée puis les archive automatiquement.

2°) si le gif animé final tel qu’il doit être affiché dans le tableau de bord (cad gif de base sur lequel est sur-imprimée la température) existe déjà lui aussi dans une archive.
Dans l’affirmative, il sera ré-utilisé tel quel et, dans la seconde, il sera créé puis archivé.

Les gifs animés «prêts au ré-emploi» sont stockés dans un dossier ~/.scripts/gifs et leurs frames constitutives dans un dossier ~/.scripts/frames_png

A noter que, au cas où ils n'existeraient pas, le script s'occupe également de la création de ~/.scripts/gifs et ~/.scripts/frames_png.

Quant aux propriétés du moniteur générique GenMon, j'ai réglé l'intervalle entre 2 lancements à 5 minutes, je trouve que c'est bien suffisant.


Le comportement attendu de l’affichage dans le tableau de bord est :

1ljz.gif : affichage fixe et coloré en bleu turquoise si température SSD normale (<50°C);

lvbn.gif : affichage clignotant lentement et coloré en jaune si température SSD comprise entre 50 et 69°C;

sqfr.gif : affichage clignotant rapidement et coloré en rouge si température SSD >69°C, avec émission d’une notification par notify-send ainsi qu’une courte annonce vocale.


Le script modifié (recourant à drivetemp plutôt qu'à hddtemp) est le suivant :

#!/bin/bash
celsius=$(cat "$(grep -l "Samsung SSD 860" /sys/class/scsi_disk/*/device/model | xargs dirname)"/hwmon/hwmon*/temp1_input | rev | cut -c4- | rev);
alerte_jaune=50;
alerte_rouge=70;

#################################################température normale: gif bleu##########################################################################

if [ "$celsius" -le "$alerte_jaune" ]; then
  couleur=bleu;
  msg="<txt><span>   SSD: </span><span foreground=\"#00FFFF\">"${celsius}"°C        </span></txt>"
  echo "$msg"
fi

#########################################################alarme rouge: gif rouge########################################################################

if [ "$celsius" -ge "$alerte_rouge" ]; then
  couleur=rouge;
  
    if [ ! -f /home/jlfh0816/.scripts/frames_png ]; then
    mkdir /home/jlfh0816/.scripts/frames_png/ 2>/dev/null;
    fi
  
    if [ ! -f /home/jlfh0816/.scripts/gifs/ ]; then
    mkdir /home/jlfh0816/.scripts/gifs/ 2>/dev/null;
    fi
    
    if [ -f /home/jlfh0816/.scripts/gifs/"$celsius"rouge.gif ]; then
    echo "<img>/home/jlfh0816/.scripts/gifs/"$celsius"rouge.gif</img>"; 
    else
    #création du gif animé de base
    convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text  0,15   'SSD :'" /home/jlfh0816/.scripts/frames_png/X1.png;
    for i in {2..10} ; do cp /home/jlfh0816/.scripts/frames_png/X1.png /home/jlfh0816/.scripts/frames_png/X"$i".png ; done;
    convert -delay 10 /home/jlfh0816/.scripts/frames_png/X*.png -loop 0 /home/jlfh0816/.scripts/frames_png/gif_vide.gif;
    #adaptation du gif animé de base à l'alerte rouge
    convert /home/jlfh0816/.scripts/frames_png/gif_vide.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill '#FF0000'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   /home/jlfh0816/.scripts/gifs/"$celsius"rouge.gif

    echo "<img>/home/jlfh0816/.scripts/gifs/"$celsius"rouge.gif</img>";
    fi
   paplay /usr/share/sounds/sound-icons/glass-water-1.wav;
   spd-say -t female1 -l fr "attention  la température  du  esse esse dé  est  très élevée";
   xfconf-query -c xfce4-notifyd -p /theme -s special;
   notify-send --icon=$HOME/.scripts/clef_vide.png 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";
   sleep 11;
   xfconf-query -c xfce4-notifyd -p /theme -s Smoke;
   notify-send --icon=dialog-warning -t 0 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";
fi

####################################################alerte jaune: gif jaune#############################################################################

if [ "$celsius" -gt "$alerte_jaune" ] && [ "$celsius" -lt "$alerte_rouge" ]; then
  couleur=jaune;
  
    if [ ! -f /home/jlfh0816/.scripts/frames_png ]; then
    mkdir /home/jlfh0816/.scripts/frames_png/ 2>/dev/null;
    fi
  
    if [ ! -f /home/jlfh0816/.scripts/gifs/ ]; then
    mkdir /home/jlfh0816/.scripts/gifs/ 2>/dev/null;
    fi
  
    if [ -f /home/jlfh0816/.scripts/gifs/"$celsius"jaune.gif ]; then
    echo "<img>/home/jlfh0816/.scripts/gifs/"$celsius"jaune.gif</img>";
    else
    #création du gif animé de base
    convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text  0,15   'SSD :'" /home/jlfh0816/.scripts/frames_png/X1.png;
    for i in {2..10} ; do cp /home/jlfh0816/.scripts/frames_png/X1.png /home/jlfh0816/.scripts/frames_png/X"$i".png ; done;
    convert -delay 20 /home/jlfh0816/.scripts/frames_png/X*.png -loop 0 /home/jlfh0816/.scripts/frames_png/gif_vide.gif;
    #adaptation du gif animé de base à l'alerte jaune
    convert /home/jlfh0816/.scripts/frames_png/gif_vide.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill '#FFFF00'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   /home/jlfh0816/.scripts/gifs/"$celsius"jaune.gif

    echo "<img>/home/jlfh0816/.scripts/gifs/"$celsius"jaune.gif</img>";
    fi
fi

Le script est fonctionnel mais à coup sûr perfectible. Du coup, si quelqu’un avait la gentillesse de le relire et me signaler les probables erreurs de syntaxe ou de conception qu’il contient, j’en serai très heureux. Merci par avance ! smile

Dernière modification par jlfh0816 (Le 01/09/2022, à 14:50)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#85 Le 31/08/2022, à 11:25

kamaris

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

jlfh0816 a écrit :

Tu as raison, ça fonctionne en utilisant cette ligne :

celsius=$((celsius / 1000));

Ou bien

((celcius /= 1000))

Hors ligne

#86 Le 31/08/2022, à 12:03

Coeur Noir

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

Je suis admiratif… je comprends à peu près mais ne sais pas faire.

Idéalement, pour rendre ce script « portable » il faudrait que les divers chemins soient « génériques » plutôt que spécifiques à ton installation, genre remplacer les /home/ton_nom par $HOME ? ? ?

Dans le même ordre d'idées, tu dois pouvoir « raccourcir » certaines répétitions de chemins ( emplacements des gif et png ) en en faisant des variables dès le début du script.

Peut-être que https://unix.stackexchange.com/question … hs-in-bash et systemd-path peuvent y aider ?


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#87 Le 31/08/2022, à 13:29

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

kamaris a écrit :
jlfh0816 a écrit :

Tu as raison, ça fonctionne en utilisant cette ligne :

celsius=$((celsius / 1000));

Ou bien

((celcius /= 1000))

Merci kamaris de ta suggestion.
Vu mon niveau, j'ai un peu ramé pour la faire fonctionner mais au bout du compte, tu as raison, ça marche !
Mon problème, c'est que je ne connaissais pas du tout ce raccourci arithmétique /= d'où mes interrogations. En fouinant un peu sur la toile, j'ai trouvé une piste ici pour savoir comment l'utiliser.
Du coup, voici la ligne de commande qui fonctionne chez moi (j'ai attribué arbitrairement une valeur de 97800 pour celsius) :

jlfh0816@Voyager2204:~$ celsius=97800; let celsius=celsius/=1000; echo $celsius
97
jlfh0816@Voyager2204:~$

Et cette commande  ignore même le "800" suivant "97", donc c'est tout bon. Encore merci !  big_smile



edit : je viens d'essayer avec 6 chiffres (température à 107,8°C) et ça fonctionne également :

jlfh0816@Voyager2204:~$ celsius=107800; let celsius=celsius/=1000; echo $celsius
107
jlfh0816@Voyager2204:~$

Dernière modification par jlfh0816 (Le 31/08/2022, à 13:53)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#88 Le 31/08/2022, à 13:44

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

Coeur Noir a écrit :

Je suis admiratif… je comprends à peu près mais ne sais pas faire.

Idéalement, pour rendre ce script « portable » il faudrait que les divers chemins soient « génériques » plutôt que spécifiques à ton installation, genre remplacer les /home/ton_nom par $HOME ? ? ?

Dans le même ordre d'idées, tu dois pouvoir « raccourcir » certaines répétitions de chemins ( emplacements des gif et png ) en en faisant des variables dès le début du script.

Peut-être que https://unix.stackexchange.com/question … hs-in-bash et systemd-path peuvent y aider ?

Merci beaucoup Coeur Noir de ton avis.

Sur le fond, tu as raison et je partage tout à fait ton avis : l'utilisation de chemins relatifs aurait été plus pratique pour que le script soit "portable" comme tu dis.
Le problème avec le moniteur générique GenMon, c'est qu'il ne fonctionne qu'avec un chemin absolu...
Ceci dit, c'est peut-être vrai uniquement dans les propriétés de GenMon, lorsqu'on lui renseigne le chemin du script qu'il doit exécuter.
Peut-être que dans le script lui-même c'est différent et qu'on peut alors y indiquer des chemins relatifs.
Je regarde cela et je reviens poster le résultat.

Et concernant l'utilisation de variables pour éviter les trop nombreuses répétitions de chemins (tu as raison, c'est moche), je vais lire de la doc là-dessus et aussi bien sûr l'article de ton lien et je reviendrai poster si j'arrive à améliorer la rédaction du script. Mais bon, étant donné mon niveau, ça va peut-être prendre un peu de temps...

Je te remercie pour tes remarques constructives, ça fait toujours plaisir !  smile


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#89 Le 31/08/2022, à 14:12

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

Coeur Noir a écrit :

Idéalement, pour rendre ce script « portable » il faudrait que les divers chemins soient « génériques » plutôt que spécifiques à ton installation, genre remplacer les /home/ton_nom par $HOME ? ? ?

Ton idée était bonne Coeur Noir, on peut effectivement utiliser des chemins relatifs dans le script (mais pas dans la "commande" des propriétés GenMon).

Voici donc la nouvelle version du script (recourant toujours à drivetemp plutôt qu'à hddtemp) :

#!/bin/bash
celsius=$(cat "$(grep -l "Samsung SSD 860" /sys/class/scsi_disk/*/device/model | xargs dirname)"/hwmon/hwmon*/temp1_input | rev | cut -c4- | rev);
alerte_jaune=50;
alerte_rouge=70;

#################################################température normale: gif bleu##########################################################################

if [ "$celsius" -le "$alerte_jaune" ]; then
  couleur=bleu;
  msg="<txt><span>   SSD: </span><span foreground=\"#00FFFF\">"${celsius}"°C        </span></txt>"
  echo "$msg"
fi

#########################################################alarme rouge: gif rouge########################################################################

if [ "$celsius" -ge "$alerte_rouge" ]; then
  couleur=rouge;
  
    if [ ! -f $HOME/.scripts/frames_png ]; then
    mkdir $HOME/.scripts/frames_png/ 2>/dev/null;
    fi
  
    if [ ! -f $HOME/.scripts/gifs/ ]; then
    mkdir $HOME/.scripts/gifs/ 2>/dev/null;
    fi
    
    if [ -f $HOME/.scripts/gifs/"$celsius"rouge.gif ]; then
    echo "<img>$HOME/.scripts/gifs/"$celsius"rouge.gif</img>"; 
    else
    #création du gif animé de base
    convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text  0,15   'SSD :'" $HOME/.scripts/frames_png/X1.png;
    for i in {2..10} ; do cp $HOME/.scripts/frames_png/X1.png $HOME/.scripts/frames_png/X"$i".png ; done;
    convert -delay 10 $HOME/.scripts/frames_png/X*.png -loop 0 $HOME/.scripts/frames_png/gif_vide.gif;
    #adaptation du gif animé de base à l'alerte rouge
    convert $HOME/.scripts/frames_png/gif_vide.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill '#FF0000'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   $HOME/.scripts/gifs/"$celsius"rouge.gif

    echo "<img>$HOME/.scripts/gifs/"$celsius"rouge.gif</img>";
    fi
   paplay /usr/share/sounds/sound-icons/glass-water-1.wav;
   spd-say -t female1 -l fr "attention  la température  du  esse esse dé  est  très élevée";
   xfconf-query -c xfce4-notifyd -p /theme -s special;
   notify-send --icon=$HOME/.scripts/clef_vide.png 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";
   sleep 11;
   xfconf-query -c xfce4-notifyd -p /theme -s Smoke;
   notify-send --icon=dialog-warning -t 0 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";
fi

####################################################alerte jaune: gif jaune#############################################################################

if [ "$celsius" -gt "$alerte_jaune" ] && [ "$celsius" -lt "$alerte_rouge" ]; then
  couleur=jaune;
  
    if [ ! -f $HOME/.scripts/frames_png ]; then
    mkdir $HOME/.scripts/frames_png/ 2>/dev/null;
    fi
  
    if [ ! -f $HOME/.scripts/gifs/ ]; then
    mkdir $HOME/.scripts/gifs/ 2>/dev/null;
    fi
  
    if [ -f $HOME/.scripts/gifs/"$celsius"jaune.gif ]; then
    echo "<img>$HOME/.scripts/gifs/"$celsius"jaune.gif</img>";
    else
    #création du gif animé de base
    convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text  0,15   'SSD :'" $HOME/.scripts/frames_png/X1.png;
    for i in {2..10} ; do cp $HOME/.scripts/frames_png/X1.png $HOME/.scripts/frames_png/X"$i".png ; done;
    convert -delay 20 $HOME/.scripts/frames_png/X*.png -loop 0 $HOME/.scripts/frames_png/gif_vide.gif;
    #adaptation du gif animé de base à l'alerte jaune
    convert $HOME/.scripts/frames_png/gif_vide.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill '#FFFF00'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   $HOME/.scripts/gifs/"$celsius"jaune.gif

    echo "<img>$HOME/.scripts/gifs/"$celsius"jaune.gif</img>";
    fi
fi


Bon, reste maintenant à essayer d'exploiter ta seconde idée, celle qui consiste à remplacer les chemins trop répétitifs par des variables...
Ça risque d'être plus laborieux  tongue

Dernière modification par jlfh0816 (Le 01/09/2022, à 14:50)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#90 Le 31/08/2022, à 14:41

kamaris

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

x /= y est juste un raccourci pour x = x / y, que l'on trouve dans de nombreux langages, dont le C (originellement ?).
En bash, tu peux l'utiliser dès lors que tu te trouves dans un contexte arithmétique, et on préfèrera utiliser ((…)) à let :

$ celsius=97800; ((celsius /= 1000)); echo $celsius
97
$ 

Dernière modification par kamaris (Le 31/08/2022, à 14:42)

Hors ligne

#91 Le 31/08/2022, à 15:00

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

@kamaris

Merci kamaris, c'est un plaisir d'apprendre comme ça !

Je retiens pour ta remarque à propos du remplacement de let par ((…)), je suis sûr que ça me resservira plus tard.   smile

Dernière modification par jlfh0816 (Le 31/08/2022, à 15:00)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#92 Le 31/08/2022, à 15:23

iznobe

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

Bonjour , on pourrait creer une fonction qui prendrait une variable en paramètre qui traiterait les gifs .
on pourrait alors ecrire un truc du genre :

function gestion_gif(couleur)
{
      if [ ! -f $HOME/.scripts/gifs/frames_png ]; then
    mkdir $HOME/.scripts/frames_png/ 2>/dev/null;
    fi
  
    if [ ! -f $HOME/.scripts/gifs/ ]; then
    mkdir $HOME/.scripts/gifs/ 2>/dev/null;
    fi
  
    if [ -f $HOME/.scripts/gifs/"$celsius"jaune.gif ]; then
    echo "<img>$HOME/.scripts/gifs/"$celsius"jaune.gif</img>";
    else
    #création du gif animé de base
    convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text  0,15   'SSD :'" $HOME/.scripts/frames_png/X1.png;
    for i in {2..10} ; do cp $HOME/.scripts/frames_png/X1.png $HOME/.scripts/frames_png/X"$i".png ; done;
    convert -delay 20 $HOME/.scripts/frames_png/X*.png -loop 0 $HOME/.scripts/frames_png/gif_vide.gif;
    #adaptation du gif animé de base à l'alerte jaune
    convert $HOME/.scripts/frames_png/gif_vide.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill '#FFFF00'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   $HOME/.scripts/gifs/"$celsius"jaune.gif

    echo "<img>$HOME/.scripts/gifs/"$celsius"jaune.gif</img>";
}
# En remplacant jaune par $couleur .

if [ "$celsius" -ge "$alerte_rouge" ]; then gestion_gif $couleur
if [ "$celsius" -gt "$alerte_jaune" ] && [ "$celsius" -lt "$alerte_rouge" ]; then gestion_gif $couleur .
elsif ...

ou avec un switch case si besoin de plus de couleurs .

ca rend le code bien plus lisible et moins repetitif .

Dernière modification par iznobe (Le 31/08/2022, à 15:26)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#93 Le 31/08/2022, à 16:39

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

iznobe a écrit :

Bonjour , on pourrait creer une fonction qui prendrait une variable en paramètre qui traiterait les gifs .
on pourrait alors ecrire un truc du genre :
.../...
ca rend le code bien plus lisible et moins repetitif .

Un grand merci à toi iznobe, cest super ce que tu as écrit, ta fonction fait le job.

En fait, j'ai "juste" 2 petits soucis pour que le job soit soit parfait :

- dans le cadre de l'alerte jaune, la fonction devrait indiquer :
          . delay 20
          . "#FF0000"

- dans le cadre de l'alarme rouge, la fonction devrait indiquer :
          . delay 10
          . "#FFFF00"


Concernant les couleurs hexadécimales "#FF0000" (= jaune) et "#FFFF00" (= rouge) gérées par ImageMagick, j'ai bien essayé de les remplacer par la variable "$couleur" mais les chiffres apparaissent alors écrits en blanc.
Et si je les remplace par "red" ou "yellow', j'ai une icône d'erreur.

Là, j'en ai un peu marre de rester au clavier, je vais sortir et m'aérer un peu. J'y reviendrai demain avec l'esprit plus reposé et, j'espère, les idées plus claires.

En tout cas, je te renouvelle mes remerciements, moi qui n'avais jamais utilisé une fonction... j'ai trouvé ça super comme invention ! tongue


Voici le script avec ta fonction :

#!/bin/bash
celsius=$(cat "$(grep -l "Samsung SSD 860" /sys/class/scsi_disk/*/device/model | xargs dirname)"/hwmon/hwmon*/temp1_input | rev | cut -c4- | rev);
alerte_jaune=50;
alerte_rouge=70;

################################################fonction gestion_gif####################################################################################
function gestion_gif ($couleur)
{
    if [ ! -f $HOME/.scripts/gifs/frames_png ]; then
    mkdir $HOME/.scripts/frames_png/ 2>/dev/null;
    fi
  
    if [ ! -f $HOME/.scripts/gifs/ ]; then
    mkdir $HOME/.scripts/gifs/ 2>/dev/null;
    fi
  
    if [ -f $HOME/.scripts/gifs/"$celsius""$couleur".gif ]; then
    echo "<img>$HOME/.scripts/gifs/"$celsius""$couleur".gif</img>";
    else
    #création du gif animé de base
    convert -size 75x22 xc:transparent -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill white -draw "text  0,15   'SSD :'" $HOME/.scripts/frames_png/X1.png;
    for i in {2..10} ; do cp $HOME/.scripts/frames_png/X1.png $HOME/.scripts/frames_png/X"$i".png ; done;
    convert -delay 20 $HOME/.scripts/frames_png/X*.png -loop 0 $HOME/.scripts/frames_png/gif_vide.gif;
    #adaptation du gif animé de base à l'alerte jaune
    convert $HOME/.scripts/frames_png/gif_vide.gif -coalesce -geometry +20+40 -gravity East \
        -font "/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf" -pointsize 12 -fill "#FF0000"  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   $HOME/.scripts/gifs/"$celsius""$couleur".gif

    echo "<img>$HOME/.scripts/gifs/"$celsius""$couleur".gif</img>"
    fi
}
########################################################################################################################################################

#################################################température normale: gif bleu##########################################################################

if [ "$celsius" -le "$alerte_jaune" ]; then
  couleur=bleu;
  msg="<txt><span>   SSD: </span><span foreground=\"#00FFFF\">"${celsius}"°C        </span></txt>"
  echo "$msg"
fi

#########################################################alarme rouge: gif rouge########################################################################
if [ "$celsius" -ge "$alerte_rouge" ]; then
couleur=rouge;
function gestion_gif ($couleur)
   paplay /usr/share/sounds/sound-icons/glass-water-1.wav;
   spd-say -t female1 -l fr "attention  la température  du  esse esse dé  est  très élevée";
   xfconf-query -c xfce4-notifyd -p /theme -s special;
   notify-send --icon=$HOME/.scripts/clef_vide.png 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";
   sleep 11;
   xfconf-query -c xfce4-notifyd -p /theme -s Smoke;
   notify-send --icon=dialog-warning -t 0 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";
fi

####################################################alerte jaune: gif jaune#############################################################################
if [ "$celsius" -gt "$alerte_jaune" ] && [ "$celsius" -lt "$alerte_rouge" ]; then
couleur=jaune;
function gestion_gif ($couleur)
fi

Dernière modification par jlfh0816 (Le 31/08/2022, à 16:45)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#94 Le 31/08/2022, à 16:46

iznobe

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

- dans le cadre de l'alerte jaune, la fonction devrait indiquer :
          . delay 20
          . "#FF0000"

- dans le cadre de l'alarme rouge, la fonction devrait indiquer :
          . delay 10
          . "#FFFF00"

dans la fonction tu peux y mettre alors par exemple :

if $couleur=rouge ; then
    . delay 10
    . "#FFFF00"
fi
elsif $couleur jaune; then
     . delay 20
     . "#FF0000"
fi

Au passage joli travail big_smile

Dernière modification par iznobe (Le 31/08/2022, à 16:49)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#95 Le 31/08/2022, à 17:30

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

@iznobe

Encore merci de me consacrer du temps...

J'essaie en vain de formuler correctement ce que tu me dis au post précédent #94 mais sans succès.

Voici ce que j'ai essayé de placer au tout début de ta fonction :

function gestion_gif ($couleur)
{
    if [[ "$couleur"=rouge ]]; then
    delay=10;
    couleur_hexa="#FFFF00";
    fi
    
    if [[ "$couleur"=jaune ]]; then
    delay=20;
    couleur_hexa="#FF0000";
    fi

et j'appelle ensuite $delay et $couleur_hexa dans les commandes convert de ImageMagick. Mais bon, ça ne donne pas le résultat escompté. Je dois sûrement mal formuler mes tests if ... then

Bon, je laisse tomber pour aujourd'hui, je n'ai plus les idées très claires. Demain sera un autre jour. Bonne soirée et encore merci !  smile


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#96 Le 31/08/2022, à 17:33

iznobe

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

essaie :

if [ "$couleur"=rouge ]; then

ou bien

[[ "$couleur"=rouge ]]; then

qui veulent dire la meme chose .

ou encore :

if [[ "$couleur" ==  rouge ]]

Dernière modification par iznobe (Le 31/08/2022, à 17:36)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#97 Le 31/08/2022, à 17:40

kamaris

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

Des espaces pour les tests, contrairement aux affectations de variables :

if [ "$couleur" = rouge ]; then

Hors ligne

#98 Le 31/08/2022, à 17:58

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

@iznobe
non, pas mieux...

@kamaris
j'ai testé mais pas mieux non plus.


Je finis par me demander si ce n'est pas un problème spécifique aux commandes convert de ImageMagick. Je vais creuser de ce côté car c'est quand m^me bizarre que ça ne fonctionne pas.

Je vous laisse en vous renouvelant mes remerciements à tous les deux car là je dois vraiment y aller. A demain !

Dernière modification par jlfh0816 (Le 31/08/2022, à 17:58)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#99 Le 31/08/2022, à 18:54

iznobe

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

oui , bon en fait c' est normal roll

c' est du a la portée des variables .
une variable definit dans une fonction , ne peut pas etre recuperée en dehors de cette fonction .

tu peux utiliser les conditions comme ennoncé ci dessus , mais en dehors de la fonction .
autre possibilité , mais ca se corse , et en bash je ne sais pas si c' est possible , faire retourner des valeurs a la fonction . en l' occurence le code couleur et le delay dont tu aurais besoin , on passe par un tableau ou un tuple selon les langages , mais là ca depasse mes faibles connaissances en bash roll

Dans la fonction on cree un tableau a 2 entrées ayant pour indice 0 et 1 par exemple .
dedans on y met les valeurs adequate , et on fait un return du tableau en derniere ligne de fonction .
ensuite tu peux recuperer le tableau et t ' en servir donc dans le main = le code principal , hors fonction donc . Mais , je repete , je ne sais pas faire en bash .

Dernière modification par iznobe (Le 31/08/2022, à 19:00)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#100 Le 01/09/2022, à 15:55

jlfh0816

Re : Genmon: affichage température SSD dans le tableau de bord sur 22.04

@iznobe

Bon, ben ce n'est pas une bonne nouvelle cette limitation des valeurs de variables au sein d'une fonction ...  hmm
Dommage, j'aimais bien le principe de cette fonction mais, après avoir trituré ta proposition dans tous les sens ce matin, je jette l'éponge.

Du coup, je me suis rabattu sur la version du script qui fonctionne bien (celle du post #89) et j'ai essayé de la rendre plus lisible en y incorporant le maximum de choses dans des variables définies au démarrage :

alerte_jaune=50;
alerte_rouge=70;
path_frames="$HOME/.scripts/frames_png/";
path_gifs="$HOME/.scripts/gifs/";
font="/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf";
phrase="attention  la température  du  esse esse dé  est  très élevée";

Est-ce que c'est plus lisible comme ça ?


Quant au reste du script, j'y ai également apporté quelques minimes modifications cosmétiques. Voici ce que ça donne au final :

#!/bin/bash
celsius=$(cat "$(grep -l "Samsung SSD 860" /sys/class/scsi_disk/*/device/model | xargs dirname)"/hwmon/hwmon*/temp1_input | rev | cut -c4- | rev);
alerte_jaune=50;
alerte_rouge=70;
path_frames="$HOME/.scripts/frames_png/";
path_gifs="$HOME/.scripts/gifs/";
font="/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf";
phrase="attention  la température  du  esse esse dé  est  très élevée";

#ligne suivante à décommenter pour tester le script avec une température SSD donnée
#celsius=92; 

#################################################température normale: chiffres bleus non clignotants#####################################################

if [ "$celsius" -le "$alerte_jaune" ]; then
  msg="<txt><span>   SSD: </span><span foreground=\"#00FFFF\">"${celsius}"°C        </span></txt>"
  echo "$msg"
fi

#########################################################alarme rouge: chiffres rouges clignotants#######################################################

if [ "$celsius" -ge "$alerte_rouge" ]; then
  
    if [ ! -d "$path_frames" ]; then
    mkdir "$path_frames" 2>/dev/null;
    fi
  
    if [ ! -d "$path_gifs" ]; then
    mkdir "$path_gifs" 2>/dev/null;
    fi
    
    if [ -d "$path_gifs""$celsius"rouge.gif ]; then
    echo "<img>"$path_gifs""$celsius"rouge.gif</img>"; 
    else
    #création du gif animé de base
    convert -size 75x22 xc:transparent -font "$font" -pointsize 12 -fill white -draw "text  0,15   'SSD :'" "$path_frames"X1.png;
    for i in {2..10} ; do cp "$path_frames"X1.png "$path_frames"X"$i".png ; done;
    convert -delay 10 "$path_frames"X*.png -loop 0 "$path_frames"gif_vide.gif;
    #inscription en rouge de la température sur le gif animé de base
    convert "$path_frames"gif_vide.gif -coalesce -geometry +20+40 -gravity East \
        -font "$font" -pointsize 12 -fill '#FF0000'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   "$path_gifs""$celsius"rouge.gif

    echo "<img>"$path_gifs""$celsius"rouge.gif</img>";
    fi
   aplay /usr/share/sounds/sound-icons/glass-water-1.wav;
   spd-say -t female1 -l fr "$phrase";
   xfconf-query -c xfce4-notifyd -p /theme -s special;
   notify-send --icon=$HOME/.scripts/clef_vide.png 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";
   sleep 11;
   xfconf-query -c xfce4-notifyd -p /theme -s Smoke;
   notify-send --icon=dialog-warning -t 0 'Température SSD critique' "<span color='#FF0000' font='26px'><b>      "$celsius" °C</b></span>";
fi

####################################################alerte jaune: chiffres jaunes clignotants############################################################

if [ "$celsius" -gt "$alerte_jaune" ] && [ "$celsius" -lt "$alerte_rouge" ]; then
  
    if [ ! -d "$path_frames" ]; then
    mkdir "$path_frames" 2>/dev/null;
    fi
  
    if [ ! -d "$path_gifs" ]; then
    mkdir "$path_gifs" 2>/dev/null;
    fi
  
    if [ -d "$path_gifs""$celsius"jaune.gif ]; then
    echo "<img>"$path_gifs""$celsius"jaune.gif</img>";
    else
    #création du gif animé de base
    convert -size 75x22 xc:transparent -font "$font" -pointsize 12 -fill white -draw "text  0,15   'SSD :'" "$path_frames"X1.png;
    for i in {2..10} ; do cp "$path_frames"X1.png "$path_frames"X"$i".png ; done;
    convert -delay 20 "$path_frames"X*.png -loop 0 "$path_frames"gif_vide.gif;
    #inscription en jaune de la température sur le gif animé de base
        convert "$path_frames"gif_vide.gif -coalesce -geometry +20+40 -gravity East \
        -font "$font" -pointsize 12 -fill '#FFFF00'  \
          \( -clone 0 -annotate 0 "$celsius °C    "        \) -swap 0 +delete \
          \( -clone 1 -annotate 0 "$celsius °C    "        \) -swap 1 +delete \
          \( -clone 2 -annotate 0 "$celsius °C    "        \) -swap 2 +delete \
          \( -clone 3 -annotate 0 "$celsius °C    "        \) -swap 3 +delete \
          \( -clone 4 -annotate 0 "$celsius °C    "        \) -swap 4 +delete \
          -layers OptimizeFrame   "$path_gifs""$celsius"jaune.gif

    echo "<img>"$path_gifs""$celsius"jaune.gif</img>";
    fi
fi


Bon, je vais maintenant me pencher sur l'article dont Coeur Noir m'a communiqué le lien (post #86) et voir si je peux en tirer quelque chose pour mon script. Je sens que ça ne va pas être évident, ça m'a l'air ardu ! tongue

Dernière modification par jlfh0816 (Le 04/09/2022, à 16:26)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne