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

Postez ici vos scripts Bash, Python, etc.
Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

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

Message par arghlub »

Dernier message de la page précédente :

;) Cyrille

Mais y'a qu'Alain qui pourra tester tout ça sur sa bécane et selon ses goûts en KDE4 ...
.........
Au travail l'ami Alain ! :ugeek: :)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

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

Message par cyrille »

oui les retours seront intéressants...
Ensuite si rapidité -> tcl / Tk ou python ;)
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
tioker
Messages : 980
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 »

alain a écrit :Mon souhait c'est d'avoir une fenêtre fixe avec la valeur qui change à l'intérieur toutes les x secondes...
J'ai testé un truc notify-send mais il ne marche pas :roll: .
Normalement, si je boucle toutes les 10 secondes et que je mets un timeout de 10 secondes (-t 10000) sur ma notification, ça fait comme si ça rafraîchissait ... Et bien non. Pourquoi ? Parce que ce post. En fait y'aurait un problème avec Cinnamon. Mais si on utilise un autre bureau... C'est pour ça que j'en parle.
Commande pour tester

Code : Tout sélectionner

notify-send -t 10000 "Titre de la notification..." "... et son détail"
Sinon un lien vers des détails commentés de la commande.

@Alain --> bonne nuit !
HP Victus 16: Mint 21.3 Cinnamon 6,0,4 + Windows 11 - Ryzen 5 5600H - NVIDIA GeForce GTX 1650 - Mem 16Go - SSD 512Go
pCloud Synchronisation en temps réel des 4 dossiers personnels

zeb
Messages : 16473
Enregistré le : ven. 19 juin 2015 22:13
Localisation : plus ici

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

Message par zeb »

tioker a écrit :@Alain --> bonne nuit !
:l Alain est un hibou, souhaite lui bonne nuit demain matin ;) :lol:

Avatar du membre
alain
Administrateur du site
Messages : 14704
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 »

Hello tous Image

Résultats des tests effectué avec Arghlub cette nuit:

1) le script avec la boucle infini ET zenity, ne me convient pas car bien entendu ouverture/fermeture de la fenêtre toutes le x secondes.
2) Idem pour celui avec zenity --notification, ça ouvre une notification toutes les x secondes.
Au passage la syntaxe : zenity --notification --window-icon="info" --text="Température GPU\n"$tempGPU ne fonctionne pas dans le cas ou
la variable "tempGPU" est le résultat de ma commande, en revanche elle fonctionne si on lui donne une valeur... Pb contourné en pipant un echo de la variable
sur zenity .
3) Essais avec la proposition d'utiliser notify-send comme suit : "notify-send -t 10000 "Titre de la notification..." "... et son détail" . ça Fonctionne, mais qu'une fois...
(c'est donc la même chose sur KDE4 que sur Cinnamon)
4) Essais d'un mix notify-send plus boucle infinie: Bingo ! la notification s'affiche, reste et le texte est rafraîchi toutes le x secondes.
Ce qui donne:

Code : Tout sélectionner

#!/bin/bash
# Version5 : Afficher dans une notification rafraîchie toutes les 5 secondes
while [ 1 ]
do
    tempGPU=$(aticonfig --od-gettemperature)
    notify-send "tempGPU" "$tempGPU" 
    sleep 5
done
Voila ça pourrait être le pied si la température était affichée...Car la fenêtre de notification est trop petite pour afficher tout le texte du résultat de ma commande.
Image
Donc ce qu'il faudrait, c'est soit agrandir la fenêtre de notication afin d'afficher tout le texte. mais je n'ai pas trouver comment faire sur KDE..
Soit de supprimer de la variable "tempGPU" tout le texte qui ne me sert à rien (default addaptater -Supported device 6781 Sensor 0) pour ne garder
que la valeur de la température. Et la ça devrait largement passer dans la fenêtre de notification.
Alors vous avez compris quel est le nouveau challenge pour vous :D
J'ai bien chercher à filtrer, tronquer le résultat de ma commande «aticonfig --od-gettemperature» avant de l'affectée à la variable "tempGPU".
Mais mon très faible niveau en bash ne m'a pas permit de réussir :roll:

Bonne journée à vous, et un premier merci pour m'avoir permis d'en arriver la et un second, d'avance, à ceux qui vont se pencher sur ce problème de retour
de commande trop long .

Image

PS: @Cyrille, fancontrol tout comme lm-sensor ne détectent pas ma carte graphique ATI R9 290. Contrairement à mes carte Nvidia où ça fonctionne très bien.
Pour lire la température et régler la vitesse du ventilateur je suis obligé de passer par des commandes, d'où l’existence de ce sujet. Si lm-sensor et fancontrol avaient
fonctionné pour cette carte, je ne me serai pas embêté à faire un script...

PS2: C'est bon j'ai réussi a tronquer le resultat de la commande et la température est affichée dans la notification :
Image
j'ai modifier la ligne de la variable comme suit:

