Contenu | Rechercher | Menus

Annonce

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.

nombre réponses : 25

#0 -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 25/10/2023, à 16:31

jlfh0816
Réponses : 17

Bonjour,

J’ai bidouillé un petit script appelé veracash.sh qui me permet de récupérer en temps réel le cours de l’or (gramme et once) sur le site web éponyme puis de mettre en forme les valeurs téléchargées afin qu’elles soient exploitables dans un tableau Calc lequel actualise lui-même ses propres données chaque minute.

Le téléchargement des valeurs qui m’intéressent (gramme et once) est effectué grâce à l’option - dump de w3m (navigateur web utilisable dans un terminal). Pour lever toute ambiguïté, je précise que j’ai bien entendu préalablement sollicité et obtenu l’accord écrit de la société afin de respecter leur droits d’auteurs.

Afin d’automatiser le processus d’insertion et de mise à jour des valeurs téléchargées, j’ai choisi de faire appel à un second script appelé mon_script.sh (pas très original mais je manque d’idées…) dont la fonction est triple :
- exécuter une première fois le sous-script veracash.sh afin que le tableur Calc dispose d’une première salve de valeurs avant son ouverture;
- ensuite, ouvrir Calc sur le tableau dédié à cette gestion ;
- enfin, relancer en boucle le sous-script veracash.sh toutes les minutes afin que Calc dispose de valeurs en temps réel.

Lorsque l’utilisateur ferme Calc (en privilégiant l’option « sauvegarder les données »), cette action de fermeture entraîne l’arrêt automatique du script principal mon_script.sh

Et, dans un dernier temps, wmctrl ferme la fenêtre du terminal actif.

Je me permets de faire appel à vous au sujet du script principal mon_script.sh car, même s’il fonctionne tant bien que mal, plusieurs choses dysfonctionnent :
- l’arrêt automatique de mon_script.sh ne s’effectue qu’après un laps de temps de 30 à 60 secondes. Je ne comprends pas pourquoi la fermeture n’est pas instantanée. Peut-être l’attente d’achèvement d’une boucle de 60 secondes du sous-script veracash.sh ?
- ce script principal ne fonctionne pas du tout dans un lanceur, même si je choisis de le faire exécuter dans un terminal. Je précise que j’utilise des chemins absolus dans la commande du lanceur.
Dans cette configuration « lanceur », Calc s’ouvre correctement mais jamais le sous-script veracash.sh (ni sa boucle) : la syntaxe de son appel n’est peut-être pas correcte ?

Merci beaucoup par avance de vos remarques et de votre aide !

Voici le script principal mon_script.sh :

#!/bin/bash

# exécuter le sous-script veracash.sh une première fois
$HOME/.scripts/veracash.sh;

#patienter 5 secondes, le temps du téléchargement d'une première salve de données
sleep 5;

#ouvrir (dans une session unique) le tableur Calc sur le tableau veracash.ods
libreoffice --calc $HOME/.scripts/veracash.ods &
calc_pid=$!

#exécuter le script veracash.sh toutes les 60 secondes
while true; do
    $HOME/.scripts/veracash.sh;
    sleep 60;

# Vérifier si le processus Calc est toujours en cours d'exécution
    if ! ps -p $calc_pid > /dev/null; then
        break
    fi
done

#ferme la fenêtre du terminal
wmctrl -c :ACTIVE:

#1 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 25/10/2023, à 18:36

jlfh0816
Réponses : 17

Merci de ta réponse Watael.
J'ai donc testé ta proposition en remplaçant simplement (je n'ai rien changé d'autre dans le script) :

 sleep 60

dans la boucle par

 sleep 60 & wait

Je n'observe pas de changement du comportement du script à la fermeture manuelle de Calc : mon_script.sh finit bien par s'arrêter automatiquement mais toujours au bout de 30 à 60 secondes seulement. Et wmctrl finit ensuite le travail en fermant la fenêtre du terminal.
Merci en tout cas de ta réponse !

#2 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 26/10/2023, à 09:43

jlfh0816
Réponses : 17

Bonjour Watael,
le script veracash.sh s'exécute entièrement en 1 à 2 secondes (enfin, lorsque la connexion internet fonctionne normalement smile ).
Il s'est toujours bien comporté et n'a jamais généré de message d'erreur.
Est-ce que tu souhaites que je le poste si ça peut permettre d'avancer ?

#3 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 26/10/2023, à 10:42

jlfh0816
Réponses : 17

Le problème de l'exécution par un lanceur est résolu : j'avais fait une erreur dans l'indication des chemins roll .

Donc, il ne reste plus à résoudre que le problème du temps (trop long, 30 à 60 secondes) d'arrêt automatique du script principal après fermeture du tableur Calc.

#4 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 27/10/2023, à 11:01

jlfh0816
Réponses : 17

Merci noje de ta proposition.
J'ai testé mais ça ne change rien au comportement du script principal mon_script.sh : il nécessite toujours 30 à 60 secondes pour stopper automatiquement après la fermeture manuelle de Calc.

Ceci dit, je l'utilise maintenant par l'intermédiaire d'un lanceur et, à l'intérieur de celui-ci, j'ai décoché la case "exécuter dans un terminal" (je suis sous Xubuntu). Ca me permet de ne plus afficher de fenêtre du terminal sur le bureau et par conséquent je ne me pré-occupe plus trop de savoir si le script principal s'est arrêté ou pas. En réalité, il doit probablement continuer à être actif pendant 30 à 60 secondes mais comme je ne le vois plus dans un terminal, ça ne me tracasse moins. Faut juste que je fasse attention à ne pas relancer mon_script.sh avant 60 secondes pour ne pas avoir deux sessions du script en fonctionnement en même temps.

#5 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 27/10/2023, à 15:11

jlfh0816
Réponses : 17

Merci noje de ta réponse.
Mais non, il n'y a rien de secret, ce n'est pas dans mes habitudes smile.

Le script principal mon_script.sh est déjà dans mon post #1

Quant au sous-script veracash.sh, je le partage bien volontiers :

#!/bin/bash
w3m -dump https://www.veracash.com/fr/cours-or > $HOME/.scripts/resultat1.txt;

#les valeurs GoldSpot et GolPremium qui sont téléchargées par ce script relèvent du droit d'auteur de la société VeraCash.

