Conky : un outil de monitoring

le 25/08/2011 dans Linux #Linux#personnalisation

Conky est un moniteur système permettant d'afficher en arrière-plan sur le bureau (et de surveiller donc) quasiment toutes les variables systèmes, telles l'activité du CPU, l'occupation de la RAM et des disques, les informations réseau, les températures… ainsi que d'autres éléments comme la météo, un calendrier, des flux RSS… Son installation est des plus simples mais sa configuration peut s'avérer difficile même si la documentation disponible est extrêmement riche.

Aperçu

Voici une capture d'écran de mon Conky qui permet de se rendre compte des possibilités (une partie seulement) de ce logiciel et qui j'espère vous donnera envie de poursuivre la lecture de cet article.

conky

Installation et premier lancement

Conky est disponible, sous Ubuntu, dans les dépôts Universe. Ces dépôts activés, il faut tout simplement installer le paquet conky-all :

$ sudo aptitude install conky-all

Une fois Conky installé, vous pouvez le lancer depuis un terminal (c'est mieux au départ en cas d'erreurs) :

$ conky

conkydefaut Out of the box, Conky se lance en utilisant le fichier de configuration /etc/conky/conky.conf (que je présente ci-dessous en ayant supprimé les 25 premières lignes commentées) et, si vous vous rendez sur un autre bureau vous devriez voir quelque chose ressemblant à la capture ci-contre.

Bien sûr, certaines informations risquent de ne pas s'afficher correctement, notamment celles concernant la vitesse de download et d'upload dans la mesure où conky cherche ces informations pour l'interface eth0. Ainsi, chez moi, ces variables renvoient 0 puisque j'utilise l'interface eth1. Pour connaître l'interface que vous utilisez, il suffit de regarder dans le Network-manager ou de repérer l'interface pour laquelle vous obtenez une adresse dans ce que renvoie la commande :

$ ifconfig

Comme vous pouvez le constater en regardant rapidement le code ci-dessous, le fichier de configuration est structuré en deux parties. La première (avant TEXT, ligne 57) permet de définir la façon dont conky sera affiché (position, style de la fenêtre, bordures…), le délai entre chaque rafaîchissement, et bien d'autres paramètres. La seconde (après TEXT) permet de déterminer ce qui sera affiché par Conky, que ce soit du texte brut, des variables, le résultat de commandes externes, le tout pouvant être formaté (police, couleur, position…).

alignment top_left
background no
border_width 1
cpu_avg_samples 2
default_color white
default_outline_color white
default_shade_color white
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no
use_xft yes
xftfont DejaVu Sans Mono:size=12
gap_x 5
gap_y 60
minimum_size 5 5
net_avg_samples 2
no_buffers yes
out_to_console no
out_to_stderr no
extra_newline no
own_window yes
own_window_class Conky
own_window_type desktop
stippled_borders 0
update_interval 1.0
uppercase no
use_spacer none
show_graph_scale no
show_graph_range no

TEXT
${scroll 16 $nodename - $sysname $kernel on $machine | }
$hr
${color grey}Uptime:$color $uptime
${color grey}Frequency (in MHz):$color $freq
${color grey}Frequency (in GHz):$color $freq_g
${color grey}RAM Usage:$color $mem/$memmax - $memperc% ${membar 4}
${color grey}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar 4}
${color grey}CPU Usage:$color $cpu% ${cpubar 4}
${color grey}Processes:$color $processes  ${color grey}Running:$color $running_processes
$hr
${color grey}File systems:
 / $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color grey}Networking:
Up:$color ${upspeed eth0} ${color grey} - Down:$color ${downspeed eth0}
$hr
${color grey}Name              PID   CPU%   MEM%
${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}

Configuration

La configuration de Conky se fait à la main en éditant le fichier ~/.conkyrc ; ce fichier est inexistant, ce qui signifie que nous allons configurer Conky from scratch. Un simple

$ nano ~/.conkyrc

suffit. Rien ne vous empêche évidemment de copier l'exemple de configuration et de le modifier par la suite à votre convenance. Si vous souhaitez faire cela :

$ cp /etc/conky/conky.conf ~/.conkyrc && nano ~/.conkyrc

