Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 08-08-2020 00:19:39

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Plugin genmon de xfce

Yop,
d'avance, c'est plus un jeu qu'un truc utile, ceux qu'ont un temps précieux, passez votre chemin >_>

Suite au poste de Manon (https://debian-facile.org/viewtopic.php?id=37&p=84), j'ai "forké" son code. Ma version actuelle donne ceci :
1596846824.png

En ordre :
- le "loadavg" CPU (qui peut dépasser 100%, c'est rigolo comme représentation)
- % de ram/disque utilisé
- la température du termomètre le plus CHAUD (c'était galère de trouver comment en mettre plusieurs sans hardcoder : si y en a un qui surchauffe a priori c'est surtout ça qu'on veut savoir ! yikes)
- la première interface réseau avec une route (généralement y en a qu'un seul donc je me suis pas embêté), le débit montant/descendant
- la latence (basé sur un hack peut-être très con : l'idée c'est de pas pinger un serveur en particulier mais "le premier relai après le routeur". Donc j'ai mis une IP arbitraire et demandé à traceroute de consulter seulement le 2eme. Ça sert a rien ou c'est malin ? L'idée c'est de détecter les "moments de congestion" de sa ligne local=>internet facilement sans pinger de serveur en particulier.)

C'est très amusant de chercher comment trouver "une donnée système" via une ligne de commande la plus économe en "jus" possible.
Je me suis aussi amusé à ajouter des couleurs via une fonction. Tout ce qui est passé par ex "| color 50 100" sera coloré  en orange si au-dessus de 50 et en rouge si au-dessus de 100 (vert sinon).

Dans le code y a aussi des portions commentées de trucs qui marchent mais pas utilisés au final.

#!/bin/sh
color(){
  i=$(xargs)
  if test -v $1 || test $1 -gt $i
  then
    echo '<span foreground="lightgreen">'$i'</span>'
  elif test -v $2 || test $2 -gt $i
  then
    echo '<span foreground="orange">'$i'</span>'
  else
    echo '<span foreground="red">'$i'</span>'
  fi
}

#time
#uptime="$(uptime | cut -d' ' -f2)"
#date="$(date +%F)"
#date2="$(date "+%H:%M")"

#hardware
cpu=$(awk '{printf "%d",$1*100}' /proc/loadavg | color 90 100)
#topjob="$(ps -eo comm,%cpu --sort=+%cpu | tail -n1 |awk '{printf "%s %d%%",$1,$2}')"
#ramg="$(free -b | grep 'Mem' | awk '{printf "%.2f", $3/1073741824}') Go"
ram=$(free -b | grep 'Mem' | awk '{printf "%d", $3/$2*100}' | color 70 90)
hdd=$(df / -h --output=pcent | tail -n1 | awk '{printf "%d",$1}' | color 70 90)
temp=$(sensors -u | grep _input: | awk '(n<$2){n=$2}END{printf "%d",n}' | color 60 80)
#sound_lvl="$(pactl list sinks | grep -m1 'Volume' | awk '{printf "%d",($5+$12)/2}')"
#sound_muted="$(pactl list sinks | grep 'Sourdine' | awk '{printf "%s",$2}')"

#network
interface=$(ip r | tail -n1 | awk '{print $3}')
i=/sys/class/net/$interface/statistics
inet=$(cat $i/tx_bytes)
onet=$(cat $i/rx_bytes)
sleep 1
inet="$inet $(cat $i/tx_bytes)"
onet="$onet $(cat $i/rx_bytes)"
inet=$(echo $inet | awk '{printf "%d",($2-$1)/1024}')
onet=$(echo $onet | awk '{printf "%d",($2-$1)/1024}')

latency=$(traceroute -n -f 2 -m 2 1.2.3.4 | tail -n1 | awk '{printf "%d",$7}' | color 100 1000)

#laptop
#battery="$(upower -d | grep -m1 'percentage' | awk '{printf "%d",$2}')"
#battery_state="$(upower -d | grep -m1 state | awk '{ printf "%s",$2}')"
#light="$(light -G | awk '{printf "%d",$1}')"

echo "<txt>CPU $cpu% | RAM $ram% | HDD $hdd% | TEMP $temp℃ | NET($interface) ↑${inet}Ko ↓${onet}Ko ~${latency}ms</txt>"

Dernière modification par otyugh (08-08-2020 00:45:52)


datalove-datalove-s1-2.png agendadulibre-lagendadulibre.png arzinfo-arzinfo.png

Hors ligne

#2 08-08-2020 00:27:42

arpinux
CA Debian-Facile
Lieu : Montréal d'aude
Distrib. : debian stable
Noyau : 4.9-amd64
(G)UI : noDE
Inscription : 30-06-2016
Site Web

Re : Plugin genmon de xfce

^^ bien pus économe qu'un conky en plus big_smile

maintenant que je suis sur i3wm, faut vraiment que je me fasse une barre d'infos en script sans passer par conky qui, en plus, fait appel à certains scripts tongue

... trop accro à conky depuis le premier jour ... difficile de s'en défaire smile

nous sommes tous différents ... c'est notre point commun ...
Association Debian-Facile -- Les cahiers du débutant -- ISO Debian-Facile -- anar'prez

Hors ligne

#3 09-08-2020 10:58:17

manon
Membre
Inscription : 21-05-2020

Re : Plugin genmon de xfce

Ton script est mieux fait que le mien, c'est là que l'on voit les experts aux débutants qui tâtonnent !!

J'ai remarqué dans le plugin que les valeurs du réseau n'étaient pas très stable, bien souvent il m'indique 0 k/s alors que je télécharge quelque chose à une vitesse stable, donc statistiquement ça ne peut être une vitesse de 0 k/s (est-ce parce que je suis connectée en wifi, et que par nature cette dernière n'est pas aussi stable que le câble ?!)

Du coup j'ai retiré cette partie du script, c'était plus un gadget qu'autre chose pour ma part, et en cas de besoin, il y a toujours le plugin-netload de xfce.

Curiosité de ma part, pourquoi pour l'utilisation du cpu en %, tu utilises le load average, et non top ?

Hors ligne

#4 09-08-2020 11:12:00

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Plugin genmon de xfce

manon a écrit :

Ton script est mieux fait que le mien, c'est là que l'on voit les experts aux débutants qui tâtonnent !!


Une mauvaise fonction (mais que je trouvais pratique) - et deux reformulation de awk. Le gros du code est encore du copié collé tongue

manon a écrit :

J'ai remarqué dans le plugin que les valeurs du réseau n'étaient pas très stable, bien souvent il m'indique 0 k/s alors que je télécharge quelque chose à une vitesse stable, donc statistiquement ça ne peut être une vitesse de 0 k/s (est-ce parce que je suis connectée en wifi, et que par nature cette dernière n'est pas aussi stable que le câble ?!)


Bonne question. Personnellement je n'ai rien téléchargé vraiment doooonc les sauts ne me semblaient pas anormal. Je doute que ça vienne de la wifi, sauf quelqu'un passe avec une plaque d'aluminium entre toi et la wifi de manière intermittente. acid.gif
Mhm. Je pensais que les valeurs piochées dans /proc étaient très fiable. Faudrait expérimenter x)

manon a écrit :

Curiosité de ma part, pourquoi pour l'utilisation du cpu en %, tu utilises le load average, et non top ?


Ahm, vu que je rafraîchit peu le plugin (je n'aime pas avoir des chiffres qui bougent tout le temps) genre avec 30s, le loadvg donne une moyenne sur 1 minute plutôt qu'un instantané qui sera périmé immédiatement. C'est du goût de chacun ^^'


Maiiiis après avoir un peu lu sur ce qu'était le loadavg, je crois que je me tromp sur ce que c'est vraiment é_è

/proc/loadavg
              The  first  three  fields  in this file are load average figures
              giving the number of jobs in the run queue (state R) or  waiting
              for disk I/O (state D)

Dernière modification par otyugh (09-08-2020 11:41:51)


datalove-datalove-s1-2.png agendadulibre-lagendadulibre.png arzinfo-arzinfo.png

Hors ligne

#5 09-08-2020 20:26:34

manon
Membre
Inscription : 21-05-2020

Re : Plugin genmon de xfce

otyugh a écrit :


Bonne question. Personnellement je n'ai rien téléchargé vraiment doooonc les sauts ne me semblaient pas anormal. Je doute que ça vienne de la wifi, sauf quelqu'un passe avec une plaque d'aluminium entre toi et la wifi de manière intermittente. https://debian-facile.org/img/smilies/xtras/acid.gif
Mhm. Je pensais que les valeurs piochées dans /proc étaient très fiable. Faudrait expérimenter x)



En tout cas j'ai remarqué ça, mais le problème n'a pas l'air de se poser avec l'envoi de fichiers (ou je ne pas eu le temps de m'en apercevoir) !

otyugh a écrit :

Ahm, vu que je rafraîchit peu le plugin (je n'aime pas avoir des chiffres qui bougent tout le temps) genre avec 30s, le loadvg donne une moyenne sur 1 minute plutôt qu'un instantané qui sera périmé immédiatement. C'est du goût de chacun ^^'
Maiiiis après avoir un peu lu sur ce qu'était le loadavg, je crois que je me tromp sur ce que c'est vraiment é_è



En effet avec 30 secondes entre chaque rafraîchissement, top ne t'es pas trop utile.
Mais très utile pour un rafraîchissement rapide pour voir une éventuelle surcharge cpu dû à une tâche spécifique à un moment Y !

tu devrais utiliser la 1ere valeur de loadavg, comme ça tu as la charge système sur la dernière minute, ce qui colle bien avec un rafraîchissement de 30 secondes pour le plugin wink

Hors ligne

#6 09-08-2020 20:45:29

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Plugin genmon de xfce

manon a écrit :

tu devrais utiliser la 1ere valeur de loadavg, comme ça tu as la charge système sur la dernière minute, ce qui colle bien avec un rafraîchissement de 30 secondes pour le plugin wink


Yep, c'est déjà le cas !

cpu=$(awk '{printf "%d",$1*100}' /proc/loadavg | color 90 100)


Après appeler ça "CPU" est complètement abusif mais bon >_<


datalove-datalove-s1-2.png agendadulibre-lagendadulibre.png arzinfo-arzinfo.png

Hors ligne

#7 10-08-2020 08:30:35

manon
Membre
Inscription : 21-05-2020

Re : Plugin genmon de xfce

Après tu peux utiliser le loadavg sans pourcentage et l'appeler avg tongue

Non mais c'est ça qui est cool avec le plugin, c'est que l'on peut faire toutes sortes de choix tant qu'ils sont compréhensibles pour nous-même !

Hors ligne

#8 15-08-2020 17:21:18

manon
Membre
Inscription : 21-05-2020

Re : Plugin genmon de xfce

Cette fois-ci le plugin est terminé !
J'ai découvert l'existence de ce paquet qui permet d'obtenir de jolis emojis (c'est plus explicite visuellement je trouve)
https://packages.debian.org/buster/font … olor-emoji

J'ai épuré le script, et revu certaines commandes pour une meilleure fiabilité (notamment pour le son, et la batterie)

#!/bin/bash

# UTILISATION DU CPU EN POURCENTAGE #
cpu=$(top -bn 1 | awk '/Cpu/{printf "%d", $2+$4}')

# TEMPÉRATURE DU CPU #
cputemp=$(awk '{print $1/1000}' /sys/class/hwmon/hwmon1/temp1_input)

# UTILISATION DE LA RAM ET SON RÉSULTAT EN POURCENTAGE #
ram=$(free -b | awk '/Mem:/{printf "%.2f",$3/1073741824}')
ramperc=$(free -b | awk '/Mem:/{printf "%d",($3/$2)*100}')

# POURCENTAGE DE LA BATTERIE ET SON STATUS #
bat=$(awk '{print $1}' /sys/class/power_supply/BAT0/capacity)
state=$(awk '{print $1}' /sys/class/power_supply/BAT0/status)

# TEMPÉRATURE DE LA NVIDIA #
gpu=$(($(</sys/class/hwmon/hwmon2/temp1_input) / 1000 ))

# AFFICHE LA DATE #
date=$(date "+%A %e %B %Y")

# AFFICHE L'HEURE #
heure=$(date "+%H:%M")

# AFFICHE LE VOLUME EN POURCENTAGE ET LE STATUS DE LA SOURDINE #
son=$(pacmd list-sinks | awk '/volume: front/{ print ($5+$12)/2 }')
mute=$(pactl list sinks | awk '/Sourdine/{print $2}')

# AFFICHE LA LUMINOSITÉ EN POURCENTAGE #
lum=$(light -G | awk '{printf "%d", $1}')

# PERMET AU SCRIPT D'ÊTRE AFFICHÉ DANS LE PANEL SUR UNE SEULE LIGNE #
echo "<txt>          ? $date          ? $heure          ?$gpu °C          ? $son %          ? $mute          ? $state          ⚡ $bat %          ? $lum %          ? $ram Go  ($ramperc %)          ?$cputemp °C          ? $cpu %</txt>"

# PERMET DE MASQUER LA TOOLTIP SUR LE PANEL #
echo "<tool></tool>"



Ce qui donne en résultat final, ceci
Capture-d-cran-2020-08-15-18-17-50.png

Hors ligne

#9 15-08-2020 17:45:33

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Plugin genmon de xfce

À ta place j’enlèverai carrément le "[icn_mute] oui/non" et adapterai l'icône à côté du niveau du son ; si c'est mute mettre l'icône "[icn_mute] son%", sinon l'icone actuelle "[icn_son] son%. Pareil pour charge/décharge, j'utiliserai l'icône à côté du % de batterie pour le dire pour "compacter" la lecture. Ou/Et un code couleur.

Après si le but était aussi "de prendre la place sur la barre", ça fait sens de laisser comme ça x)

Dernière modification par otyugh (15-08-2020 17:46:47)


datalove-datalove-s1-2.png agendadulibre-lagendadulibre.png arzinfo-arzinfo.png

Hors ligne

#10 15-08-2020 18:04:55

manon
Membre
Inscription : 21-05-2020

Re : Plugin genmon de xfce

otyugh a écrit :

À ta place j’enlèverai carrément le "[icn_mute] oui/non" et adapterai l'icône à côté du niveau du son ; si c'est mute mettre l'icône "[icn_mute] son%", sinon l'icone actuelle "[icn_son] son%. Pareil pour charge/décharge, j'utiliserai l'icône à côté du % de batterie pour le dire pour "compacter" la lecture. Ou/Et un code couleur.

Après si le but était aussi "de prendre la place sur la barre", ça fait sens de laisser comme ça x)