Code : Tout sélectionner

tempGPU=$(aticonfig --od-gettemperature | grep  Temperature)
PC are like air conditioning, they becomes useless when you open Windows (L.T)
PC1 : CM : ASRock 990FX | CPU: AMD FX 8350-8 cores, 4 GHz | RAM: 16 Go DDR3 1600 MHz | CG: ATI RX 580-8 Go | OS : LM 20.3 Uma Xfce 4.16 | K: 5.4
PC2
:Core2 Quad Q9650 @ 3 GHz | CG: Nvidia GTX 650TI | OS: LM 21.3 Xfce 4.18| K: 6.5
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 10.5 | K: 5.10
In a world without walls and fences, who needs windows and gates?

Avatar du membre
tioker
Messages : 980
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,

Une piste pour extraire l'élément qui va bien ? A noter que je crois qu'IFS ne sait traiter QUE des caractères uniques de séparation.

Code : Tout sélectionner

#       Je définit une variable
Variable="Voici mon texte, blablabla ; a suivre" 
#       Je change mes caractères standards de séparation
IFS=",;"
#       Je mets ma variable dans un tableau
Tab=($Variable)
#       Je vais chercher le 2ème élément du tableau 
echo "L'élément entre séparateurs est ${Tab[1]}"
L'élément entre séparateurs est  blablabla 
Sinon, j'ai l'impression que notre petite équipe est du type Follow The Sun

Bonne journée ;)
HP Victus 16: Mint 21.3 Cinnamon 6,0,4 + Windows 11 - Ryzen 5 5600H - NVIDIA GeForce GTX 1650 - Mem 16Go - SSD 512Go
pCloud Synchronisation en temps réel des 4 dossiers personnels

Avatar du membre
alain
Administrateur du site
Messages : 14704
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 »

Salut Tokier.

D'abord merci, pour l'idée d'uliser notify-send ;)
Ensuite , intéressante cette manipe du tableau, il faudra que je teste ça...
tioker a écrit : Sinon, j'ai l'impression que notre petite équipe est du type Follow The Sun
Pourquoi? tu es sur quel fuseau horaire toi?
Moi je serai plutot "run away the sun" :D
PC are like air conditioning, they becomes useless when you open Windows (L.T)
PC1 : CM : ASRock 990FX | CPU: AMD FX 8350-8 cores, 4 GHz | RAM: 16 Go DDR3 1600 MHz | CG: ATI RX 580-8 Go | OS : LM 20.3 Uma Xfce 4.16 | K: 5.4
PC2
:Core2 Quad Q9650 @ 3 GHz | CG: Nvidia GTX 650TI | OS: LM 21.3 Xfce 4.18| K: 6.5
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 10.5 | K: 5.10
In a world without walls and fences, who needs windows and gates?

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

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

Message par arghlub »

Salut Alain ;)
alain a écrit :Résultats des tests effectué avec Arghlub cette nuit
;) Tu m'as fait traîner cette nuit .... c'est pas dans mes habitudes de jouer au hibou :l .... :? :lol: :lol:
Alors, pour filtrer la température dans la sortie de ta commande, ça devrait pas être compliqué. On pourrait par exemple faire ça avec “awk”.

La sortie de ta commande :

Code : Tout sélectionner

aticonfig --od-gettemperature
est un truc du style :

Code : Tout sélectionner

Default Adapter - Supported device 67B1                  Sensor 0: Temperature - 60.00 C
on remarque de suite qu'on pourrait se servir du tiret "-" comme séparateur pour isoler le «60.00 C»,
donc on va "piper" la commande dans un «awk -F " - " '{print $3}'».

Petit test (détourné, vu que je n'ai pas d'ATI) :

Code : Tout sélectionner

$ echo "Default Adapter - Supported device 67B1                  Sensor 0: Temperature - 60.00 C" | awk -F " - " '{print $3}'

60.00 C
Bingo !

Donc, ajuste ta variable tempGPU dans le script ...

──────────────────────────────
Nouvelle version 6 :

Code : Tout sélectionner

#!/bin/bash
# Version6 : Afficher dans une notification rafraîchie toutes les 5 secondes
while [ 1 ]
do
    tempGPU=$(aticonfig --od-gettemperature | awk -F " - " '{print $3}')
    notify-send "tempGPU" "$tempGPU"
    sleep 5
done
Ça devrait rouler (ou pas) ;)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

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

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

Message par alain »

salut Arghlub Image

J'ai fais le même test que toi:

Code : Tout sélectionner

alain@lmde2 ~ $ echo "Default Adapter - Supported device 67B1                  Sensor 0: Temperature - 60.00 C" | awk -F " - " '{print $3}'
60.00 C
alain@lmde2 ~ $ 
Effectivement ça fonctionne.

En revanche un fois inséré dans le script:

Code : Tout sélectionner

