Résolu le 15-11-18 Réalisation d'un script bash pour afficher une température en graphique

Avatar du membre
alain
Administrateur du site
Messages : 17178
Enregistré le : dim. 11 oct. 2015 23:41
Localisation : Chelles
Contact :

Réalisation d'un script bash pour afficher une température en graphique

Message par alain »

Bonjour Image

Voila mon soucis:

Pour connaitre la température de mon GPU ATI, j'utilise dans un terminal la commande suivante:

Code : Tout sélectionner

aticonfig --od-gettemperature 
J'ai besoin de connaitre cette température pour adapter la vitesse du ventilateur. Oui fglrx ne sais pas le faire automatiquement et c'est le seul seul
pilote ATI que je peux utiliser sur LMDE2 (debian8). De toute façon je ne suis même pas certain que le pilote amdgpu-pro (debian9) sache adapter la vitesse du ventilo automatiquement... :roll:

Enfin bref, ce qui fait que je dois ouvrir un terminal et lancer cette commande pour connaitre cette température et cela de multiples fois à une fréquence élévée
de manière à ne pas risquer de griller mon GPU.

Mais cette nuit j'ai repenser à un sujet de tioker sur zenity : viewtopic.php?f=19&t=9483&p=112209#p111973
Et je me suis dit que ça ne serait pas bête du tout de me faire un petit script qui me renverrai cette commande dans une fenêtre :l

Ce que j'ai fait et voila le résultat:

Code : Tout sélectionner

#afficher la température du GPU ATI dans une fenêtre
aticonfig --od-gettemperature | zenity --text-info --title "temperature GPU"
Comme vous le savez (je l'ai déjà dit dans des sujets ici) Je suis nul en bash, alors c'est certainement pas la bonne manière de procéder, mais ça fonctionne.
J'ai mon petit lanceur sur le bureau, je clique ed'su et ça m'ouvre une fenêtre avec la température du GPU:
Image
(J'ai fais la capture assez large pour faire plaisir à un ami du forum) :D
Comme vous le voyez c'est écris petit, mais la n'est pas mon problème pour le moment.

Mon problème est que bien entendu la valeur n'est pas rafraîchie... :roll: . Je dois donc fermer la fenêtre zenity et re-cliquer sur mon lanceur pour avoir une nouvelle valeur.
Pour bien faire j'aimerai avoir cette valeur rafraîchie toutes les 5-10 s.

J'ai bien pensé à un crontab que j'ai paramétré comme cela:

Code : Tout sélectionner

*/1 * * * * /home/alain/tempati.sh
Mais la est la limite de mes compétence, car la c'est paramétré pour lancer tempati.sh toutes les minutes.
cron sait il faire moins?
Et une autre chose, au bout de pas longtemps je vais avoir mon bureau couvert de fenêtres zenity, si je lance ça. Non? ça m'étonnerai que cron
ferme la fenêtre précédente avant de relancer le script... Image

Alors est ce que quelqu'un (j'en vois bien un :l ) saurait me dire comment faire pour que la valeur soit automatiquement rafraîchie?

En vous remerciant pas avance.
Bonne journée à tous et au plaisir de vous lire Image
Modifié en dernier par alain le lun. 28 mai 2018 22:16, modifié 2 fois.
Слава Україні _ слава героям махновщини
PC1 : CM : ASRock 990FX | CPU: AMD FX 8350-8 cores, 4 GHz | RAM: 16 Go DDR3 1600 MHz | CG: GTX 1080TI-11 Go | OS : LM 22 Xfce 4.18 | K: 6.8
PC2
:Core2 Quad Q9650 @ 3 GHz | CG: Nvidia GTX 650TI | OS: LM 22 Wilma Xfce 4.18| K: 6.8
PC3 :Core i7-2600 @ 3,5 GHz | CG: ATI HD 4650 | OS: Emmade5 Xfce 4.18.0 | K: 6.1
PC4 : AMD Ryzen 5 3500X 4GHz | CG: GTX 970 | Ram : 8GB |OS : Debian 12.8 | K: 6.1
In a world without walls and fences, who needs windows and gates?
Avatar du membre
arghlub
Administrateur du site
Messages : 11560
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

Re: comment automatiser un retour de commande dans une fenêtre zenity?

Message par arghlub »

Salut Alain ;)