#on sélectionne dans resultat1.txt la partie du texte contenant le cours de l'once "Spot" puis on extrait la valeur
grep -A 2 "Quel est le prix de l'once d'or aujourd'hui ?" $HOME/.scripts/resultat1.txt > $HOME/.scripts/resultat2.txt;
spot_once=$(grep -Eo '[0-9]+(\.[0-9]+)? €' $HOME/.scripts/resultat2.txt | sed 's/ €//');

#on sélectionne dans resultat1.txt la partie du texte contenant le cours de l'once "Premium" puis on extrait la valeur
grep -A 3 "Quel est le prix de l'once d'or aujourd'hui ?" $HOME/.scripts/resultat1.txt | tail -n 1 > $HOME/.scripts/resultat3.txt;
premium_once=$(grep -Eo '[0-9]+(\.[0-9]+)? €' $HOME/.scripts/resultat3.txt | sed 's/ €//');

#on sélectionne dans resultat1.txt la partie du texte contenant le cours du gramme "Spot" puis on extrait la valeur
grep -A 2 "Quel est le prix du gramme d'or aujourd'hui ?" $HOME/.scripts/resultat1.txt | tail -n 1 > $HOME/.scripts/resultat4.txt;
spot_gramme=$(grep -Eo '[0-9]+(\.[0-9]+)? €' $HOME/.scripts/resultat4.txt | sed 's/ €//');

#on sélectionne dans resultat1.txt la partie du texte contenant le cours du gramme "Premium" puis on extrait la valeur
grep -A 3 "Quel est le prix du gramme d'or aujourd'hui ?" $HOME/.scripts/resultat1.txt | tail -n 1 > $HOME/.scripts/resultat5.txt;
premium_gramme=$(grep -Eo '[0-9]+(\.[0-9]+)? €' $HOME/.scripts/resultat5.txt | sed 's/ €//');

#on remplace le point décimal par une virgule et on crée les fichiers xml que Calc sait utiliser
echo "$spot_once" | tr '.' ',' > $HOME/.scripts/spot_once.xml;
echo "$premium_once" | tr '.' ',' > $HOME/.scripts/premium_once.xml;
echo "$spot_gramme" | tr '.' ',' > $HOME/.scripts/spot_gramme.xml;
echo "$premium_gramme" | tr '.' ',' > $HOME/.scripts/premium_gramme.xml

PS: lorsque j'exécute le script principal mon_script.sh par l'intermédiaire d'un lanceur, je supprime sa dernière ligne:

wmctrl -c :ACTIVE:

#6 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 29/10/2023, à 17:34

jlfh0816
Réponses : 17

Bonjour noje et merci beaucoup pour ta patience.

J’ai testé les deux scripts en leur ajoutant "set -x" et voici les retours affichés sur le terminal :

1°) pour le script principal mon_script.sh

jlfh0816 @ Voyager1804  ~/.scripts
└─ $ ▶ ./mon_script.sh
+ /home/jlfh0816/.scripts/veracash.sh
+ sleep 5
+ calc_pid=424
+ libreoffice --calc /home/jlfh0816/.scripts/veracash.ods
+ true
+ /home/jlfh0816/.scripts/veracash.sh
+ sleep 60
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: cHRM chunk does not match sRGB
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: cHRM chunk does not match sRGB
+ ps -p 424
+ break

2°) pour le sous-script veracash.sh

jlfh0816 @ Voyager1804  ~/.scripts
└─ $ ▶ ./veracash.sh
+ w3m -dump https://www.veracash.com/fr/cours-or
+ grep -A 2 'Quel est le prix de l'\''once d'\''or aujourd'\''hui ?' resultat1.txt
++ grep -Eo '[0-9]+(\.[0-9]+)? €' resultat2.txt
++ sed 's/ €//'
+ spot_once=1875.2
+ grep -A 3 'Quel est le prix de l'\''once d'\''or aujourd'\''hui ?' resultat1.txt
+ tail -n 1
++ grep -Eo '[0-9]+(\.[0-9]+)? €' resultat3.txt
++ sed 's/ €//'
+ premium_once=1931.46
+ grep -A 2 'Quel est le prix du gramme d'\''or aujourd'\''hui ?' resultat1.txt
+ tail -n 1
++ grep -Eo '[0-9]+(\.[0-9]+)? €' resultat4.txt
++ sed 's/ €//'
+ spot_gramme=60.29
+ grep -A 3 'Quel est le prix du gramme d'\''or aujourd'\''hui ?' resultat1.txt
+ tail -n 1
++ grep -Eo '[0-9]+(\.[0-9]+)? €' resultat5.txt
++ sed 's/ €//'
+ premium_gramme=62.1
+ echo 1875.2
+ tr . ,
+ echo 1931.46
+ tr . ,
+ echo 60.29
+ tr . ,
+ echo 62.1
+ tr . ,

A priori, il y a donc un message d’erreur de 4 lignes, en rapport avec l'exécution du script principal mon_script.sh :

libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: cHRM chunk does not match sRGB
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: cHRM chunk does not match sRGB

Ce message semble s’afficher au cours de l’exécution de la boucle de 60 secondes.
Il évoque un problème de librairie png mais je suis circonspect car je n’utilise aucune image au format png (ni d’ailleurs aucune autre d’un format différent).

J’ai fait une recherche rapide sur la toile et, a priori, ça n’est qu’un message d’avertissement ("warning") et pas un message d’erreur ?
Le fait est que ça n’empêche pas le script de s’exécuter.

#7 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 02/11/2023, à 16:24

jlfh0816
Réponses : 17

Merci noje de ta réponse.
Je vais donc chercher sur les forums pour LibreOffice Calc et je reviendrai poster si j'obtiens une explication.
En tout cas, merci beaucoup de t'être penché sur mon problème.

#8 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 30/11/2023, à 17:38

jlfh0816
Réponses : 17

N’ayant toujours pas réussi à comprendre et donc à corriger ce qui ne va pas dans mon script mon_script.sh, j’ai tenté une autre approche en remplaçant la boucle

while true; do
    $HOME/.scripts/veracash.sh;
    sleep 60;

par une autre chargée de vérifier (chaque seconde) si le nombre total de secondes qui s’est écoulé depuis le lancement du script est un multiple de 60 ou pas. Si c’est le cas, le sous-script veracash.sh est exécuté. Dans le cas contraire, il ne se passe rien hormis la poursuite du décompte des secondes.

Autre modification, la vérification du statut affiché / non affiché de la feuille de calcul Calc est assurée par wmctrl.

