Conky

Conky est une application qui délivre en temps réel des informations sur votre système.
Ces informations s'affichent sur votre bureau, dans une fenêtre classique, dans une barre de status comme dzen
ou dans une barre de statut propre à un gestionnaire de fenêtres, comme dwm ou wmfs.
Conky est livré avec de nombreuses options internes mais peut aussi faire appel à des scripts (bash,python,lua…),
ce qui lui permet d'afficher à peu près tout ce que vous voulez et comme vous le voulez.

La configuration de Conky passe par l'édition du fichier .conkyrc situé généralement dans votre dossier utilisateur.
Ce fichier se divise en deux parties:

  • les fonctions déterminent l'emplacement, la dimension, le type de fenêtre, la couleur du texte…
  • les variables déterminent la nature des informations à afficher.

La séparation se fait par la ligne “TEXT” dans le conkyrc; tout ce qui vient après TEXT sera affiché dans votre conky.

Configuration

Le net est rempli de tutoriels plus ou moins complets à propos de conky. Une des meilleures sources d'information (en dehors du site officiel) reste Conky Pitstop, où vous pourrez trouver de nombreuses astuces en français (merci wlourf). Vous trouverez une liste détaillée complète des fonctions et variables employées par conky dans ce wiki, mais quelques exemples seront plus explicatifs: en passant par ces configurations, vous aurez un apperçu assez complet des possibilités de conky.

Conky classique

Prenons pour exemple le conky de départ de crunchbang (situé dans votre /home/$USER/.conkyrc).
conky crunchbanglinux
Nous allons détailler le conkyrc qui permet cet affichage.

##############################################
#  Settings
##############################################
background yes                                                     ## permet à conky de tourner en arrière-plan
use_xft yes                                                        ## utilise la police xft
xftfont sans:size=9                                                ## nom de la police xft à utiliser
xftalpha 1                                                         ## opacité de la police xft, ici 1=opaque
update_interval 1.0                                                ## conky se recharge toutes les secondes
total_run_times 0                                                  ## conky se relance à l'infini
own_window yes                                                     ## conky utilise sa propre fenêtre
own_window_transparent yes                                         ## conky dessine une fenêtre transparente
own_window_type desktop                                            ## type de fenêtre de conky: bureau
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager  ## propriétés de la fenêtre
double_buffer yes                                                  ## empêche le clignotement
minimum_size 200 200                                               ## taille minimale largeur200,hauteur200
maximum_width 240                                                  ## largeur maximale 240 px
draw_shades no                                                     ## n'affiche pas les ombres sous le texte
draw_outline no                                                    ## n'affiche pas le contour de la police
draw_borders no                                                    ## n'affiche pas les bordures
draw_graph_borders no                                              ## n'affiche pas le contour des graphiques
default_color d8d8d8                                               ## couleur des textes et bordures
default_shade_color 000000                                         ## couleur des ombres
default_outline_color d9d7d6                                       ## couleur du contour de la police
alignment top_right                                                ## alignement de conky, ici en haut à droite
gap_x 12                                                           ## décallage horizontal, ici 12px
gap_y 24                                                           ## décallage vertical, ici 24px
no_buffers yes                                                     ## 'buffers' non pris en compte dans le calcul de mémoire.
uppercase no                                                       ## police en mode normal (Maj/min)
cpu_avg_samples 2                                                  ## nombre de processeurs pris en compte: ici 2
override_utf8_locale yes                                           ## pour avoir les caractères accentués
##############################################
#  Output
##############################################
TEXT                                                               ## ici commencent les informations à afficher
I N F O R M A T I O N S   S Y S T E M E                            ## texte brut sans variables (pas de $)
${hr}                                                              ## ligne horizontale
Hôte :$alignr$nodename                                             ##--|
Uptime :$alignr$uptime                                             ##  |
RAM :$alignr$mem/$memmax                                           ##  |--variables notez que les {} ne sont pas
Swap :$alignr$swap/$swapmax                                        ##  |  nécessaires pour les variables sans arguments
Partition / :$alignr${fs_used /}/${fs_size /}                      ##  |
CPU :$alignr${cpu cpu0}%                                           ##--|
                                                                   ## lignes vides: notez que conky prend en compte
                                                                   ##               les sauts de lignes.
R A C C O U R C I S   C L A V I E R                                ## texte brut sans variables (pas de $)
${hr}                                                              ## ligne horizontale
Alt+F2$alignr Exécuter                                             ## ici commencent la description des raccourcis clavier #!
Alt+F3$alignr Exécuter (alternatif)
Super+Space$alignr Menu Principal
Super+Tab$alignr Menu du client
Super+t$alignr Terminal
Super+f$alignr Gestionnaire de fichiers                            ## notez la variable "$alignr" (alignement à droite)
Super+e$alignr Editeur de texte                                    ## qui permet une meilleure présentation
Super+m$alignr Lecteur multimédia
Super+w$alignr Navigateur web
Super+l$alignr Vérouiller l'écran
Super+v$alignr Contrôle du volume
Super+x$alignr Déconnexion
PrtSc$alignr Capture d'écran

