C'est en voyant sur cette page du blog de Nicolargo un joli fond d'écran avec un calendrier incorporé que je me suis demandé s'il n'était pas possible d'afficher un tel calendrier avec Conky, indépendamment du fond d'écran.
Après une bonne grosse heure à fouiller la PerlFaq 4 et le Perl Cookbook, j'en suis arrivé à ce qui suit:
#!/usr/bin/perl -w use strict; use Time::Local; use POSIX qw(strftime); my $color = "#909890"; my $s_color = "#e0e0e0"; # couleur pour le dimanche my $d_color = "#ff0000"; # couleur pour le jour courant my $this_month = (localtime)[4]; my $this_day = (localtime)[3]; my $time = timelocal(0,0,0,1,(localtime)[4,5]); # le temps exprimé en secondes, # au début du mois my $month = $this_month; print<<EoT; use_xft yes gap_x 20 alignment top_left TEXT \${font Impact:pixelsize=27} \${voffset 485} \${color $color} EoT while ($month == $this_month) { my $prefix = ''; my $postfix = ''; my $day_of_month = (localtime($time))[3]; my $day_of_week = strftime("%u", localtime($time)); if ($day_of_week == 7) { # si on est dimanche $prefix = "\${color $s_color}"; $postfix = "\${color $color}"; } if ($day_of_month == $this_day) { # si on est le jour courant $prefix = "\${color $d_color}"; $postfix = "\${color $color}"; } print "$prefix$day_of_month$postfix "; $time = $time + 24 * 60 * 60; # ajout de 24h $month = (localtime($time))[4]; } print "\n"
Ce qui produit un fichier `conkyrc` de ce type, les dimanches se détachant en couleur plus lumineuse, le jour courant en rouge:
use_xft yes gap_x 20 alignment top_left TEXT ${font Impact:pixelsize=27} ${voffset 485} ${color #909890} 1 ${color #ff0000}2${color #909890} 3 4 5 ${color #e0e0e0}6${color #909890} 7 8 9 10 11 12 (etc.)
Si certains aiment l'image sans le calendrier, elle est disponible ici.
Il est possible de lancer plusieurs instances de conky simultanément avec des fichiers de configuration différents:
$ conky -c .conky_calendar
Il ne reste plus qu'à ficeler le tout, soit en lançant à la suite, dans un .xinitrc
soit en lançant la génération du fichier .conky_calendar via crontab. En lisant la page de man de crontab (5), on découvre en effet qu'il est possible de lancer une commande au démarrage du système via l'instruction @reboot (très pratique).