Avec ces deux modifications, le script principal fonctionne beaucoup mieux. Notamment, je n’ai plus à attendre 60 secondes après la fermeture de la fenêtre Calc pour obtenir l’arrêt du script principal et du sous-script.

Voici la nouvelle version du script principal mon_script.sh:


#!/bin/bash

# initialiser la variable pour le temps écoulé en secondes
SECONDS=0

# exécuter une première fois le sous-script veracash.sh
"$HOME/.scripts/veracash.sh"

echo "le sous-script veracash.sh a été exécuté une première fois"
echo "attente 5 secondes"
sleep 5

# ouvrir la feuille de calcul veracash.ods
libreoffice --calc "$HOME/.scripts/veracash.ods" &
echo "le tableau Calc a été ouvert"
echo "attente 5 secondes"
sleep 5

while true; do
    # obtenir l'heure actuelle au format HH:MM:SS
    current_time=$(date +"%T")

    # Si le temps écoulé depuis le lancement du script est un multiple de 60 secondes
    if [ $((SECONDS % 60)) -eq 0 ]; then
        # Exécuter le sous-script veracash.sh
        "$HOME/.scripts/veracash.sh"
        echo "$current_time : relance du sous-script veracash.sh"
    fi

    # Attendre une seconde avant de vérifier à nouveau
    sleep 1

    # Vérifier si la fenêtre du tableur est ouverte
    if wmctrl -l | grep "veracash.ods" >/dev/null; then
        echo "$current_time : la fenêtre du tableur est affichée: poursuite du script principal"
    else
        echo "$current_time : la fenêtre du tableur a été fermée: arrêt du script principal"
        echo "dans 5 secondes" 
        sleep 5
        exit
    fi
done

#9 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 30/11/2023, à 17:41

jlfh0816
Réponses : 17

J’ai également tenté de convertir le script principal mon_script.sh et le sous-script veracash.sh en python.
En bidouillant (beaucoup car je ne maîtrise pas du tout ce langage), j’y suis arrivé pour le sous-script mais je n’y suis pas parvenu pour le script principal roll
Si cela peut intéresser quelqu’un, voici ci-dessous le sous-script veracash dans sa version python. Il me paraît s’exécuter plus rapidement que sa version bash.

#!/usr/bin/python3
# coding=utf-8
import subprocess
import re
import os

def run_w3m(url):
    try:
        result = subprocess.run(["w3m", "-dump", url], check=True, capture_output=True, text=True)
        html_content = result.stdout
        return html_content
    except subprocess.CalledProcessError as e:
        print(f"Erreur lors de l'exécution de w3m : {e}")
        return ""

def extract_and_save(lines, output_path):
    if lines:
        result_text = "\n".join(lines)
        expanded_path = os.path.expanduser(output_path)
        with open(expanded_path, "w") as output_file:
            output_file.write(result_text)

def extract_value_and_save(text, output_path):
    match = re.search(r'([0-9]+(\.[0-9]{1,2})?) €', text)

    if match:
        value = match.group(1)
        # s'assurer que la virgule décimale est suivie d'au moins un chiffre
        if '.' in value:
            value = f"{float(value):.2f}"

        expanded_path = os.path.expanduser(output_path)
        # remplacer le point décimal par une virgule et sauvegarder dans un fichier
        with open(expanded_path, "w") as output_file:
            output_file.write(value.replace('.', ','))

print("Début de l'exécution de veracash.py")

url = "https://www.veracash.com/fr/cours-or"
html_content = run_w3m(url)

if html_content:
    # once d'or
    pattern_once = re.compile(r"Quel est le prix de l'once d'or aujourd'hui ?(.+?)\n(.+?)\n(.+?)\n", re.DOTALL)
    match_once = pattern_once.search(html_content)
    extract_and_save([match_once.group(i) for i in range(1, 4)], "~/.scripts/resultat2.txt")
    extract_value_and_save(match_once.group(2), "~/.scripts/resultat3.txt")
    extract_value_and_save(match_once.group(3), "~/.scripts/resultat4.txt")

    # redirection vers les fichiers XML
    extract_value_and_save(match_once.group(2), "~/.scripts/spot_once.xml")
    extract_value_and_save(match_once.group(3), "~/.scripts/premium_once.xml")

    # gramme d'or
    pattern_gramme = re.compile(r"Quel est le prix du gramme d'or aujourd'hui ?(.+?)\n(.+?)\n(.+?)\n", re.DOTALL)
    match_gramme = pattern_gramme.search(html_content)
    extract_and_save([match_gramme.group(i) for i in range(1, 4)], "~/.scripts/resultat5.txt")
    extract_value_and_save(match_gramme.group(2), "~/.scripts/resultat6.txt")
    extract_value_and_save(match_gramme.group(3), "~/.scripts/resultat7.txt")

    # redirection vers les fichiers XML
    extract_value_and_save(match_gramme.group(2), "~/.scripts/spot_gramme.xml")
    extract_value_and_save(match_gramme.group(3), "~/.scripts/premium_gramme.xml")

    print("Extraction et sauvegarde réussies.")
    print("Fin de l'exécution de veracash.py")

#10 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 30/11/2023, à 17:52

jlfh0816
Réponses : 17

J’ai oublié : lorsque j'exécute le script principal dans un terminal, j’ai toujours un message d’avertissement qui, sans être identique, ressemble malgré tout à celui déjà évoqué à la fin du post #12 :

(soffice:65058): Gtk-WARNING **: 16:42:48.638: Theme parsing error: main-dark.css:2486:0: Expected a valid selector

(soffice:65058): Gtk-WARNING **: 16:42:48.674: Theme parsing error: main-dark.css:2486:0: Expected a valid selector

(soffice:65058): Gtk-WARNING **: 16:42:48.795: Theme parsing error: main-dark.css:2486:0: Expected a valid selector

(soffice:65058): Gtk-WARNING **: 16:42:49.084: Theme parsing error: main-dark.css:2486:0: Expected a valid selector

Je ne comprends pas pourquoi il apparaît car je n’utilise aucune image de quelque format que ce soit. Ces avertissements apparaissent juste après l’ouverture de Calc mais je n’ai rien trouvé à ce sujet sur la toile...
Le bon côté de la chose, c'est qu'il ne s'agit que d'un message d'avertissement, il n'empêche pas le bon déroulement du script.

#11 Re : -1 »  [RESOLU] script bash et python pour téléchargement de données ds Calc » Le 18/12/2023, à 19:35

jlfh0816
Réponses : 17

