Conky - Exemple de configuration

screenshot-conkyVoilà un exemple de configuration pour conky.
L'installation de conky étant triviale sur la plupart des distributions et largement décrite, elle n'est pas abordée.

A noté que j'ai récupéré ces fichiers sur le site officiel de conky, en particulier les fichiers de Hellf[i]re.
J'ai surtout modifié le fichier principale pour l'adapter à mon matériel (dual core avec 2 sessions de folding@home, disques durs, carte graphique...) et j'ai aussi changé les couleurs.

Voilà déjà l'archive qui contient tous les fichiers utils: conkyrc-blue-aro

En plus de ces fichiers, pour afficher toutes les infos, vous aurez besoin de:

  • hddtemp pour la température des disques durs
  • nvclock pour les données de la carte graphique si elle est de marque nvidia. Si c'est pas le cas, dommage... faudra trouver autre chose.

Les documents de références:

  1. man conky !!! comme d'habitude, c'est un réflexe à avoir.
  2. le site officiel de conky, qui contient plein de doc et d'exemples: en particuliers deux tableaux: les paramètres de configuration et les variables affichables.

Fichier de configuration principal

Voilà le fichier principal que l'on donne à conky:

  • soit en le renommant en ".conkyrc" et en le plaçant dans son répertoire d'utilisateur. Par exemple: /home/arofarn/.conkyrc
  • soit en l'appelant au lancement de conky. Par exemple:

conky -c /home/arofarn/conky/conky-blue-aro

Le fichier de configuration de conky s'organise en 2 parties:

  1. du début à la ligne "TEXT", les paramètres de configuration. Les lignes de commentaires commencant pas un dièse "#" sont admises.
  2. en dessous de "TEXT", ce qui va être affiché. Les "#" sont affichés à l'écran, donc pas de commentaire possible dans cette partie. Les variables affichables ont le format suivant:

${nom_de_la_variable paramètre1 paramètre2}

Première partie du fichier:

background yes
font 7x13
use_xft no
on_bottom yes
update_interval 1.0

On commence par les option les plus général: background permet de fusionner conky avec l'arrière plan du bureau, les deux option suivante concerne la police de caractère. L'option on_bottom a été abandonnée au profit de background. Enfin on défnit l'intervalle de mise à jour de conky en secondes.

total_run_times 0
own_window_transparent yes
double_buffer yes
minimum_size 280 900
maximum_width 308

total_run_times indique combien de rafraîchessement conky fait avant de quitter (0 le faisant tourner indéfiniment).
own_window_transparent rend conky pseudo-transparent.
double_buffer permet d'éliminer un éventuellement clignotement
minimum_size donne la taille minimal de la fenêtre conky (largeur hauteur)
maximum_width défini la largeur maximale de la fenêtre conky

draw_shades no
draw_outline no
draw_borders no
stippled_borders 8
border_margin 4
border_width 1

Ici on défini l'ombrage, les bordures et les marges.

default_color white
default_shade_color black
default_outline_color 2C4B68

Maintenant les couleurs par défaut, dans l'ordre, du texte, des ombres et des contours. Pour les couleurs de base, il y a les nom en anglais, sinon le code héxadécimal de la couleur (code type HTML). Perso, j'utilise kcoloredit pour les ajuster.

alignment top_left
gap_x 8
gap_y 8