#!/bin/bash
# Version6 : Afficher dans une notification rafraîchie toutes les 5 secondes
while [ 1 ]
do
    tempGPU=$(aticonfig --od-gettemperature | awk -F " - " '{print $3}')
    notify-send "tempGPU" "$tempGPU"
    sleep 5
done

Il n'y a rien dans la notification a part le titre "tempGPU" :?

J'ai donc testé la commande avec awk, mais cette fois sans copier/coller le résultat de la commande, mais en mettant directement la commande:

Code : Tout sélectionner

alain@lmde2 ~ $ aticonfig --od-gettemperature | awk -F " - " '{print $3}'
alain@lmde2 ~ $ 
Rien.... :? :l

Il faut donc croire que le résultat de la commande affecté à la variable tempGPU est différent du texte lui même copier sur le résultat de la commande.
Peut être les "-" ne sont pas considérés comme des "-" dans le résultat de la commande, tant que ce n'est pas affiché à l'écran... Je suppute la :roll: :l

Bizarrement, si je demande a awk d'affecter la seconde colonne à la variable, la ça fonctionne, étrangement, mais y a un retour:

Code : Tout sélectionner

alain@lmde2 ~ $ aticonfig --od-gettemperature | awk -F " - " '{print $2}'

Supported device 67B1
60.00 C
alain@lmde2 ~ $ 
Ce que je retrouve dans ma notification en faisant cette modification dans le script.
Comme tu vois ça me retourne un bout de la seconde colonne (Supported device 6781) et la 3éme (60.00 C). :shock:
Bref j'y comprends rien au fonctionnement de awk, mais peu importe car avec awk ($2) ou grep j'ai ma température et ça me suffit.

Sinon je viens de constater quelque chose, si je lance le script en graphique (lanceur) je ne peux plus l'arrêter autrement qu'en le tuant.
N' y aurait il pas une condition qu'on pourrait donner à "while" ou "until" pour que la boucle s'arrête par exemple sur action de la touche [echap] ?

J'espère que ça sera ma dernière question, concernant ce script :l

@+ Image
PC are like air conditioning, they becomes useless when you open Windows (L.T)
PC1 : CM : ASRock 990FX | CPU: AMD FX 8350-8 cores, 4 GHz | RAM: 16 Go DDR3 1600 MHz | CG: ATI RX 580-8 Go | OS : LM 20.3 Uma Xfce 4.16 | K: 5.4
PC2
:Core2 Quad Q9650 @ 3 GHz | CG: Nvidia GTX 650TI | OS: LM 21.3 Xfce 4.18| K: 6.5
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 10.5 | K: 5.10
In a world without walls and fences, who needs windows and gates?

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

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

Message par arghlub »

Yo Alain ;)

Alors, tout d'abord pour le awk ... je pense avoir compris ... :ugeek:
En fait, le retour de ta commande doit être sur 2 lignes, comme ça :

Code : Tout sélectionner

Default Adapter - Supported device 67B1
Sensor 0: Temperature - 60.00 C
Donc, «awk -F " - " '{print $2}'» retourne la 2ème colonne (séparée par " - ") de chaque ligne. Ce qui effectivement te donne :

Code : Tout sélectionner

Supported device 67B1
60.00 C
Pour régler cela (n'avoir que le «60.00 C»), on va demander à awk de travailler uniquement sur la 2nde ligne contenant le mot «Temperature».

Nouvelle version du script (variable tempGPU modifiée) :

Code : Tout sélectionner

#!/bin/bash
# Version 7.1 : temp du GPU ATI -Afficher dans une notification rafraîchie toutes les 5 secondes
while [ 1 ]
do
    tempGPU=$(aticonfig --od-gettemperature | grep Temperature | awk -F " - " '{print $2}')
    notify-send "tempGPU" "$tempGPU"
    sleep 5
done
ou mieux :

Code : Tout sélectionner

#!/bin/bash
# Version 7.2 : temp du GPU ATI -Afficher dans une notification rafraîchie toutes les 5 secondes
while [ 1 ]
do
    tempGPU=$(aticonfig --od-gettemperature | awk -F " - " '$0~/Temperature/ {print $2}')
    notify-send "tempGPU" "$tempGPU"
    sleep 5
done
Et là, ça devrait être tout bon (du moins je l'espère ! :D )
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

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

Message par arghlub »

Pour ton (dernier) souci : comment arrêter le script avec une touche de raccourci ...
Dans le script, peut-être que cela serait possible en passant par la commande «trap»... mais j'en suis pas sûr et je pense qu'il faudrait en plus que le script soit au premier-plan.
Donc ça me paraît compliqué :?

:idea: par contre, voici une solution de contournement :
Tu fais un raccourci général dans ton DE et tu y entres la commande «killall» pour tuer ton processus.
Teste dans un terminal avant de faire le raccourci.

Code : Tout sélectionner

killall NOM_DE_TON_SCRIPT.sh
;)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Verrouillé