Pour ceux que cela intéresse, j’ai enfin réussi à convertir le script principal mon_script.sh en python. Il fonctionne très bien en duo avec le sous-script veracash.py du post #16.

Voici le code :

#!/usr/bin/python3
# coding=utf-8
import os
import subprocess
import time
from datetime import datetime

# Chemins en variables
tableau_calc = os.path.expanduser("~/.scripts/veracash.ods")
sous_script = os.path.expanduser("~/.scripts/veracash.py")

# Initialiser la variable pour le temps écoulé en secondes
seconds = 0

# Exécuter le sous-script veracash.py une première fois
subprocess.run(["/usr/bin/python3.10", sous_script])

print("le sous-script veracash.py a été exécuté une première fois")
print("attente 5 secondes")
time.sleep(5)

# Ouvrir le tableau veracash.ods
subprocess.Popen(["libreoffice", "--calc", tableau_calc])
print("le tableau Calc a été ouvert")
print("attente 5 secondes")
time.sleep(5)

while True:
    # Obtenir l'heure actuelle au format HH:MM:SS
    current_time = datetime.now().strftime("%H:%M:%S")

    # Si le temps écoulé depuis le lancement du script est un multiple de 60 secondes
    if seconds % 60 == 0:
        # Exécuter le sous-script veracash.py
        subprocess.run(["/usr/bin/python3.10", sous_script])
        print(f"{current_time} : relance du sous-script veracash.py")

    # Attendre une seconde avant de vérifier à nouveau
    time.sleep(1)

    # Vérifier si la fenêtre du tableur est ouverte
    try:
        subprocess.check_output(["wmctrl", "-l"]).decode().index("veracash.ods")
        print(f"{current_time} : la fenêtre du tableur est affichée: poursuite du script principal")
    except ValueError:
        print(f"{current_time} : la fenêtre du tableur a été fermée: arrêt du script principal")
        print("dans 5 secondes")
        time.sleep(5)
        exit()

    # Incrémenter le temps écoulé
    seconds += 1

#12 -1 »  [ Résolu ] problème avec la commande grep » Le 09/10/2023, à 22:00

jlfh0816
Réponses : 3

Bonjour,
J’essaie d’extraire des prix affichés entre deux chaînes de caractères, en utilisant la commande grep.

Le fichier d’origine contenant les prix est fichier.txt. Il ne contient que les deux lignes suivantes :

Aujourd'hui, le prix spot de l'once d'or est de 1755.38 € et 1847.36 $.
Le prix de l'once d'or premium est de 1834.37 € et 1930.49 $.

Le but est :
- extraire la valeur 1755.38 € puis la rediriger dans un fichier spot.txt
- extraire la valeur 1834.37 €  puis la rediriger dans un fichier premium.txt

La commande ci-dessous fonctionne très bien pour le prix spot :

grep -oP "(?<=Aujourd'hui, le prix spot de l'once d'or est de ).*(?= et)" fichier.txt > spot.txt

Le fichier spot.txt contient bien 1755.38 €


Par contre, la commande ci-dessous ne fonctionne pas pour le prix premium. Aucun message d’erreur n’est affiché dans le terminal et le fichier premium.txt reste vide :

grep -oP "(?<=Le prix de l’once d’or premium est de ).*(?= et)" fichier.txt > premium.txt

Je ne comprends pas pourquoi la ligne de commande fonctionne dans un cas et pas dans l’autre ?
Quelqu’un aurait-il la gentillesse de m’éclairer ?

#13 Re : -1 »  [ Résolu ] problème avec la commande grep » Le 09/10/2023, à 22:31

jlfh0816
Réponses : 3

Le diable est vraiment dans les détails ...
Un grand merci pingouinux et Watael, vous avez un sacré coup d'œil  (dire que j'ai passé 2 heures sur ce problème sans rien voir) !
big_smile

#14 -1 »  [Résolu] Xubuntu : commande OK dans terminal mais pas dans un lanceur » Le 12/07/2023, à 14:46

jlfh0816
Réponses : 6