Ces options permettent de placer conky sur le bureau, en haut à droite (alignment) avec un décalage de 8 pixel en abscisse et en ordonnée (pour qu'il ne soit pas collé contre le bord de l'écran.

no_buffers yes
cpu_avg_samples 2
net_avg_samples 2

no_buffers permet de soustraire le cache des systèmes de fichiers de la quantité de mémoire utilisé, lors de l'affichage
cpu_avg_samples et net_avg_samples permettent de définir le nombre d'échantillon à prendre en compte pour le calcul de la moyenne de l'utilisation du CPU et du réseau.

override_utf8_locale yes
uppercase no

ces deux option force (ou non) l'utilisation du jeux de caractères UTF-8 et des majuscules

use_spacer no
Pour ajouter un espace après certain objet spéciaux pour les empêcher de déplacer certain autres éléments. Surtout utils avec des polices à largeurs fixes.

Deuxième partie du fichier:

Pour plus de clareté j'ai enlevé toutes les balise ${color #xxxxxx}

TEXT
$nodename linux-$kernel${alignr}${time %T}

nom du système (HOSTNAME), nom du noyau et heure

Système:
Uptime: $uptime - Charge: $loadavg
Fréquence CPU: $freq_dyn_g Maximum:$freq_g
Utilisation Core 1: ${cpu cpu1}% ${cpubar cpu1}
Utilisation Core 2: ${cpu cpu2}% ${cpubar cpu2}
${cpugraph cpu2 32,150 2C4B68 5C9CD9} ${cpugraph cpu1 32,150 2C4B68 5C9CD9}
Mémoire: $mem/$memmax - $memperc% ${membar}
Swap : $swap/$swapmax - $swapperc% ${swapbar}
Processus: $processes Running: $running_processes

Ce bloque permet l'affichage:
de l'uptime et de la charge moyenne du système les 1, 5 et 15 dernières minutes
la fréquence de fonctionnement du CPU actuelle et maximal depuis le lancment de conky
la charge respective des deux coeurs du CPU dual-core (comme les Core 2 Duo et les Athlon X2). Sous forme numérique, de barre et de graphe.
L'utilisation de la mémoire vive et du swap
le nombre de processus total et actifs

Réseau (Gigabit - eth1): ${alignr}IP: ${addr eth1}
Descendant: ${downspeed eth1} ko/s${offset 25}Montant:${upspeed eth1} ko/s
${downspeedgraph eth1 32,150 2C4B68 5C9CD9} ${upspeedgraph eth1 32,150 2C4B68 5C9CD9}

Les paramètres du réseau sur l'interface eth1 (Ethernet Gigabit filaire).

Réseau (Wifi - ra0): ${alignr}IP: ${addr ra0}
Descendant: ${downspeed ra0} ko/s${offset 25}Montant: ${upspeed ra0} ko/s
Status: ${linkstatus ra0}
${downspeedgraph ra0 32,150 2C4B68 5C9CD9} ${upspeedgraph ra0 32,150 2C4B68 5C9CD9}

idem mais pour l'interface ra0 (Wifi). On note en plus la variable linkstatus qui permet d'avoir la qualité de réception.

Systèmes de fichiers:
/ ${fs_used /}/${fs_size /} ${fs_bar /}
/home ${fs_used /home/}/${fs_size /home/} ${fs_bar /home/}
/usr ${fs_used /usr/}/${fs_size /usr/} ${fs_bar /usr/}
/opt ${fs_used /opt/}/${fs_size /opt/} ${fs_bar /opt/}
/var $${fs_used /var/}/${fs_size /var/} ${fs_bar /var/}
Sauvegarde ${fs_used /mnt/sauvegarde/}/${fs_size /mnt/sauvegarde/} ${fs_bar /mnt/sauvegarde/}

Le taux de remplissage de quelques système de fichiers importants.

Température des disques durs:
/dev/sda ${hddtemp /dev/sda}
/dev/sdb ${hddtemp /dev/sdb}
/dev/hde ${hddtemp /dev/hde}

Une variable relativement nouvelle: hddtemp, qui utilise le logiciel du même nom pour afficher la températures des disques durs.

Geforce 7600GS:
Fréquences: GPU: ${execi 10 nvclock -i | grep "GPU clock" | grep '[0-9][0-9][0-9].[0-9]' -o}MHz$ / RAM:${execi 300 nvclock -i | grep "Clock" | grep '[0-9][0-9][0-9].[0-9]' -o}MHz
Température GPU: ${execi 10 nvclock -T | grep "temperature" | grep '[0-9][0-9]' -o}°C

L'utilisation de la variable execi (execution d'une commande à intervalle régulier en seconde) permet de récupérer les paramètres de la carte graphique. En l'occurence, une Geforce 7600GS questionnée par nvclock.

Noms PID CPU% MEM%
Utilisation CPU
${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
${top name 5} ${top pid 5} ${top cpu 5} ${top mem 5}
Utilisation Mémoire
${top_mem name 1} ${top_mem pid 1} ${top_mem cpu 1} ${top_mem mem 1}
${top_mem name 2} ${top_mem pid 2} ${top_mem cpu 2} ${top_mem mem 2}
${top_mem name 3} ${top_mem pid 3} ${top_mem cpu 3} ${top_mem mem 3}

une section "top-like" qui donne les 5 plus gros consommateurs de resource processeur et les 3 plus gros consommateur de mémoire.

Avancement Folding@Home
Client 1:
${execi 300 /home/arofarn/.conky/fah_status_1.sh}
Client 2:
${execi 300 /home/arofarn/.conky/fah_status_2.sh}

Encore la variable execi. Ici pour lancer des scripts externes qui récupère les données des Work Unit de Folding@Home en cours. Je fait tourner une instance du client F@H par coeur de calcul. Il faut ainsi un script pour chacun. Le script en question est fournis juste après.

Script Folding@Home

Il en faut un part instance de folding@home tournant sur la machine.

#!/bin/bash# Location of unitinfo.txt
FAH="/opt/foldingathome/client1/unitinfo.txt"
if [ -f $FAH ]
then
sed -e 's/^Name:.\(.\{20\}\).*$/Nom: \1.../' -e 's/Progress:/Progression /' -e 's/Due time:/A faire pour le :/' -e 's/Download time:/Téléchargé le :/' -e '/^Current/d' -e '/^-/d' $FAH
fi
exit 0

Dans chaque scripts, changer la variable FAH pour pointer vers le bon fichier unitinfo.txt . C'est améliorable facilement en faisant en sorte de donne ce chemin en paramètre au script, à voir par la suite.

Pour plus d'info sur le projet Folding@Home:

Script utils

Voilà quelques scripts utils, qui peuvent être appelés grâce à la variable execi ou exec par exemple.

Scripts pour afficher les infos de Portage (pour Gentoo)

Dernière synchronisation de l'arbre portage

Nécessite perl avec le module Date::Manip.

#!/usr/bin/perl
use Date::Manip;$date = `grep "Sync completed" /var/log/emerge.log | tail -n1 | cut -c-10`;
$date = &DateCalc("Jan 1, 1970 00:00:00 GMT",$date);
$date = UnixDate("$date","le %x à %H:%M");
print "$date";

Paquet en cours d'installation

#!/bin/bash
# emerge-current.sh by Hellf[i]re
#
# This script is designed to read the name of the last package compiled.
#
# As this script does read the entirety of emerge.log, it will be rather
# heavy on the CPU. It shouldn't be enough to be noticable on newer (2.0Ghz+)
# processors, but it still should not be run more often than every 30 seconds.
#
# Usage:
# .conkyrc: ${execi [time] /path/to/script/emerge-current.sh}
#
# Usage Example
# ${execi 30 /home/youruser/scripts/emerge-current.sh}tac /var/log/emerge.log |\
grep 'Compiling' |\
head |\
sed -e 's/.*(//' |\
sed -e 's/::.*)//' |\
head -n 1 |\
cut -d \) -f 1