En faite je ne sais pas faire pour faire évoluer l'icône en fonction du status, d'où le faite que j'ai procédé ainsi, n'oublies pas que mes connaissances sont médiocres big_smile

Hors ligne

#11 15-08-2020 19:40:09

manon
Membre
Inscription : 21-05-2020

Re : Plugin genmon de xfce

Après si tu as 2-3 tuyaux a me refiler pour mettre en oeuvre cette histoire d'icône qui change selon le status, je suis toute ouïe wink

Hors ligne

#12 15-08-2020 19:45:16

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Plugin genmon de xfce

Truc comme ça :
PS : j'ai pu me tromper sur le caractère spéciaux, malgré mon paquet noto-color-emoji d'installé, j'en vois que la moitié, donc j'ai fait ça en aveugle tongue

#!/bin/bash

# UTILISATION DU CPU EN POURCENTAGE #
cpu=$(top -bn 1 | awk '/Cpu/{printf "%d", $2+$4}')

# TEMPÉRATURE DU CPU #
cputemp=$(awk '{print $1/1000}' /sys/class/hwmon/hwmon1/temp1_input)

# UTILISATION DE LA RAM ET SON RÉSULTAT EN POURCENTAGE #
ram=$(free -b | awk '/Mem:/{printf "%.2f",$3/1073741824}')
ramperc=$(free -b | awk '/Mem:/{printf "%d",($3/$2)*100}')