Bonjour,
Sur ma vieille Xubuntu 18.04, j’ai bidouillé (pas d'autre mot...) un petit script bash de diaporama. Il est certainement perfectible mais il fonctionne tel quel.
J’ai ensuite voulu lui associer un lanceur dans le tableau de bord, du type «démarrer et arrêter» : un clic pour lancer le diaporama et un autre clic sur le même lanceur pour l’arrêter et faire disparaître les images encore affichées sur le bureau.

C’est avec ce lanceur que je rencontre un problème.
En effet, la ligne de commande renseignée dedans (éditer le lanceur > commande) fonctionne très bien lorsque je l’exécute isolément dans un terminal mais pas du tout si je me contente de cliquer sur le lanceur du tableau de bord.
Pour contourner la difficulté, je peux cocher la case «exécuter dans un terminal» dans l’éditeur du lanceur et, là, tout fonctionne bien : un clic pour lancer le diaporama et un autre pour le stopper. Sauf bien sûr que, dans ce cas, une fenêtre de terminal est affichée au beau milieu de l’écran ce qui n’est pas très esthétique.
Je précise que cette fenêtre de terminal n’affiche aucun message d’erreur : son contenu est noir, entièrement vierge et sa bordure est grisée. Elle se ferme automatiquement dès la fin du diaporama.
Autre précision : le lanceur et le programme de diaporama ont bien les permissions d’être exécutés comme des programmes.
Enfin, dans la ligne de commande du lanceur, j’ai pris la précaution d’utiliser le chemin absolu (et non le chemin relatif).

Sur la toile, on trouve diverses suggestions pour tenter de résoudre ce genre de problème mais aucune n’a pu solutionner mon cas. Auriez-vous une idée de ce que je fais mal ?
Merci par avance de votre aide !



Le lanceur est situé dans le tableau de bord. La ligne de commande qu’il contient est celle-ci :

bash -c "/home/jlfh0816/toggle_diaporama"

Le programme toggle_diaporama auquel le lanceur se réfère est placé dans le répertoire $HOME. Il contient les lignes suivantes :

#!/bin/bash
# This shell script is PUBLIC DOMAIN. You may do whatever you want with it.
#https://askubuntu.com/questions/147080/shell-script-to-toggle-between-two-commands

TOGGLE=/home/jlfh0816/.toggle
	if [ ! -e "$TOGGLE" ]; then
       touch "$TOGGLE"
	pgrep -f "/home/jlfh0816/Images/ConkyCarousel/diaporama"
	for i in $(ps aux | grep "diaporama" | awk '{ print $2}')
	do kill -9 "$i" &>/dev/null;
done
else
    rm "$TOGGLE"
    bash /home/jlfh0816/Images/ConkyCarousel/diaporama
fi

Quant au programme principal diaporama, il est situé dans le dossier /home/jlfh0816/Images/ConkyCarousel/. Il ne contient que ces quelques lignes (en fait, il organise l’exécution d’une dizaine de sous-scripts appelés de diaporama1 à 10, chacun ne pilotant qu’une seule image) :

#!/bin/bash
bash ~/Images/ConkyCarousel/diaporama1 & bash ~/Images/ConkyCarousel/diaporama2 & bash ~/Images/ConkyCarousel/diaporama3 & bash ~/Images/ConkyCarousel/diaporama4 & bash ~/Images/ConkyCarousel/diaporama5 & bash ~/Images/ConkyCarousel/diaporama6 & bash ~/Images/ConkyCarousel/diaporama7 & bash ~/Images/ConkyCarousel/diaporama8 & bash ~/Images/ConkyCarousel/diaporama9 & bash ~/Images/ConkyCarousel/diaporama10

PS :
Je ne sais pas si cela est important ou pas mais je viens de m’apercevoir que le lanceur n’apparaît pas dans le dossier /home/jlfh0816/.local/share/applications
Est-ce normal ?

#15 Re : -1 »  [Résolu] Xubuntu : commande OK dans terminal mais pas dans un lanceur » Le 12/07/2023, à 14:58

jlfh0816
Réponses : 6

Merci iznobe de ta rapide réponse.
J'avais bien vu cette discussion (d'où le titre de la mienne, très proche de celle-là  smile ) mais elle ne m'a pas permis de résoudre mon problème. Ceci dit, je l'ai peut-être lue trop vite (c'est plutôt pointu), je vais la revoir à nouveau pour être sûr.

#16 Re : -1 »  [Résolu] Xubuntu : commande OK dans terminal mais pas dans un lanceur » Le 12/07/2023, à 23:43

jlfh0816
Réponses : 6

Un grand merci kamaris de t'être penché sur mon problème.
Je vais bien entendu effectuer les simplifications que tu suggères.

Ceci dit, c'est tout penaud que je reviens poster car, après avoir repris de zéro toutes les étapes et même renommé différemment tous les scripts, le lanceur dans le tableau de bord fonctionne finalement très bien : un clic pour lancer le diaporama et un autre clic pour le stopper et faire disparaître toutes les images affichées.

Désolé d'avoir fait appel à la communauté pour rien.

Pour info, voici donc ce qui a fonctionné :

- les 10 images à afficher sont placées dans un dossier ~/Images/Diaporama/Final

- les 10 scripts élémentaires Diaporama1 jusqu’à Diaporama10 sont placés dans le dossier ~/Images/Diaporama

- le script principal Diaporama est lui aussi placé dans le dossier ~/Images/Diaporama

- le script «démarrer / arrêter» s’appelle maintenant Toggle.sh et il est lui aussi placé dans le dossier ~/Images/Diaporama
Ce script est le suivant :

#!/bin/sh
# This shell script is PUBLIC DOMAIN. You may do whatever you want with it.
#https://askubuntu.com/questions/147080/shell-script-to-toggle-between-two-commands

TOGGLE=$HOME/.Toggle

if [ ! -e $TOGGLE ]; then
    touch $TOGGLE
#    command1
pgrep -f "sh -c /home/jlfh0816/Images/Diaporama/Diaporama"
for i in `ps aux | grep Diaporama | awk '{ print $2}'`
do kill -9 $i
done
else
    rm $TOGGLE
#    command2
bash -c "/home/jlfh0816/Images/Diaporama/Diaporama"
sleep 1
fi

- le lanceur destiné à faciliter l’exécution du script Toggle.sh est créé par un clic droit sur le bureau et il est appelé lui aussi Toggle.sh. Pour compléter sa ligne de commande, j’ai cliqué à droite de celle-ci sur la petite icone réprésentant un dossier. Dans l’arborescence, j’ai sélectionné le script  ~/Images/Diaporama/Toggle.sh
Après validation et fermeture, un clic droit sur les propriétés du lanceur pour l’autoriser à être exécuté comme un programme.
Ensuite, ouverture du répertoire /home/Bureau où on clique droit sur l’icône du nouveau lanceur pour le renommer en .Toggle.sh (il n’y a que le point devant qui est ajouté à son nom).
Un nouveau clic droit sur ce lanceur désormais caché .Toggle.sh est effectué afin de sélectionner l’ouverture pour l’ajouter comme lanceur au tableau de bord 0.
Lorsqu’il est apparu dans le tableau de bord, un clic droit sur son icône permet d’afficher ses propriétés et de modifier la ligne de commande pour qu’elle contienne désormais :

sh -c "/home/jlfh0816/Images/Diaporama/Toggle.sh"

Après validation, on peut dès cet instant cliquer gauche sur ce lanceur dans le tableau de bord afin qu’il lance ou stoppe le diaporama.

Je ne comprends pas pourquoi tout cela n’a pas fonctionné la première fois...

#17 Re : -1 »  [Résolu] Xubuntu : commande OK dans terminal mais pas dans un lanceur » Le 13/07/2023, à 10:43

jlfh0816
Réponses : 6

Bonjour kamaris

kamaris a écrit :
for i in `ps aux | grep Diaporama | awk '{ print $2}'`
do kill -9 $i
done

devrait avantageusement pouvoir être remplacé par pkill -f Diaporama (normalement -9 ne devrait pas être nécessaire).

Tu as raison. Je viens de vérifier et ça fonctionne aussi bien avec ta suggestion. Je l'adopte avec plaisir. Merci !


kamaris a écrit :

Mais de toutes façons, tu n'as pas besoin de mettre

bash -c "/home/jlfh0816/toggle_diaporama"

il suffit de mettre

/home/jlfh0816/toggle_diaporama

Pareil pour ton autre suggestion : ça fonctionne, j'adopte aussi.

Merci beaucoup !  big_smile

#18 Re : -1 »  [Resolu ]Enregistrement Capture Ecran impossible » Le 27/09/2022, à 10:51

jlfh0816
Réponses : 7

Bonjour lebocage,
Je suis sur Voyager 22.04 et donc sur une Xubuntu.
Lorsque je veux faire une capture d'écran, je fais ceci :
choix de la zone à capturer > coche bleue en haut sur "Enregistrer" > clic en bas sur "Valider" > ça ouvre automatiquement une nouvelle fenêtre où je choisis l'endroit où je souhaite enregistrer ma capture > clic en haut à droite sur "Enregistrer"

Est-ce que cela fonctionne sur ta machine ?

#19 Re : -1 »  Genmon: affichage température SSD dans le tableau de bord sur 22.04 » Le 01/09/2022, à 18:46

jlfh0816
Réponses : 115
iznobe a écrit :

si tu as inclus un appel a fonction pour la couleur bleu et que tu n ' utilise pas de delay , il faut initialiser delay a 0 par exemple , dans la fonction au debut :

Non, je n'appelle pas la fonction pour une température normale puisque, dans ce cas, je n'ai pas besoin de gifs animés.

Par contre, j'avais oublié de te signaler que lorsque c'est GenMon qui exécute le script, l'affichage des températures <50°C dans le tableau de bord est anormal car toujours double :
- un affichage fixe en bleu, c'est celui normalement attendu;
- juste à côté, un autre affichage clignotant et le plus souvent en rouge.

Du coup, j'ai essayé le script avec un appel à la fonction pour les températures normales mais cela ne change rien, j'ai le même double affichage.


Sinon, à propos de delay=0, j'ai lu dans la doc de ImageMagick que c'est une valeur très particulière réservée à la création de frames intermédiaires pas forcément visibles par l'utilisateur... pas trop compris à quoi ça sert mais a priori, peut-être vaut-il mieux éviter d'attribuer la valeur 0 à la variable delay ?


Tout cela est assez exaspérant car, dans un terminal, le script a l'air de ne pas trop mal se comporter. C'est lorsqu'on le fait exécuter par GenMon que ça se passe mal...

Bon, ne perd plus ton temps avec ça iznobe, tu as déjà été bien gentil de m'aider jusqu'ici. Je me contenterai d'un script sans fonction, ça suffira à mon bonheur je t'assure... Merci !

#20 Re : -1 »  Genmon: affichage température SSD dans le tableau de bord sur 22.04 » Le 01/09/2022, à 22:33

jlfh0816
Réponses : 115
iznobe a écrit :

essaie ce code :

... / ...

il devrait , avec un peu de chance , fonctionner et régler quelque soucis wink  je n ' ai pas inclus tes dernieres modifs ni tester .

Merci iznobe de t'accrocher comme ça, tu as vraiment beaucoup de ressources et de patience !

J'ai donc testé ton nouveau code et voici ce que ça donne :


1°) si ton code est exécuté dans un terminal, en testant successivement 27°C, 56°C et 96°C :