Hormis la description des raccourcis claviers, ce conky ressemble beaucoup à la configuration de conky par défaut (situé dans /etc/conky/conky.conf). Cette configuration de base est suffisamment explicite pour qui veut un conky simple.

Conky en ligne

Le conky en ligne, nommé ainsi car il tient sur une seule ligne (ou deux), est une façon élégante d'afficher ses informations système. Cest aussi très pratique, car combiné à la configuration des “marges” d'openbox, vos informations resteront toujours visibles. La configuration de ce genre de conky est un peu plus complexe car elle fait entrer en jeu les variables d'alignements et de décallage ainsi que quelques scripts.
conky en ligne
Examinons le conkyrc correspondant:

background yes
use_xft yes                                                        ## une police à chasse fixe est recommandée pour
xftfont Terminus:pixelsize=10                                      ## ce genre de conky. 
xftalpha 0.8                                                       
update_interval 1.0
total_run_times 0
own_window yes
own_window_transparent no                                          ## la fenêtre est opaque pour être toujours visible 
own_window_colour 161616
own_window_type override                                           ## type "override": conky 100% indépendant
own_window_title Infos System
own_window_hints undecorated,below,sticky
double_buffer yes
minimum_size 1024 0                                                ## largeur mini=maxi=taille de l'écran, conky
maximum_width 1024                                                 ## ressemble à une barre de tâche
draw_shades no
draw_outline no
draw_borders no
border_inner_margin 0
draw_graph_borders no
default_color grey60                                               ## couleur par défaut
color1 FF3A3A # rouge                                              ##--|
color2 FFC13A # orange                                             ##  |
color3 68FF3A # vert                                               ##  |--couleurs additionnelles
color4 3AFFFD # bleu ciel                                          ##  |
color5 443AFF # bleu marine                                        ##--|
alignment tr
gap_x 0
gap_y 0
no_buffers yes
uppercase no
text_buffer_size 1024
top_name_width 10                                                  ## limite la taille des noms des processus dans '$top'
cpu_avg_samples 2
short_units yes
override_utf8_locale yes
use_spacer none
if_up_strictness address                                           ## attend d'obtenir une IP avant de déclarer le réseau ouvert
##############################################
#  Output
##############################################
TEXT
  Pkg ${texeci 28800 ~/bin/debupdates.sh} update(s)${goto 150}BAT ${battery_bar 8,40 BAT0} $battery${goto 376}hdd:${ibm_temps 2}°C  cpu:${ibm_temps 0}°C  gpu:${ibm_temps 3}°C${goto 576}vol ${if_match "$ibm_volume" == "mute"}mute${else}${ibm_volume}/14${endif} - pcm ${mixer PCM}%${goto 760}R/W ${diskiograph 10,40} $diskio/s${goto 920}HDD ${fs_bar 8,40 /} ${fs_used_perc /}%