# POURCENTAGE DE LA BATTERIE ET SON STATUS #
bat=$(awk '{print $1}' /sys/class/power_supply/BAT0/capacity)
test $(awk '{print $1}' /sys/class/power_supply/BAT0/status) == 'Discharging' && ischarging=? || ischarging=⚡

# TEMPÉRATURE DE LA NVIDIA #
gpu=$(($(</sys/class/hwmon/hwmon2/temp1_input) / 1000 ))

# AFFICHE LA DATE #
date=$(date "+%A %e %B %Y")

# AFFICHE L'HEURE #
heure=$(date "+%H:%M")

# AFFICHE LE VOLUME EN POURCENTAGE ET LE STATUS DE LA SOURDINE #
son=$(pacmd list-sinks | awk '/volume: front/{ print ($5+$12)/2 }')
test $(pactl list sinks | awk '/Sourdine/{print $2}') == 'oui' && ismute=? || ismute=?


# AFFICHE LA LUMINOSITÉ EN POURCENTAGE #
lum=$(light -G | awk '{printf "%d", $1}')

# PERMET AU SCRIPT D'ÊTRE AFFICHÉ DANS LE PANEL SUR UNE SEULE LIGNE #
echo "<txt>          ? $date          ? $heure          ?$gpu °C          $ismute $son %          $ischarging $bat %          ? $lum %          ? $ram Go  ($ramperc %)          ?$cputemp °C          ? $cpu %</txt>"