jlfh0816@Voyager2204:~/.scripts$ ./temperature.sh
<img>/home/jlfh0816/.scripts/gifs/27.gif</img>
<txt><span>   SSD: </span><span foreground="#00FFFF">27°C        </span></txt>

jlfh0816@Voyager2204:~/.scripts$ ./temperature.sh
<img>/home/jlfh0816/.scripts/gifs/56.gif</img>

jlfh0816@Voyager2204:~/.scripts$ ./temperature.sh
<img>/home/jlfh0816/.scripts/gifs/96.gif</img>

jlfh0816@Voyager2204:~/.scripts$

Donc, tout a l'air de bien se passer dans le terminal, aucun message d'erreur... 

Toutefois, en y regardant de plus près, il y a quand même des anomalies :
- les gifs animés sont dénommés 56.gif et 96.gif alors qu'ils auraient être appelés 56jaune.gif et 96rouge.gif
- et, en ce qui concerne la température normale 27°C, il n'aurait dû y avoir qu'une seule ligne, celle délimitée par les balises <txt><span> ... </span></txt>. La première ligne délimitée par les balises <img> ... </img> ne devrait pas exister puisque les températures normales doivent être affichées fixes et en bleu turquoise. Elles n'ont pas besoin d'un gif animé pour les représenter (d'autant que ce gif animé non désiré contient la même erreur de dénomination que les autres : 27.gif) !

Et surtout, comme tu le vois ci-dessous, l'affichage correspondant dans le tableau de bord n'est pas du tout correct.


2°) si ton code est exécuté par GenMon :

- en attribuant une température normale : wu3z.gif

- en attribuant une température de 56°C : 0q49.gif

- en attribuant une température de 96°C : hcr3.gif


En fait, ce sont toujours les mêmes erreurs d'affichage que précédemment...  à vraiment ne rien y comprendre ??? roll

#21 Re : -1 »  Genmon: affichage température SSD dans le tableau de bord sur 22.04 » Le 02/09/2022, à 11:55

jlfh0816
Réponses : 115
iznobe a écrit :

Bonjour , je pense que , vu que dansun terminal cela fonctionne comme attendu , ce doit etre lié a Genmon et a ses specificités .

Bonjour iznobe,
Oui, je pense comme toi que c'est GenMon qui est le fauteur de troubles.
Ceci dit, même si le fonctionnement dans un terminal ne renvoie pas de messages d'erreur, on y découvre quand même de sérieuses anomalies dans ses réponses :
- pourquoi la fonction est-elle exécutée dans le cas des températures normales alors qu'on ne l'appelle pas ? C'est presque de la magie ! En tout cas, c'est ce comportement anormal qui entraîne un double affichage des températures normales;
- le nom des gifs est toujours tronqué : il manque systématiquement la couleur (celle de la variable $couleur).


iznobe a écrit :

cela dit j' ai relevé une erreur :

if [ ! -f $HOME/.scripts/gifs/frames_png ]; then
    mkdir $HOME/.scripts/frames_png/ 2>/dev/null;
    fi

pas un soucis là ?
ca ne devrait pas etre plutot :

if [ ! -f $HOME/.scripts/frames_png ]; then
    mkdir $HOME/.scripts/frames_png/ 2>/dev/null;
    fi

