Page 3 sur 4

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

Posté : mer. 23 mai 2018 21:33
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: :)

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

Posté : mer. 23 mai 2018 21:36
par cyrille
oui les retours seront intéressants...
Ensuite si rapidité -> tcl / Tk ou python ;)

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

Posté : mer. 23 mai 2018 23:39
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 !

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

Posté : mer. 23 mai 2018 23:44
par zeb
tioker a écrit :@Alain --> bonne nuit !
:l Alain est un hibou, souhaite lui bonne nuit demain matin ;) :lol:

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

Posté : jeu. 24 mai 2018 06:52
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)

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

Posté : jeu. 24 mai 2018 09:10
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 ;)

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

Posté : jeu. 24 mai 2018 09:45
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

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

Posté : jeu. 24 mai 2018 12:39
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) ;)

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

Posté : ven. 25 mai 2018 02:45
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

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

Posté : ven. 25 mai 2018 13:25
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 )

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

Posté : ven. 25 mai 2018 15:28
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
;)