# PERMET DE MASQUER LA TOOLTIP SUR LE PANEL #
echo "<tool></tool>"
 



Pour tester une valeur y a plusieurs manière, dans celle-là je mets le moyen le plus compact (...que je connaisse) en utilisant "&&"=et "||"=ou. En général on veut plutôt utiliser la forme "if then []; else; fi" ; mais c'est la même chose - sur une seule ligne.

test "lapin" == "lapin" && echo oui || echo non
[ "lapin" == "lapin" ] && echo oui || echo non
$(echo lapin | grep -q "^lapin$") && echo oui || echo non

if test "lapin" == "lapin"
then
   echo oui
else
   echo non
fi

if [ "lapin" == "lapin" ]
then
   echo oui
else
   echo non
fi




n'oublies pas que mes connaissances sont médiocres


"Je ne sais pas encore faire ça" / "je n'ai pas eu le temps/envie de m'y intéresser" ! (et je devrais aussi en prendre de la graine, moi aussi je m'excuse tout le temps de pas être assez bon en XY yikes) - et après avoir dit quelque chose d'aussi prétentieux j'espère que ça marche tongue

Dernière modification par otyugh (16-08-2020 09:55:22)


datalove-datalove-s1-2.png agendadulibre-lagendadulibre.png arzinfo-arzinfo.png

Hors ligne

#13 15-08-2020 20:36:12

manon
Membre
Inscription : 21-05-2020

Re : Plugin genmon de xfce

Eh bien ça fonctionne parfaitement via ta méthode, merci smile

Je cherche sur le net, pour le script de base par exemple, je récupérais des petits morceaux par ci par là, en essayant tant bien que mal de comprendre ce que je faisais pour en l'adopter à mes besoins, et pour arriver à quelque chose de pas trop moche.

Mais pour les choses plus complexes comme le changement d'icônes il faut déjà savoir par quoi commencer à chercher pour réussir à trouver des choses concrètes, et il est tout là le soucis hmm

Hors ligne

#14 16-08-2020 14:11:57

manon
Membre
Inscription : 21-05-2020

Re : Plugin genmon de xfce

Eh bien j'ai réussi à faire un petit bout de code toute seule, pour quand je retire la batterie big_smile

un émoji cœur brisé quand le pc n'est pas sur le secteur
un émoji d'éclair quand il se charge
un émoji avec une coche verte pour dire que la batterie est pleine
et un émoji avec une croix rouge quand la batterie n'est pas dans le pc

# POURCENTAGE DE LA BATTERIE ET SON STATUS #
cap=$(awk '{print $1}' /sys/class/power_supply/BAT0/capacity)" %"
test $(cat /sys/class/power_supply/BAT0/uevent | awk '/POWER_SUPPLY_PRESENT=/') == 'POWER_SUPPLY_PRESENT=1' && pres="" || pres="❌ Batterie  Retirée  0" #le zéro sert à ne pas laisser le sigle pourcentage tout seul, retirer soit la croix soit le texte, à voir plus tard#
test $(cat /sys/class/power_supply/BAT0/uevent | awk '/POWER_SUPPLY_STATUS=Charging/') == 'POWER_SUPPLY_STATUS=Charging' && char="⚡ "
test $(cat /sys/class/power_supply/BAT0/uevent | awk '/POWER_SUPPLY_STATUS=Discharging/') == 'POWER_SUPPLY_STATUS=Discharging' && dchar="? "
test $(cat /sys/class/power_supply/BAT0/uevent | awk '/POWER_SUPPLY_STATUS=Full/') == 'POWER_SUPPLY_STATUS=Full' && full="✅ "

# PERMET AU SCRIPT D'ÊTRE AFFICHÉ DANS LE PANEL SUR UNE SEULE LIGNE #
echo "<txt>          $full$dchar$char$pres$cap</txt>"



Et le pire c'est que ça fonctionne, en décharge, charge, pleine, ou sans la batterie dans le pc, les émojis sont bien présents, le pourcentage aussi, les émojis changent au fur et à mesure du status de la batterie, (même si le code est peut-être pas très propre)

Tu vois que je cherche toute seule de mon côté, et que quand je demande de l'aide c'est que j'ai rien trouvé ;-)

Hors ligne

#15 16-08-2020 15:36:52

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Plugin genmon de xfce

Le commande $(cat /sys/class/power_supply/BAT0/uevent) est l'opération la plus couteuse normalement (même si c'est pas un accès à un vrai fichier). Là tu la relances plus de fois que nécessaire