Intéressant ton p'tit problème.

Perso plutôt que d'utiliser cron (qui n'accepte pas de valeur en seconde), je ferais tout cela dans le script Bash, en faisant une boucle infinie avec une temporisation.

Par exemple :

Code : Tout sélectionner

#!/bin/bash
# Afficher la température du GPU ATI dans une fenêtre
while [ 1 ]        # Boucle infinie car condition toujours vraie
do
    aticonfig --od-gettemperature | zenity --text-info --title "temperature GPU"
    sleep 5        # Temporisation de 5s
done
Pour que tu n'ai pas à chaque fois une fenêtre à valider, une solution serait d'utiliser des notifications, ce qui donnerait ce code :

Code : Tout sélectionner

#!/bin/bash
# Afficher la température du GPU ATI dans une notification
while [ 1 ]
do
    tempGPU=$(aticonfig --od-gettemperature)        # Assignation de la sortie de la commande à une variable, c'est "plus propre"
    zenity --notification --window-icon="info" --text="Température GPU\n"$tempGPU
    sleep 5
done
Je ne peux pas tester (tu sais que je n'ai pas d'ATI), mais ça devrait marcher... À voir ;)

[EDIT] oups, grillé par Cyrille, mais 2 avis valent mieux qu'un :)
Tour1 (custom) CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : LMint 22.3 | Debian 12 | MX Linux | XFCE
Tour2 (custom) CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 22.1 | MX Linux | XFCE
Portable2 MacBook Air A1466 | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MX Linux XFCE
─────( pour une informatique libre ! )─────
Avatar du membre
arghlub
Administrateur du site
Messages : 11560
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

Re: comment automatiser un retour de commande dans une fenêtre zenity?

Message par arghlub »

Salut cyrille,
cyrille a écrit :Le hic c'est que ça va te faire une quantité de fenetre....
Solution : les notifications, si c'est juste pour afficher l'information. ;)

Il serait aussi possible d'afficher la notification uniquement dès que la température dépasse un certain seuil.
Tour1 (custom) CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : LMint 22.3 | Debian 12 | MX Linux | XFCE
Tour2 (custom) CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 22.1 | MX Linux | XFCE
Portable2 MacBook Air A1466 | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MX Linux XFCE
─────( pour une informatique libre ! )─────
Avatar du membre
arghlub
Administrateur du site
Messages : 11560
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

Re: comment automatiser un retour de commande dans une fenêtre zenity?

Message par arghlub »

Re,

Et si tu n'aimes pas les notifications voici encore une alternative pour afficher dans une fenêtre qui disparait au bout de 10secondes (à modifier selon ton souhait) si elle n'est pas fermée volontairement (avec l'option --timeout).

Code : Tout sélectionner

#!/bin/bash
# Version3 : Afficher la température du GPU ATI dans une fenêtre qui s'évapore au bout de 10secondes
while [ 1 ]
do
    tempGPU=$(aticonfig --od-gettemperature)
    zenity --info --title="Température GPU" --width=200 --timeout=10 --text=$tempGPU
    sleep 5
done
Tour1 (custom) CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : LMint 22.3 | Debian 12 | MX Linux | XFCE
Tour2 (custom) CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 22.1 | MX Linux | XFCE
Portable2 MacBook Air A1466 | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MX Linux XFCE
─────( pour une informatique libre ! )─────
Avatar du membre
alain
Administrateur du site
Messages : 17178
Enregistré le : dim. 11 oct. 2015 23:41
Localisation : Chelles
Contact :

Re: comment automatiser un retour de commande dans une fenêtre zenity?

Message par alain »

Bonjour Cyrille et Arghlub.

Merci pour vos réponses. ;)