Progression des installations

#!/bin/bash
#
# emerge-status.sh by Hellf[i]re
#
# This script will report the current status of portage.
#
# Usage:
# .conkyrc: ${execi [time] /path/to/script/emerge-current.sh}
#
# Usage Example
# ${execi 30 /home/youruser/scripts/emerge-current.sh}
#
# Known Bugs:
# 1) If there are two emerges running at once, when the first one finishes
# running, the script will report the current status as "Completed".
# 2) If there is a emerge running and you run a search, the script will
# report the current status as "Completed", until the running emerge
# moves to the next package, or itself completes.
# The reasons for this are twofold - one, it's a feature ;) and two, there
# would be far too much parsing required to find out the current status of
# every command which is run in parallel.STATUS=`tail -n 15 /var/log/emerge.log |\
grep -iE "Compiling|Cleaning|AUTOCLEAN|completed|search|terminating|rsync" |\
cut -d ' ' -f "2-" |\
grep -Ev 'Finished\.|Cleaning up\.\.\.' |\
tail -n 1`
#echo "$STATUS"
if [ "`echo "$STATUS" | grep -i compiling`" != "" ]; then echo Compiling
elif [ "`echo "$STATUS" | grep -i cleaning`" != "" ]; then echo Cleaning
elif [ "`echo "$STATUS" | grep -i autoclean`" != "" ]; then echo Autoclean
elif [ "`echo "$STATUS" | grep -i sync`" != "" ]; then echo Syncing
elif [ "`echo "$STATUS" | grep -i search`" != "" ]; then echo Searching
elif [ "`echo "$STATUS" | grep -i completed`" != "" ]; then echo Completed
elif [ "`echo "$STATUS" | grep -i terminating`" != "" ]; then echo Completed
else echo Script Error!
fi

Scripts pour afficher des flux RSS

Nécessite curl.

Il faut changer l'adresse du file RSS à suivre à la ligne commençant par URI. On peut aussi modifier le nombre de billet à afficher grâce à la variable LINES.

#!/bin/bash
# RSS Feed Display Script by Hellf[i]re v0.1
#
# This script is designed for most any RSS Feed. As some feeds may not be
# completely compliant, it may need a bit of tweaking
#
# This script depends on curl.
# Gentoo: emerge -av net-misc/curl
# Debian: apt-get install curl
# Homepage: http://curl.haxx.se/
#
# Usage:
# .conkyrc: ${execi [time] /path/to/script/conky-rss.sh}
#
# Usage Example
# ${execi 300 /home/youruser/scripts/conky-rss.sh}#RSS Setup
URI=http://www.pcinpact.com/include/news.xml #URI of RSS Feed
LINES=4 #Number of headlines
#Environment Setup
EXEC="/usr/bin/curl -s" #Path to curl
#Work Start
$EXEC $URI | grep title |\
sed -e :a -e 's/<[^>]*>//g;/
sed -e 's/[ \t]*//' |\
sed -e 's/\(.*\)/ \1/' |\
sed -e 's/\.//' |\
sed -e 's/\"//' |\
sed -e 's/\"//' |\
head -n $(($LINES + 2)) |\
tail -n $(($LINES))

Lancer conky automatiquement au démarrage de KDE:

Créer un fichier dans ~/.kde/Autostart (par exemple /home/arofarn/.kde/Autostart/conky), avec dedans:

#!/bin/sh
conky -d -c /chemin/de/votre/fichier/de/config

L'option -c [...] n'est pas util si votre fichier de configuration est ~.conkyrc.

L'option -d, pour daemonize, sert à mettre la tâche en arrière-plan.

Ensuite, il faut rendre ce fichier executable, soit par clic droit, Propriété/Droits dans Konqueror, soit en ligne de commande:

chmod u+x ~.kde/Autostart/conky

1 comment.

Pingback on February 10th, 2007.

[...] Conky - Exemple de fichier de configuration [...]

Leave a comment

Names and email addresses are required (email addresses aren't displayed), url's are optional.

Comments may contain the following xhtml tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>