Nous allons maintenant construire notre fichier de configuration pas à pas en nous basant sur notre propre configuration que nous avons constituée en nous basant sur de nombreuses sources.

Ressources

Il existe de très nombreuses ressources concernant Conky. Ainsi, outre le site du projet, vous pouvez vous reposez sur les documentations proposées sur les sites dédiées à certaines distributions GNU/Linux comme Ubuntu ( ici et ) et Fedora ( ici).

Vous pouvez aussi vous inspirez des très nombreux conkyrc posté sur les forums de la communauté Ubuntu anglophone ou francophone.

Pour l'affichage des informations de mon CPU Core2Duo, je me suis inspiré d'un billet [en] de Hodge sur le site 64 Bit Jungle.

Avant TEXT

Pour connaître l'ensemble des paramètres utilisables pour la configuration de Conky, il faut se reporter à cette page du site officiel du projet.

background yes
minimum_size 300 5
maximum_width 300
own_window yes
own_window_type override
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
alignment top_right
gap_x 5
gap_y 5
double_buffer yes
format_human_readable true
use_xft yes
xftfont Sans-Serif:size=9:pixelsize=11
xftalpha 0.8
update_interval 1.0
total_run_times 0
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
show_graph_scale no
show_graph_range no
stippled_borders 8
border_margin 4
border_width 1
default_color ffd700
default_shade_color black
default_outline_color white
no_buffers yes
uppercase no
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
default_bar_size 300 9

Je ne vais pas passer tous les paramètres en détails (d'autant plus que certains ici n'ont pas d'effet, dépendant d'autres paramètres comme tout ce qui concerne les bordures) mais vais insister sur ceux qui me semblent essentiels ou peuvent être problématiques.

  • own_window yes : conky a sa propre fenêtre ;
  • own_window_type override : ce type n'est pas pris en charge par le gestionnaire de fenêtres, vous pouvez en faire un peu ce que vous souhaitez (voir propriété suivante). Autres possibilités à essayer selon et déterminer selon le résultat obtenu : desktop, panel, dock, normal ;
  • own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager : fenêtre sans décoration, toujours dessous, collée, n'apparaît pas dans la barre des tâches ni dans le sélecteur d'applications ;
  • alignment top_right : gère la position de Conky. Autres valeurs possibles : top_left, bottom_left et bottom_right ;
  • gap_x et gap_y : espace en pixels entre le bord droit ou gauche de Conky et le bord de l'écran ;
  • double_buffer yes : permet de limiter le clignotement ;
  • update_interval 1.0 : délai entre chaque rafraîchissement en secondes ;
  • total_run_times 0 : nombre de rafraîchissement avant que Conky ne s'arrête, 0 pour que Conky ne s'arrête jamais.

Nous pouvons maintenant passer à ce que va afficher Conky.

Après TEXT

Attention : il faut impérativement que TEXT apparaisse dans le fichier de configuration.

Pour connaître l'ensemble des variables et autres instructions utilisables, il faut se plonger dans la lecture de cette page.

Ci-dessous vous trouverez la suite de mon fichier de configuration (amputé cependant de la partie permettant d'afficher la musique que j'écoute soit avec Gmusicbrowser soit grâce à MPD et qui fait l'objet d'un autre article).

Quelques précisions :

  • je fais appel à des polices un peu exotiques dont voici la liste :
    • Open Logos
    • Martin Vogel's Symbols
    • StyleBats
      Lorsque vous téléchargez ces polices, vous obtenez une archive. Il vous suffit d'ouvrir ces archives et de décompresser les fichiers .ttf dans le répertoire ~/.fonts (que vous devrez peut-être créer).
  • pour afficher le calendrier du mois en cours, nous appelons le programme cal (ligne 9) ;
  • je fais appel au programme externe birthday pour afficher les anniversaires à venir (ligne 15).
TEXT
${font openlogos:size=30}$alignc${color white}U t ${color orange}u ${color white}J T
${voffset -65}
${color orange}${font :size=16}$alignc${exec cat /etc/issue | grep Ubuntu | cut -c1-12}${font}${color}
$alignc$kernel
 