Oui, j'avais moi aussi repéré cette erreur dans ma version du script sans fonction et je l'avais déjà corrigée (voir mon post #100)


iznobe a écrit :

sans parler du fait que " -f " c ' est pour un fichier , pour un repertoire tu devrais utiliser " -d " roll
bref , a mon avis il y a quand meme pas mal de chose a revoir .

tu as tout à fait raison, je n'avais pas repéré celle-ci.... désolé, je vais la corriger.


iznobe a écrit :

NOTE : dans cette ligne :

convert -delay 20 $HOME/.scripts/frames_png/X*.png -loop 0 $HOME/.scripts/frames_png/gif_vide.gif;

ne faut il pas utiliser la variable $delay plutot que delay 20 ?
par exemple :

convert -delay "$delay" $HOME/.scripts/frames_png/X*.png -loop 0 $HOME/.scripts/frames_png/gif_vide.gif;

Oui, c'est ce que je fais systématiquement dans mes tests .
La variable $delay est donc utilisée (avec et sans les "  ").


iznobe a écrit :

la variable "couleur_hexa" dans la fonction n ' est pas utilisée , est-ce normal ?

c'est pareil que pour la variable $delay: dans mes tests, je remplace systématiquement -fill "#FF0000" par -fill "$couleur_hexa"
La variable "$couleur_hexa" est donc elle aussi utilisée.


iznobe a écrit :

EDIT :
du coup j' ai corriger les erreurs repertoires ( -d ) et la faute pour le " gif " en trop dans le chemin .
j' ai aussi rendu plus clair en definnissant les chemins dans des variables en debut de fonction . y a peut etre des endroits ou il manque " $ " , a tester :
... / ...

J'ai donc testé ta nouvelle version.
Dans un terminal, j'ai le même comportement qu'avec la précédente version, cad pas de messages d'erreur mais toujours les anomalies déjà identifiées auparavant, notamment pourquoi la fonction est-elle activée dans le cas des températures normales (gif bleu) alors qu'elle n'est pas du tout appelée ? C'est vraiment un grand mystère pour moi ...
Et lorsque je fais exécuter ton code par GenMon, l'affichage est quasiment le même que dans les gifs d'illustration de mon post précédent #111 à la différence près que les chiffres sont cette fois tous écrits en blanc et que le clignotement est ultra-rapide (c'est le delay=01 qui est responsable, je pense)

Pour conclure, je vais chercher sur la toile des exemples de scripts écrits spécialement pour GenMon, je pense comme toi que c'est lui qui est au cœur du comportement si particulier et si rétif de l'affichage.

Un grand merci encore pour ton aide et tout le temps que tu y as consacré  smile

#22 Re : -1 »  Genmon: affichage température SSD dans le tableau de bord sur 22.04 » Le 04/09/2022, à 17:51

jlfh0816
Réponses : 115

Bonjour,

Voilà, ça y est, après bien des prises de tête, j'ai enfin réussi à maîtriser cette foutue fonction.
Tout se déroule désormais correctement, aussi bien dans un terminal que dans le tableau de bord.

Au final, il y a donc 2 versions fonctionnelles de mon petit script  (toutes deux recourant à drivetemp et non à hddtemp):
- au post #100, celle qui n'utilise pas de fonction;
- ci-dessous, celle qui utilise la fonction initiée par iznobe  :

#!/bin/bash
#script permettant d'afficher la température du SSD dans le tableau de bord grâce au plugin Moniteur Générique GenMon
#source: https://forum.ubuntu-fr.org/viewtopic.php?pid=22595328#p22595328

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;

#ligne suivante à décommenter si on veut tester une température particulière de SSD
#celsius=95;

if [ "$celsius" -gt "$alerte_jaune" ] && [ "$celsius" -lt "$alerte_rouge" ]; then
couleur=jaune;
delay="-delay 20";
couleur_hexa="#FFFF00";
fi

if [ "$celsius" -ge "$alerte_rouge" ]; then
couleur=rouge;
delay="-delay 10";
couleur_hexa="#FF0000";
fi

function gestion_gif ()
{
    font="/usr/share/fonts/truetype/ubuntu/Ubuntu-R.ttf";
    phrase="attention  la température  du  esse esse dé  est  très élevée";
    rep_frames="$HOME"/.scripts/frames_png;    
    rep_gifs="$HOME"/.scripts/gifs;
    nom_gif="$celsius""$couleur".gif;
    complete_gif=$rep_gifs/"$celsius""$couleur".gif;
    
    if [ ! -d $rep_frames ]; then
    mkdir $rep_frames 2>/dev/null;
    fi
  
    if [ ! -d $rep_gifs ]; then
    mkdir $rep_gifs 2>/dev/null;
    fi
  
    if [ -f $complete_gif ]; then
    echo "<img>$complete_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 :'" $rep_frames/X1.png;
    for i in {2..10} ; do cp $rep_frames/X1.png $rep_frames/X"$i".png ; done;
    convert $delay $rep_frames/X*.png -loop 0 $rep_frames/gif_vide.gif;
    
    #inscription de la température sur le gif animé de base
    convert $rep_frames/gif_vide.gif -coalesce -geometry +20+40 -gravity East \
        -font "$font" -pointsize 12 -fill "$couleur_hexa"  \
          \( -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   $complete_gif
    
    #affichage du gif animé final
    echo "<img>$complete_gif</img>"
    fi
}

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

if [ "$celsius" -gt "$alerte_jaune" ] && [ "$celsius" -lt "$alerte_rouge" ]; then
gestion_gif
fi

if [ "$celsius" -ge "$alerte_rouge" ]; then
gestion_gif
   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

Maintenant, juste pour l'esthétique, il me reste encore à essayer de résoudre le petit détail évoqué au post #103.
Si j'y parviens, je posterai le résultat.

Bonne soirée et encore merci à tous ceux qui m'ont aidé  smile



EDIT:
pour faire fonctionner le script avec hddtemp au lieu de drivetemp, il suffit de remplacer la ligne :

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

par celles-ci :

#partie du script d'après MicP [url]https://forum.ubuntu-fr.org/viewtopic.php?pid=22582392#p22582392[/url]
periph=/dev/disk/by-id/ata-Samsung_SSD_860_EVO_M.2_1TB_S415NR0R400914Z
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]}

#23 Re : -1 »  Genmon: affichage température SSD dans le tableau de bord sur 22.04 » Le 11/09/2022, à 17:30

jlfh0816
Réponses : 115

Bonjour,

Au cours de mes recherches pour tenter de résoudre (en vain jusqu’à présent…) le petit problème signalé au post #103, je me suis rendu compte qu’on peut améliorer l’utilité du script grâce à des info-bulles ("tooltips" en anglais), ces petits textes qui n’apparaissent que lorsque le curseur survole le gif animé affiché dans le tableau de bord.