Effectivement comme le dit Cyrille a chaque passage de la boucle, je vais avoir une fenêtre supplémentaire qui s'ouvre.
Donc Arghlub je testerai ton derniers script mercredi soir et te dirai. J'inverserai juste les temps de time out et le sleep pour ne pas avoir 2 fenêtres en même temps.

Sinon en ce qui concerne fancontrole, lmsensors et conky, applets, etc...Vous pensez bien que c'est les premières choses que j'ai essayées. (qui fonctionnent sur les Nvidia)
Mais le capteur de température du GPU ne veux absolument pas être reconnu, il n' y a que cette commande qui fonctionne.

Arghlub tu parles des notifications. peux tu m'en dire plus? Je ne vois pas comment ajouter cette commande aux notifications.
Pour rappel c'est un kde 4, tu devrais avoir de bons souvenirs :mrgreen:

Encore merci à vous deux et a mercredi (ou jeudi matin pour vous) pour les retours.
Слава Україні _ слава героям махновщини
PC1 : CM : ASRock 990FX | CPU: AMD FX 8350-8 cores, 4 GHz | RAM: 16 Go DDR3 1600 MHz | CG: GTX 1080TI-11 Go | OS : LM 22 Xfce 4.18 | K: 6.8
PC2
:Core2 Quad Q9650 @ 3 GHz | CG: Nvidia GTX 650TI | OS: LM 22 Wilma Xfce 4.18| K: 6.8
PC3 :Core i7-2600 @ 3,5 GHz | CG: ATI HD 4650 | OS: Emmade5 Xfce 4.18.0 | K: 6.1
PC4 : AMD Ryzen 5 3500X 4GHz | CG: GTX 970 | Ram : 8GB |OS : Debian 12.8 | K: 6.1
In a world without walls and fences, who needs windows and gates?
Avatar du membre
arghlub
Administrateur du site
Messages : 11560
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

Re: comment automatiser un retour de commande dans une fenêtre zenity?

Message par arghlub »

alain a écrit :J'inverserai juste les temps de time out et le sleep pour ne pas avoir 2 fenêtres en même temps.
Je ne pense pas que cela soit nécessaire car normalement tu n'auras pas 2 fenêtres en même temps parce que le "sleep" ne devrait se déclencher qu'après fermeture de la fenêtre zenity (soit par clic de ta part, soit au bout du temps défini avec "timeout")... mais tu m'as mis le doute donc à tester.

──────────────────────────────
Voici un exemple de notification dans XFCE (tu sais que je ne suis plus avec KDE) :
Image
Tour1 (custom) CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : LMint 22.3 | Debian 12 | MX Linux | XFCE
Tour2 (custom) CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 22.1 | MX Linux | XFCE
Portable2 MacBook Air A1466 | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MX Linux XFCE
─────( pour une informatique libre ! )─────
Avatar du membre
tioker
modérateur
Messages : 1178
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: comment automatiser un retour de commande dans une fenêtre zenity?

Message par tioker »

Bonjour, Si jamais je pouvais aider...

J'ai trouvé ce post et je me suis amusé dessus avec un petit script qui affiche une valeur si elle dépasse un max.
Ça marchait ... sauf que la commande zenity ne semble pas interruptive, c'est à dire que si le script n'est pas dans la fenêtre active, pas de notification. Semble-t-il ...

Donc j'ai cherché sur le net et j'ai trouvé ce post (en anglais) qui pose le même problème et cette solution (en français) qui donne le détail de la commande à passer. En deux mots on utilise la commande notify-send pour envoyer ... une notification.

Dans le petit script qui suit je teste toutes les 10 secondes si on est dans la dernière dizaine de secondes d'une minute; si oui je notifie.

Bien tester les options de la commande car j'ai pu constater qu'avec certaines options (critical) d'autres marchaient différemment (timeout). A tester à la main dans un terminal.