${color 5da5d3}${font Martin Vogel's Symbols:size=24}U ${font :size=14}${voffset -4}Date & Events
 
${font DeJaVu Sans Mono:size=9}${color grey}${execpi 60 DJS=`date +%_d`; cal | grep 200 | cut -c 5}${font DeJaVu Sans Mono:size=9}${color grey}${execpi 60 DJS=`date +%_d`; cal |grep 200 | cut -c 6-}
${color grey}${font DeJaVu Sans Mono:size=9}${execpi 60 DJS=`date +%_d`; cal | sed '/./!d' | sed '1d' | sed 's/$/ /' | fold -w 21 | sed -n '/^.\{21\}/p' | sed 's/^/ /' | sed /" $DJS "/s/" $DJS "/" "'${color #11B3F8}'"$DJS"'${color}'" "/}
${voffset -85}${color orange} ${font :size=16}$alignc${offset 80}${time %H:%M}
${voffset -8}${font :size=12}$color$alignc${offset 80}${time %A}
${font :size=14}$alignc${offset 80}${color orange}${time %d}${font :size=12}$color
$alignc${offset 80}${time %B %Y}
${voffset 5}$font$color${exec birthday -W 15}
${voffset -15}${color 5da5d3}${font Martin Vogel's Symbols:size=24}i ${font :size=14}${voffset -4}System
 
${color orange}${font StyleBats:size=16} P ${font :size=11}${voffset -3}Uptime : $color${font}${uptime}
 
${color orange}${font StyleBats:size=16} L ${font :size=11}${voffset -3}Processes : $color${font}$processes ${color grey}/ $color$running_processes ${color grey}running$color
 
${color orange}${font StyleBats:size=16} k ${font :size=11}${voffset -3}CPU$font${color 5da5d3}
${cpugraph cpu0 424242 445F70}
${voffset -28}${alignc}${color orange}Frequence : ${color}${freq_g} Ghz ${color grey}| ${color orange}Usage : ${color}${cpu cpu0}%
 
${color 5da5d3}${cpugraph cpu1 25,120 424242 445F70} ${color 5da5d3} $alignr${cpugraph cpu2 25,120 424242 445F70}
${voffset -28}${color orange} Core 1 : $color${cpu cpu1}% $alignr${color orange}Core 2 : $color${cpu cpu2}% 
 
 
${color orange}${font StyleBats:size=16} y ${font :size=11}${voffset -5}RAM$color${font}
 
${color 445F70}${membar}
${voffset -14}$alignc$color$mem / $memmax ($memperc% used)
 
${color orange}${font StyleBats:size=16} j ${font :size=11}${voffset -3}Filesystems$color${font}
 
${color orange}swap $alignr${color 445F70}${swapbar 9,220}
${voffset -14}$alignc$color $swap / $swapmax 
${color orange}/ $alignr${color 445F70}${fs_bar 9,220 /}
${voffset -14}$alignc$color ${fs_used /} / ${fs_size /} (${fs_free_perc /}% free)
${color orange}/home $alignr${color 445F70}${fs_bar 9,220 /home}
${voffset -14}$alignc$color ${fs_used /home} / ${fs_size /home} (${fs_free_perc /home}% free)
${color orange}/Multimedia $alignr${color 445F70}${fs_bar 9,220 /Multimedia}
${voffset -14}$alignc$color ${fs_used /Multimedia} / ${fs_size /Multimedia} (${fs_free_perc /Multimedia}% free)
 
${color orange}${font StyleBats:size=16} w ${font :size=11}${voffset -5}Network$color${font}
 
${color grey}IP locale : $color${addr eth0} $alignr${color grey}IP publique : $color${texeci 3600 wget http://checkip.dyndns.org -O - -o /dev/null | cut -d : -f 2 | cut -d \< -f 1}
 
${font PizzaDude Bullets:size=16}r${font} ${voffset -4}${downspeed eth0}/s${voffset 4} ${goto 150}${voffset -7}${font PizzaDude Bullets:size=16}v${font} ${voffset -4}${upspeed eth0}/s ${voffset 4}
 
${font PizzaDude Bullets:size=16}S${font} ${voffset -4}${totaldown eth0} ${voffset 4}${goto 150}${voffset -7}${font PizzaDude Bullets:size=16}M${font} ${voffset -4}${totalup eth0}