${if_up eth0} ${color4}DL ${downspeedgraph 8,40 eth0} ${downspeed eth0}/s${color3}${goto 156}UP ${upspeedgraph 8,40 eth0} ${upspeed eth0}/s${color}${goto 296}${color grey80}gMail ${texeci 120 python ~/bin/gmail.py}${else}  no connection${endif}${goto 376}${color1}CPU ${cpugraph 8,40} $cpu% > ${top name 1}${goto 576}${color2}RAM ${membar 8,40} $memperc% > ${top_mem name 1}${color}${goto 760}${color #CCCCCC}LOAD $loadavg${color}${alignr 10}${time %a %d %b   %I:%M}

Voici donc à quoi ressemble un conkyrc en ligne. Passons en revue les éléments remarquables de cette configuration:
Notez l'emploi quasi systématique de la variable '$goto' qui permet de placer un élément à un endroit précis. Cette variable est très utile car elle permet d'éviter aux autres de 'bouger': en effet, une variable placée par exemple derrière '$cpu' sans '$goto' sera continuellement en mouvement en fonction de la valeur de '$cpu' (1%,10%,100%).

  • La première expression remarquable est aussi la première sur la ligne: elle nous renvoie le nombre de paquets pouvant être mis à jour: '$texeci' execute le script “debupdates.sh” toutes les 28800 secondes(8 heures). Le script:
#!/bin/bash
# conky script for displaying available updates
# in Debian. This script assumes you are in the
# sudo group and require no password for root
# access. Add something as such to your conkyrc:
#${color}APT: ${color D7D3C5}${execi 28800 ~/bin/debupdates.sh}
 
sudo apt-get -qy update > /dev/null
NUMOFUPDATES=$(sudo aptitude search "~U" | wc -l)
echo $NUMOFUPDATES

Vous comprenez maintenant que '$texeci' éxécute ce sript, puis en lit le résultat afin de l'afficher à l'endroit voulu.

  • la seconde exression remarquable est le 'if_match' du volume ibm:
vol ${if_match "$ibm_volume" == "mute"}mute${else}${ibm_volume}/14${endif}

pourquoi demander à conky de m'afficher 'mute' si 'mute' ?? et bien, pour pouvoir obtenir ces deux affichages: soit “vol mute” soit “vol 5/14” remarquez que ”/14” n'apparait pas dans le premier exemple.

  • la seconde ligne commence par '${if_up eth0}, en effet, il semble inutile de demander à conky de délivrer des informations réseau si vous n'êtes pas connecté (j'aurais du y penser pour les mises à jour Debian ;) ):
${if_up eth0} ${color4}DL ${downspeedgraph 8,40 eth0} ${downspeed eth0}/s${color3}${goto 156}UP ${upspeedgraph 8,40 eth0} ${upspeed eth0}/s${color}${goto 296}${color grey80}gMail ${texeci 120 python ~/bin/gmail.py}${else}  pas de connexion${endif}

Dans cet exemple vous comprenez que si(if) eth0 est actif, conky affichera les graphiques (up/downspeedgraph), la quantité de données transférées (up/downspeed) ainsi que le nombre de nouveaux mails, sinon(else) “pas de connexion”, fin des conditions(endif).
Nous retrouvons notre variable '$texeci' mais associé à “python” pour obtenir le nombre de nouveaux gmails. Le script (sources: tinara sur #crunchbang-fr le 20/02/2012)

#! usr/bin/env python3
# simple mail script by tinara
 
import imaplib
import re
 
# If you don't want to use the SSL version for IMAP
# Mailbox = imaplib.IMAP4('host','port')
# gmail ex: host = imap.gmail.com, port = 993
Mailbox = imaplib.IMAP4_SSL('host', 'port')
rc,resp = Mailbox.login('username','password')
 
if rc == 'OK':
	rc, message = Mailbox.status('INBOX', "(UNSEEN)")
	unreadCount = re.search("UNSEEN (\d+)",str( message[0])).group(1)
	print(unreadCount)
else :
	print('Fail to connect')
 
Mailbox.logout()

Comme dans l'exemple du script debian, '$texeci' va éxécuter puis lire le résultat du script gmail.py.

  • La dernière expression remarquable est située dans la dernière section:
${alignr 10}${time %a %d %b   %I:%M}

Notez ici l'emploi de '${alignr 10}' qui aligne l'heure sur la droite du conky avec une marge de 10 pixels. Notez aussi que la variable '$time' respecte le formatage des arguments: les espaces sont restitués dans l'affichage de l'heure.

Vous savez maintenant comment positionner votre conky, lui donner les propriétés appropriées, afficher vos informations à l'emplacement désiré et faire appel à des scripts pour receuillir des informations supplémentaires.

Conky fenêtré

Dans certains cas, conky peut être affiché de façon provisoire; pour donner des infos météo, des flux rss, ou pour pouvoir le déplacer et surtout, le fermer quand on veut. Dans cet exemple, nous utiliserons les flux rss:
conkyrss
Comme vous pouvez le constater, cette fenêtre est normale :) .
Analysons le conkyrc afin de voir comment inclure des flux rss, afficher conky dans une fenêtre classique, afficher une image.

##############################################
#  Settings
##############################################
background yes
use_xft yes
xftfont sans:size=9
xftalpha 1
update_interval 1.0
total_run_times 0
own_window yes
own_window_transparent no                                ## fenêtre opaque
own_window_type normal                                   ## fenêtre de type normal afin de pouvoir être déplacée/fermée.
own_window_title flux_rss                                ## indique un titre précis pour conky
own_window_hints sticky                                  ## conky apparaitra sur tous les bureaux virtuels
double_buffer yes
minimum_size 400 280                                     ## on fixe la taille de la fenêtre:
maximum_width 400                                        ## à tester selon les flux choisis.
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
default_color d8d8d8
color1 white
default_shade_color 000000
default_outline_color d9d7d6
alignment top_middle                                     ## on centre la fenêtre sur l'écran à l'ouverture
gap_x 0
gap_y 150
border_inner_margin 0                                    ## pas de marge entre le texte et la bordure
border_outer_margin 0                                    ## pas de marge entre la bordure et le bord de la fenêtre.
no_buffers yes
uppercase no
cpu_avg_samples 2
override_utf8_locale yes
##############################################
#  Output
##############################################
TEXT
${image ~/.conky/conkyrssbg.png -p 0,0}${if_up eth0}${color1}${font Monospace:size=12:bold}CrunchBangLinux-fr${font}${color}
${rss http://crunchbanglinux-fr.org/forum/extern.php?action=feed&type=rss 10 item_titles 5}
${color1}${font Monospace:size=12:bold}Corenominal${font}${color}
${rss http://corenominal.org/feed/ 60 item_titles 5}
${color1}${font Monospace:size=12:bold}Darthwound${font}${color}
${rss http://darthwound.tumblr.com/rss 60 item_titles 5}${else} pas de connexion réseau.${endif}
  • La première variable affiche l'image de fond du conky (avec l'emblême rss). Notez que cette variable n'est pas seule sur une ligne: si c'était le cas, conky rajouterais une ligne vide à l'affichage. Pour rajouter une image de fond, vous pouvez soit prendre n'importe quelle image et la redimensionner avec conky (option -s LxH), soit préparer une image aux dimensions de votre conky, ce que j'ai fait avec cette image:
    conkyrss background.

Il vous reste juste à déterminer la position par rapport au coin supérieur gauche (-p 0,0) et le tour est joué.

  • Vous notez le retour de notre '$if_up eth0' qui empêche conky d'aller chercher des informations si le réseau n'est pas disponible. Vous pouvez également constater que les variables et options se combinent : $color1 + $font pour afficher le titre dans une couleur et une police différente, le retour aux valeurs par défaut se faisant par un '${font}${color}' en fin de ligne.
  • Passons aux flux rss: il existe une variable pour afficher les titres des flux rss (ex : “${rss http://darthwound.tumblr.com/rss 10 feed_title}”) mais j'ai préféré éditer les noms moi-même. J'utilise ici l'option “item_titles 'n'” qui permet d'afficher les 'n' premiers titres du flux, mais vous pouvez toujours appeler les titres de flux un par un avec l'option “item_title 'n'” où 'n' représente le numéro du titre (NB: les titres commencent à 0).
  • Le petit plus: vous avez certainement noté la différence de fréquence d'appel des flux rss selon les sites: le premier flux concerne les derniers posts actif du forum crunchbanglinux-fr, réglé pour être rafraichit toutes les 10 minutes: “${rss http://crunchbanglinux-fr.org/forum/extern.php?action=feed&type=rss 10 item_titles 5}”, tandis que les autres flux pointant eux sur des blogs, se renouvellent toutes les heures: “${rss http://darthwound.tumblr.com/rss 60 item_titles 5}”.
  • Le gros plus: ce style de conky se lance gràce à l'argument ”-c” qui indique à conky qu'il ne doit pas utiliser son conkyrc par défaut (/home/$USER/.conkyrc) mais un autre fichier de configuration; il se lance comme ceci:
conky -c ~/.conky/conkyrc-rss

il est donc très facile de rajouter cette ligne de commande à votre menu openbox ou créer un raccourcis clavier correspondant.
La section dans votre menu pour conkyrss (~/.config/openbox/menu.xml):

<item label="flux rss">
    <action name="Execute">
        <execute>
            conky -c ~/.conky/conkyrc-rss
        </execute>
    </action>
</item>

La section pour un raccourcis clavier (~/.config/openbox/rc.xml):

<keybind key="W-A-r">
  <action name="Execute">
    <startupnotify>
      <enabled>true</enabled>
      <name>Conky RSS</name>
    </startupnotify>
    <command>conky -c ~/.conky/conkyrc-rss</command>
  </action>
</keybind>

*pour plus d'informations sur la manière d'éditer votre menu (menu.xml)ou votre fichier de configuration openbox (rc.xml), veuillez vous rendre sur les pages dédiées: menu.xml - rc.xml.

Conky dans une barre de statut

C'est le conky qui s'affiche dans une barre de statut. Dans ce cas, conky ne s'affiche pas réellement: il s'éxécute et est “lu” par la statusbar. L'exemple classique est l'envoi de conky dans la barre de status de dwm.
Pour cela , vous aurez besoin d'un conkyrc particulier car il indiquera à conky de ne rien afficher !! … En fait, les informations seront envoyé vers STDOUT et récupérés par dwm. Voici comment procéder:
le conkyrc:

##############################################
#  Settings
##############################################
background no
out_to_console yes
out_to_x no
update_interval 1.0
total_run_times 0
uppercase no
short_units yes
use_spacer none
if_up_strictness address
##############################################
#  Output
##############################################
TEXT
[info-system]-[cpu:${cpu}%]-[ram:${memperc}%]-[i/o:${diskio}/s]-[hdd:${fs_used_perc /}%]-[up:${upspeedf eth0}/s]-[down:${downspeedf eth0}/s}]--[${time %d/%m - %I:%M}]

Vous constatez que les fonctions sont réduites lorsque conky ne s'affiche pas dans X. Bien sûr, les informatons étant supposées s'afficher dans une barre de statut, conky doit tenir sur une ligne.
Il se lance depuis le ~/.xinitrc, juste avant le lancement de la session dwm:

## set statusbar ##
conky | while true; read line; do xsetroot -name "$line"; done &

## launch WM ##
exec ck-launch-session /usr/local/bin/dwm

Conky en pipe-menu

Il est possible d'afficher des informations venant de conky dans le menu openbox en utilisant les pipe-menus. Cette fonction n'est pas accessible pour les variables '$cpu','$down/upspeed*'
Nous allons utiliser pour cela l'exemple précédent: reprenons le conkyrc-dwm, effacons les variables et renommons-le ~/.conkyrc-ob (modifiez selons vos préférences mais pensez à faire correspondre le nom dans la suite de l'exemple):

##############################################
#  Settings
##############################################
background no
out_to_console yes
update_interval 1.0
total_run_times 0
uppercase no
short_units yes
use_spacer none
if_up_strictness address
##############################################
#  Output
##############################################
TEXT

Il faut impérativement laisser une ligne vide après “TEXT”.
Ce fichier est vide … à quoi sert-il ?? Il sert de fichier de configuration pour les commandes passées dans ce script:

#!/bin/sh
LOAD=$(conky -c ~/.conkyrc-ob -q -i 1 -t '${loadavg}')
TEMP=$(conky -c ~/.conkyrc-ob -q -i 1 -t '${acpitemp}°C')
echo "<openbox_pipe_menu>"
echo "<item label=\"load:$LOAD\" />"
echo "<item label=\"cpu temp:$TEMP\" />"
echo "</openbox_pipe_menu>"

Sauvegardez-le comme ~/bin/sys_info.sh (modifiez selons vos préférences mais pensez à faire correspondre le nom dans la suite de l'exemple). Et rendez-le éxécutable:

chmod +x ~/bin/sys_info.sh

Il ne vous reste plus qu'à appeler ces informations à travers un pipe-menu. Insérez cette ligne à l'endroit où vous désirez voir le menu apparaitre:

<menu id="infos system" label="Infos Système" execute="~/.sys_info.sh" />

Si vous désirez changer les informations affichées, editez simplement votre ”~/bin/sys_info.sh”.

Conky diaporama

sources et image: zubi33 sur le forum crunchbang-fr.

il est possible de faire afficher des images par conky grâce à la variable '${image}'. couplé à un script qui choisit des images de façon aléatoire, vous obtenez un diaporama de vos photos ou images favorites.

l'exemple qui suit affiche 20 images sur un écran de 1600×900. pour une configuration différente, il faudra éditer le script et le conkyrc.
pour obtenir un diaporama sur votre bureau avec conky, il faudra tout d'abord choisir vos images, les placer dans un dossier, puis les modifier afin d'ajouter une bordure et de redimensionner vos photos. enfin, vous aurez besoin d'un script pour choisir vos images de façon aléatoire et les afficher dans conky.

  • création du dossier contenant les images à afficher en diaporama:
    $ mkdir ~/images/galerie_conky
  • copie des photos/images dans le dossier de destination
  • création du script de modification des images (dépend de imagemagick):
    $ touch ~/images/galerie_conky/polaroid.sh
  • édition du script de modification des images avec votre éditeur de texte préféré:
    #!/bin/bash
     
    # Script permettant de générer des images avec cadre et rotation dans le dossier ./final
    # en utilisant le remplacement.
    # ce script s'utilise dans le répertoire contenant les images en jpg.
     
    #Script start
     
    echo
     
    for fichier in *.jpg
    do
      ls -l "$fichier"  # Liste tous les fichiers de $PWD (répertoire courant).
     
    done
     
    echo; echo
     
    for fichier in *.jpg
    do
     
    ANGLE=$(($RANDOM % 20)) # Angle aléatoire
    if [ $(($RANDOM % 2)) -eq 1 ]
    then
        ANGLE="-"$ANGLE
    fi
    convert "$fichier" -gravity center -resize 240x240 -bordercolor snow -background black -polaroid $ANGLE "$fichier.png"
     
     
    echo "Conversion de \"$fichier\"".
    done
     
    echo
     
    for fichier1 in *.JPG
     
    do
      ls -l "$fichier1"  # Liste tous les fichiers de $PWD (répertoire courant).
     
    done
     
    echo; echo
     
    for fichier1 in *.JPG
    do
     
    ANGLE=$(($RANDOM % 20)) # Angle aléatoire
    if [ $(($RANDOM % 2)) -eq 1 ]
    then
        ANGLE="-"$ANGLE
    fi
    convert "$fichier1" -gravity center -resize 240x240 -bordercolor snow -background black -polaroid $ANGLE "$fichier1.png"
     
     
    echo "Conversion de \"$fichier1\"".
    done
     
    echo
     
    for fichier1 in *.jpeg
     
    do
      ls -l "$fichier1"  # Liste tous les fichiers de $PWD (répertoire courant).
     
    done
     
    echo; echo
     
    for fichier1 in *.jpeg
    do
     
    ANGLE=$(($RANDOM % 20)) # Angle aléatoire
    if [ $(($RANDOM % 2)) -eq 1 ]
    then
        ANGLE="-"$ANGLE
    fi
    convert "$fichier1" -gravity center -resize 240x240 -bordercolor snow -background black -polaroid $ANGLE "$fichier1.png"
     
     
    echo "Conversion de \"$fichier1\"".
    done
     
    echo
    # création du répertoire de destination
    mkdir final/
    # nettoyage des images originales
    rm *.jpg
    rm *.JPG
    rm *.jpeg
    # déplacement des images modifiées dans le dossier de destination
    mv *.png final/
     
    echo
     
    exit 0

    ce script ajoute une bordure à toutes les images jpg présentes dans le dossier où il se trouve, les redimensionne en 240×240 pixels maximum sans déformation de l'image, les sauvegarde au format png dans un dossier ~/images/galerie_conky/final, puis éfface les originaux.

  • rendre le script exécutable:
    $ chmod +x ~/images/galerie_conky/polaroid.sh
  • création du fichier de configuration de conky:
    $ touch ~/images/galerie_conky/conkyrc
  • édition du conkyrc avec votre éditeur de texte préféré:
    background yes
    update_interval 30
    total_run_times 0
    
    own_window yes
    own_window_transparent yes
    own_window_type override
    own_window_hints undecorated,below,sticky,skip_taskbar,skip_pagers
    double_buffer yes
    minimum_size 1500 3000
    maximum_width 1500  
    alignment tl
    
    gap_x 10
    gap_y 10
    
    imlib_cache_size 0
    text_buffer_size 2048
    
    TEXT
    ${execpi 300 ~/images/galerie_conky/galleryconky.sh ~/images/galerie_conky/final}
  • création du script de choix d'images aléatoires:
    $ touch ~/images/galerie_conky/galleryconky.sh
  • édition du script de choix d'images
    #!/bin/bash
     
    # Photo aléatoire pour conky
     
    FILES=( /home/$USER/images/galerie_conky/final/*.png )
    PICTURE1="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE2="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE3="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE4="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE5="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE6="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE7="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE8="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE9="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE10="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE11="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE12="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE13="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE14="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE15="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE16="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE17="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE18="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE19="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
    PICTURE20="${FILES[$(($RANDOM % ${#FILES[@]}))]}"
     
    #echo $PICTURE
     
    ## Affichage dans conky
    echo "\${image $PICTURE1 -p 0,0}"
    echo "\${image $PICTURE2 -p 0,150}"
    echo "\${image $PICTURE3 -p 0,300}"
    echo "\${image $PICTURE4 -p 0,450}"
    echo "\${image $PICTURE5 -p 250,0}"
    echo "\${image $PICTURE6 -p 250,150}"
    echo "\${image $PICTURE7 -p 250,300}"
    echo "\${image $PICTURE8 -p 250,450}"
    echo "\${image $PICTURE9 -p 500,0}"
    echo "\${image $PICTURE10 -p 500,150}"
    echo "\${image $PICTURE11 -p 500,300}"
    echo "\${image $PICTURE12 -p 500,450}"
    echo "\${image $PICTURE13 -p 750,0}"
    echo "\${image $PICTURE14 -p 750,150}"
    echo "\${image $PICTURE15 -p 750,300}"
    echo "\${image $PICTURE16 -p 750,450}"
    echo "\${image $PICTURE17 -p 1000,0}"
    echo "\${image $PICTURE18 -p 1000,150}"
    echo "\${image $PICTURE19 -p 1000,300}"
    echo "\${image $PICTURE20 -p 1000,450}"
     
     
    exit 0

    c'est dans ce script que vous pouvez régler le nombre et la position des images sur votre bureau.

  • rendre le script galleryconky exécutable:
    $ chmod +x ~/images/galerie_conky/gallery_conky.sh

il ne vous reste plus maintenant qu'à choisir vos images, les placer dans le dossier ~/images/galerie_conky, puis d'exécuter le script polaroid.sh afin de modifier vos images, et enfin de lancer votre diaporama avec la commande:

$ conky -c ~/images/galerie_conky/conkyrc

Les Scripts

Comme vous avez pu le constater, conky peut afficher le résultat de toute sorte de scripts. Nous vous avons présenté le script python “gmail.py” qui récupère vos messages gmail. Stereotype a publié sur son site une variante en bash pour ceux qui préfèrent:

#!/bin/bash
 
username="xxxxxxxxxx"
password="xxxxxxxxxx"
tmp="/tmp/conkygmail"
 
com=$(wget -O - https://$username:$password@mail.google.com/mail/feed/atom --no-check-certificate)
 
echo $com > $tmp
email=$(sed 's/.*fullcount>\([0-9]\)<.*/\1/' $tmp)
rm $tmp
 
echo $email

merci en core à Stereotype pour son script :)
si vous désirez obtenir d'autres scripts, je vous conseille de visiter la page fr de ConkyPitstop :)

Les Scripts Lua

Conky gère le lua depuis sa version 1.7.2 et c'est avec joie que les divers dev et passionnés de conky se sont lancés à la conquète de nouvelles configurations.
Conky ne pouvait afficher jusque là que du texte ou des barres de progression rudimentaires. Avec l'arrivée du lua , les moyens de distiller une information sont devenus quasi infinis.
Londonali1010 est la première à avoir publié un conky s'appuyant sur un script LUA, il me semblait donc légitime de lui réserver mon premier exemple. Je la remercie encore pour son fabuleux travail. Petit exemple de simplicité et d'élégance par Londonali1010:
ring-meters by londonali1010
Ce résultat est obtenu par le chargement d'un script LUA par conky. Le script original est intégralement commenté par Londonali mais .. en anglais… Pour l'exemple, je vous propose ici une version traduite raccourcie :

--Ring Meters by londonali1010 (2009)
--traduction par arpinux <http://arpinux.org> (2011)
--Ce script dessine les valeurs en pourcentage sous forme de cercles.
--Il est complètement personnalisable; toutes les options sont décrites dans le script.
 
--IMPORTANT: si vous utilisez la fonction 'cpu, elle causera une erreur de segmentation
-- si elle essaye de dessiner un cercle tout de suite. La condition 'if' de la ligne 255
-- utilise un delai pour être certain que cela n'arrive pas. Elle calcule le delai par
-- rapport au nombre de rafraichissement de conky depuis son lancement.
-- Generalement, une valeur de 5 est suffisante, donc, si vous relancez conky toutes
-- les 5 secondes, utilisez update_num>5 comme condition (par défaut).
-- Si vous relancez conky toutes les 2 secondes, vous devriez changer cette valeur
-- pour update_num>3; à l'inverse, si vous relancez conky toutes les 0,5 secondes,
-- vous devriez utilisez update_num>10. AUSSI, si vous modifiez votre conkyrc,
-- il est préférable de faire "killall conky; conky" pour le recharger, autrement,
-- le update_num ne sera pas rechargé et il y aura une erreur.
 
-- Pour appeler ce script dans conky, ajouter ces lignes avant TEXT dans votre conkyrc
-- (si il est placé dans ~/scripts/ring.lua):
--  	lua_load ~/scripts/rings-v1.2-fr.lua
--  	lua_draw_hook_pre ring_stats
 
--Changelog:
-- + v1.2 -- Added option for the ending angle of the rings (07.10.2009)
-- + v1.1 -- Added options for the starting angle of the rings,
--           and added the "max" variable, to allow for variables that output
--           a numerical value rather than a percentage (29.09.2009)
-- + v1.0 -- Original release (28.09.2009)
 
settings_table = {
	{
		-- Editer cette table pour personnaliser vos cercles.
		-- Vous pouvez créer plus de cercles en ajoutant plus d'éléments à cette table.
		-- "name" est le type d'info à afficher; vous pouvez utiliser 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'...
		name='time',
		-- "arg" est l'argument passé à "name"; si vous utiliseriez ${cpu cpu0}, 'cpu0' est l'argument,
        --  si vous n'utiliseriez pas d'arguments, employer ''.
		arg='%I.%M',
		-- "max" est la valeur maximum du cercle. Si conky affiche le résultat en pourcentage, employer 100.
		max=12,
		-- "bg_colour" est la couleur de fond du cercle.
		bg_colour=0xffffff,
		-- "bg_alpha" est la valeur alpha du fond (0=transparent, 1=opaque).
		bg_alpha=0.1,
		-- "fg_colour" est la couleur de premier plan du cercle.
		fg_colour=0xffffff,
		-- "fg_alpha" est la valeur alpha du premier du cercle (0=transparent, 1=opaque).
		fg_alpha=0.2,
		-- "x" and "y" sont les coordonnées du centre du cercle en partant du coin supérieur gauche du conky.
		x=165, y=170,
		-- "radius" est le rayon du cercle.
		radius=50,
		-- "thickness" est l'épaisseur du cercle, répartit autour du rayon.
		thickness=5,
		-- "start_angle" est l'angle de départ du cercle, en degrés, compté depuis le sommet
        --  dans le sens des aiguilles d'une montre. peut être positif ou négatif.
		start_angle=0,
		-- "end_angle" est l'angle de fin du cercle, en degrés, compté depuis le sommet
        -- dans le sens des aiguilles d'une montre. peut être positif ou négatif,
        -- mais doit être supérieur à l'angle de départ.
		end_angle=360
	},
	{
		name='time',
		arg='%M.%S',
		max=60,
		bg_colour=0xffffff,
		bg_alpha=0.1,
		fg_colour=0xffffff,
		fg_alpha=0.4,
		x=165, y=170,
		radius=56,
		thickness=5,
		start_angle=0,
		end_angle=360
	},
(...
.
...)
	{
		name='fs_used_perc',
		arg='/',
		max=100,
		bg_colour=0xffffff,
		bg_alpha=0.2,
		fg_colour=0xffffff,
		fg_alpha=0.3,
		x=165, y=170,
		radius=135,
		thickness=50,
		start_angle=-120,
		end_angle=120
	},
}
 
require 'cairo'
 
function rgb_to_r_g_b(colour,alpha)
	return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
 
function draw_ring(cr,t,pt)
	local w,h=conky_window.width,conky_window.height
 
	local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
	local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
 
	local angle_0=sa*(2*math.pi/360)-math.pi/2
	local angle_f=ea*(2*math.pi/360)-math.pi/2
	local t_arc=t*(angle_f-angle_0)
 
	-- Dessine le fond du cercle
 
	cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
	cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
	cairo_set_line_width(cr,ring_w)
	cairo_stroke(cr)
 
	-- Dessine le premier plan du cercle
 
	cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
	cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
	cairo_stroke(cr)		
end
 
function conky_ring_stats()
	local function setup_rings(cr,pt)
		local str=''
		local value=0
 
		str=string.format('${%s %s}',pt['name'],pt['arg'])
		str=conky_parse(str)
 
		value=tonumber(str)
		pct=value/pt['max']
 
		draw_ring(cr,pct,pt)
	end
 
	if conky_window==nil then return end
	local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
 
	local cr=cairo_create(cs)	
 
	local updates=conky_parse('${updates}')
	update_num=tonumber(updates)
 
	if update_num>5 then
		for i in pairs(settings_table) do
			setup_rings(cr,settings_table[i])
		end
	end
end

Pour tout vous avouer , je ne comprends absolument rien au lua :D et ce n'est pas le sujet de ce wiki, mais ce sript est si bien fait qu'il vous suffit de remplir les champs correctement et de suivre les instructions des archives téléchargées, pour obtenir toutes sortes de résultats:
par londonali10101 par jpope7772 par g0rg0d3
par sunjack944 par arpinux5
1: http://londonali1010.deviantart.com/art/My-Conky-Config-311209-148712243 par londonali1010.
2: http://jpope777.deviantart.com/art/Conky-Rings-3-139828675 par jpope777.
3: http://g0rg0d.deviantart.com/art/Cornet-Conky-171920478 par g0rg0d.
4: http://sunjack94.deviantart.com/art/Electric-Conky-204993834 par sunjack94.
5: http://arpinux.deviantart.com/art/more-conky-rings-139488211 par arpinux.
Londonali1010 a également publié un script ”widgets.lua” qui permet d'inclure des “morceaux” de code, les “widgets”. L'utilisation de ce genre de widget permet des conkys de ce type:
par wlourf par wlourf bis par wlourf aussi

encore wlourf
tous ces widgets ont été écrit par wlourf :)

Conky Weather

Alors là c'est super facile:

  • ouvrez la fenêtre… non, pas sur le bureau, la Vraie
  • ouvrez les yeux et regardez dehors. :)

Pour les prévisions, on a les proverbes populaires ou les fabuleux scripts de kaivalagi ;).

Conclusion et Recommandations

Vous pouvez désormais personnaliser votre bureau à votre guise grâce à conky. Il existe quelques règles élémentaires lorsque vous récupérez un conkyrc/script.lua sur le net:

  • toujours éditer les fichiers concernés et vérifier chaque variable. une erreur de variable ou de fonction peut conduire à une clôture prématurée du programme.
  • afin de tester votre configuration, je vous conseille de lancer votre conky depuis un terminal avec une commande du genre:
conky -c ~/chemin_de_votre_conky

Ce qui vous permettra de visualiser les erreurs possibles et d'y remedier avant d'inclure votre conky dans votre ~/.config.openbox/autostart.sh.

  • les variables “$exec” “$execp” sont gourmandes en ressources, préférez les appels aux scripts externes avec une commande du genre:
..${texeci 120 ~/bin/mon_script_bash}...
..${texeci 120 phython ~/bin/mon_script_python}...

Ce qui permettra à conky de s'afficher sans attendre le résultat du script. L'affichage se mettra à jour dès l'arrivée des informations.

ce wiki ainsi que les fonctions et variables décrites concernent conky_1.7.2 et ultérieur.

Liens

la page du projet sur sourceforge : http://conky.sourceforge.net/
le post dédié sur le forum crunchbanglinux-fr : http://crunchbang-fr.org/forum/viewtopic.php?id=35&p=1
le post dédié sur le forum crunchbanglinux : http://crunchbanglinux.org/forums/topic/59/my-conky-config/
Conky Pitstop (maintenu en français par wlourf) : http://conky.pitstop.free.fr/wiki/index.php5?title=Main_page_(fr)
Le conky-artists-group sur deviantart: http://conky-artists-group.deviantart.com/


contributeur: arpinux

 
Dernière modification par arpinux le 01/04/2014 19:52