L'élégance voudrait plutôt qu'on essaye de l'appeler qu'une seule fois ; par exemple

en l'appelant dans un "case" :

case $(awk -F'=' '/^POWER_SUPPLY_STATUS/{print $2}' /sys/class/power_supply/BAT0/uevent) in
   Charging) state="⚡ ";;
   Discharging) state="? ";;
   Full) state="✅ ";;
esac
 


ou autre formulation plus "classique", en utilisant une variable

state=$(awk -F'=' '/^POWER_SUPPLY_STATUS/{print $2}' /sys/class/power_supply/BAT0/uevent)

if test "$state" == "Charging"
then
   state="⚡ "
elif test "$state" == "Discharging"
   state="? "
elif test "$state" == "Full"
   state="✅"
fi



Qui équivaut plus ou moins à ton code en étant "moins lourd" à executer (au passage tu me fais découvrir awk, moi à la place j'aurai dû faire un grep et un cut ou sed à la place >_<).

Dernière modification par otyugh (16-08-2020 15:43:29)


datalove-datalove-s1-2.png agendadulibre-lagendadulibre.png arzinfo-arzinfo.png

Hors ligne

#16 16-08-2020 19:50:54

manon
Membre
Inscription : 21-05-2020

Re : Plugin genmon de xfce

Ah oui en effet c'est plus propre et moins redondant, merci.

Il faut vraiment que j'apprenne à comprendre et maîtriser ces if, fi, case, et toussa !

Hors ligne

Pied de page des forums