Résultat
Image

Voilà. Si ça peut aider...

Code : Tout sélectionner

#!/bin/bash
#
while [ 1 ]
do
	seconde=$(date +%S)
	if  [[ $seconde -gt 50 ]] ;	then notify-send -t 3000 "Plus que $((60-$seconde)) secondes" ; fi
	sleep 10
done
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Avatar du membre
arghlub
Administrateur du site
Messages : 11560
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence

Re: comment automatiser un retour de commande dans une fenêtre zenity?

Message par arghlub »

Salut tioker ;)
tioker a écrit :Ça marchait ... sauf que la commande zenity ne semble pas interruptive, c'est à dire que si le script n'est pas dans la fenêtre active, pas de notification. Semble-t-il
Je suis pas sûr d'avoir bien compris...

Car quand je lance un script avec une notification toutes les 3 secondes par exemple et que je change de fenêtre active, les notifs ne s'arrêtent pas !
Et heureusement, car sinon je vois pas l'intérêt des notifs de zenity.
En image :
Image

Même si on change de bureau virtuel, la notif apparaît sur les autre bureaux (desquels le script n'a pas été lancé).

Donc je sais pas si j'ai bien compris :?

Ceci dit, notify-send est nickel pour faire des notifs c'est un outil classique mais qui rempli parfaitement sa fonction. ;)
Tour1 (custom) CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : LMint 22.3 | Debian 12 | MX Linux | XFCE
Tour2 (custom) CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 22.1 | MX Linux | XFCE
Portable2 MacBook Air A1466 | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MX Linux XFCE
─────( pour une informatique libre ! )─────
Avatar du membre
tioker
modérateur
Messages : 1178
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: comment automatiser un retour de commande dans une fenêtre zenity?

Message par tioker »

arghlub a écrit :Salut tioker ;)
Je suis pas sûr d'avoir bien compris...
Si si tu as bien compris. Mais je m'en vais faire des tests complémentaires.
Ce que j'avais remarqué: une fenêtre terminal dans laquelle je lançais mon script avec Zenity. Si c'était la fenêtre active, ça fonctionnait; sinon pas d'alerte. Bien sûr la commande notify-send fonctionnait.

Je suis sous Cinnamon.

En fait, j'ai quelques minutes; j'ai fait mon test. Si la fenêtre active ne remplit pas tout l'écran, l'information Zenity apparaît. Pour moi c'est en plein milieu (paramétrable?). Mais si la fenêtre active prend tout l'écran, ça masque la notification Zenity. De plus, Zenity est synchrone, c'est à dire que la procédure reprend une fois que le timeout est atteint ou qu'on a valider la notification. C'est pas bien grave mais si tu as un timeout de 5 secondes et un sleep de 10 secondes, ton test passera toutes les 15 secondes. C'est pas le cas avec notify-send (asynchrone).

Voici mon code de test (j'ai accéléré les affichages parque que dehors il fait trop beau ... je retourne dans mon jardin. :mrgreen:

Code : Tout sélectionner

#!/bin/bash
#
while [ 1 ]
do
	seconde=$(date +%S)
	if  [[ $seconde -gt 0 ]]
	then 
		notify-send -t 3000 "Plus que $((60-$seconde)) secondes"
		zenity --info --title="Il ne reste " --width=100 --timeout=3 --text="Plus que $((60-$seconde)) secondes"
	fi
	sleep 10
done
Mon résultat

Image

Voilà. Toutes les solutions paraissent bonnes à prendre. A Alain de tester et de dire ...

Bonne journée !
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Avatar du membre
tioker
modérateur
Messages : 1178
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: comment automatiser un retour de commande dans une fenêtre zenity?

Message par tioker »

Ah oui, j'oubliais. Il y a aussi les vrais logiciels de supervision, genre Nagios. Mais c'est peut-être un peu lourd....
Image
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Verrouillé