En effet, si le script rend bien compte de la température du SSD, il n’avance aucune explication dans le cas où celle-ci est anormalement élevée.
A priori, je ne vois que 2 causes possibles:
- soit le disque présente une défaillance matérielle, et là c’est quasi-impossible à corriger;
- soit un programme le sollicite trop (nombre très élevé de cycles lectures/écritures) et là, on peut peut-être essayer de débusquer le programme coupable et le stopper avant que les dégâts soient trop importants.

Après quelques recherches sur la toile, j’ai pensé que iotop peut être le logiciel qui permet d’identifier le coupable.

L’idée est donc que le script permette d’afficher une info-bulle qui contient un message incitant à cliquer sur le plugin du tableau de bord :  etax.gif
Le clic entraîne (au choix) :
- soit l’ouverture par Firefox de la page du constructeur du SSD, à l’endroit où celui-ci détaille et commente les caractéristiques techniques du disque et notamment les valeurs extrêmes de la température de fonctionnement;
- soit l’ouverture dans xterm du programme iotop lequel donne en temps réel et en clair les noms des processus qui sollicitent les cycles lecture/écriture. Comme ça, on a une chance de repérer celui qui est responsable du surcroît de travail demandé au SSD.

Le choix d’une action plutôt que l’autre (Firefox ou iotop) se fait dans le script, en commentant l’action qu’on ne souhaite pas utiliser.
Dans mon cas, je commente l’ouverture de Firefox car je souhaite privilégier l’exécution de iotop.

Voici à quoi ressemble l'écran de iotop lorsqu'il travaille :
wkp9.png et le lien direct


Iotop comporte de nombreuses options d’affichage (voir son man ou en saisissant iotop --help). Celles que j’ai trouvé les plus pratiques sont :
- iotop Po
- iotop  -o (pour avoir les processus en temps réel… mais ça défile vite !)
- iotop -o -a (pour avoir le cumul des mêmes processus … c’est plus agréable à lire).

Pour info, le choix d’utiliser iotop a nécessité au préalable d’installer xterm et iotop car ceux-ci ne sont pas présents d’origine dans ma distribution (sudo apt install xterm et sudo apt install iotop).

Il est par ailleurs important de noter que l’exécution de iotop ne peut se faire qu’en mode administrateur, donc avec sudo et saisie du mot de passe.
J’ai bien trouvé quelques astuces sur le net qui permettent soi-disant de le faire fonctionner par un utilisateur normal (donc pas en mode administrateur) mais aucune n’a fonctionné (modification de sudoers, «setuidisation», modification directe des permissions dans les propriétés, etc…).
Du coup, je suis bien obligé d’utiliser iotop en mode administrateur...

Et donc, lorsqu’à l’invite de l'info-bulle on clique sur le gif animé, on obtient l’ouverture de xterm lequel demande de saisir le mot de passe pour sudo
4umq.png et le lien direct

A noter que pour quitter iotop, il suffit d’appuyer sur la touche Q : ça ferme à la fois iotop et la fenêtre de xterm.


Le code à ajouter au script est le suivant :

#PANEL+="<click>firefox --new-tab --url https://www.samsung.com/uk/memory-storage/sata-ssd/860-evo-sata-3-m-2-ssd-1tb-mz-n6e1t0bw/</click>"
PANEL+="<click>xterm +hold -e sudo iotop -o -a</click>"
TOOLTIP="<tool>"
TOOLTIP+="<span  font='sans regular'>cliquez</span>\n"
TOOLTIP+="<span  font='sans regular'>pour connaître</span>\n"
TOOLTIP+="<span  font='sans regular'>les programmes qui</span>\n"
TOOLTIP+="<span  font='sans regular'>sollicitent trop le SSD</span>"
TOOLTIP+="</tool>"
  echo -e "${PANEL}"
  echo -e "${TOOLTIP}"

Il doit être ajouté tout à la fin du script, après le dernier

fi


Par contre, lorsque la température du SSD est normale, <50°C, l'info-bulle ne sert pas à grand-chose. Du coup, elle n’affichera qu’un court message disant que la température est normale.
Voici ce que ça donne : ymmj.png et le lien direct

Le code à ajouter au script est le suivant :

TOOLTIP="<tool>"
TOOLTIP+="<span  font='sans regular'>la température</span>\n"
TOOLTIP+="<span  font='sans regular'>est normale !</span>"
TOOLTIP+="</tool>"
  echo -e "${PANEL}"
  echo -e "${TOOLTIP}"

Il doit être ajouté juste après la ligne :

echo "$msg"


Je vais continuer à chercher pour savoir s’il existe une alternative non root à iotop, en espérant qu’elle donne d’aussi bonnes indications.

Je vais également chercher s’il existe un programme qui permette de caractériser un problème cette fois purement matériel du SSD et, si possible, pas en mode administrateur.

#24 Re : -1 »  Genmon: affichage température SSD dans le tableau de bord sur 22.04 » Le 18/09/2022, à 18:13

jlfh0816
Réponses : 115

Bonjour,

Toujours pas trouvé d'alternative à iotop ni de solution à mon petit soucis du post #103...

Par contre, histoire de rendre un peu moins austère le message de l’infobulle, on peut lui ajouter un emoji (source).

Ainsi, lorsque la température du SSD est normale, on peut ajouter l’emoji U+2705 en remplaçant les deux lignes du post #115 :

TOOLTIP+="<span  font='sans regular'>la température</span>\n"
TOOLTIP+="<span  font='sans regular'>est normale !</span>"

par celles-ci :

TOOLTIP+="<span  font='sans regular'>\U0002705   la température</span>\n"
TOOLTIP+="<span  font='sans regular'>       est normale !</span>"

Ce qui donne :

4eds.png


Et lorsque la température du SSD est anormale, on peut ajouter l’emoji U+1F198 en remplaçant les quatre lignes du post #115 :

TOOLTIP+="<span  font='sans regular'>cliquez</span>\n"
TOOLTIP+="<span  font='sans regular'>pour connaître</span>\n"
TOOLTIP+="<span  font='sans regular'>les programmes qui</span>\n"
TOOLTIP+="<span  font='sans regular'>sollicitent trop le SSD</span>"

par celles-ci :

TOOLTIP+="<span  font='sans regular'>\U0001F198   cliquez</span>\n"
TOOLTIP+="<span  font='sans regular'>       pour connaître</span>\n"
TOOLTIP+="<span  font='sans regular'>       les programmes qui</span>\n"
TOOLTIP+="<span  font='sans regular'>       sollicitent trop le SSD</span>"

Ce qui donne :

msaq.png