Deblan blog

Afficher les joies du code dans conky

Vous êtes fan des joies du code et vous aimeriez afficher le dernier article sur votre bureau ? Voici une solution écrite en PHP.

Note : je bosse sous Debian, il faudra adapter le gestionnaire de paquet si vous utilisez une autre distribution.

Etape 1 : préparation du répertoire de travail
mkdir -p ~/.conky/les_joies_du_code
Etape 2 : installation des logiciels nécessaires
  • Conky : sans lui, on ne ferait pas grand chose !
  • Php : pour pouvoir exécuter le script qui va arriver
  • Gifsicle : pour récupérer les frames d'un GIF
$ su - 
# aptitude update && aptitude install conky php5 gifsicle
Etape 3 : préparation du cron
$ cd ~/.conky/les_joies_du_code
$ vim cron
#!/bin/sh

cd "$(dirname $0)"

CONF="$(./update 2>/dev/null)"

if [ -n "$CONF" ]; then
	echo "$CONF" > config
fi
Etape 4 : installation du script de mise à jour

Note : il a été fait un peu à l'arrache mais il a le mérite de fonctionner :) Désolé pour les puristes qui liront ces quelques lignes.

$ cd ~/.conkytheme/les_joies_du_code
$ vim update
#!/usr/bin/php
<?php

// Config

$screen_width = 1920;
$position_y   = 50;
$rss_url = 'http://lesjoiesducode.tumblr.com/rss';

// Config end

chdir(dirname($argv[0]));
$pwd = getcwd().'/';

// Création des répertoires de travail
if (!is_dir('tmp')) {
    mkdir('tmp');
}

if(!is_dir('tmp/images')) {
    mkdir('tmp/images');
}

// Récupération du flux RSS
$rss_file = @file_get_contents($rss_url);

if (!$rss_file) {
    die(1);
}

// Parsing du flux et surtout du dernier article posté
$schema    = simplexml_load_string($rss_file);
$channel   = $schema->channel;
$last_item = $channel->item[0];

preg_match('`src="([^"]+)"`', $last_item->description, $img);

if (!$img) {
	die(1);
}

// Récupération du titre
$title = ucfirst($last_item->title);

// Récupération du GIF
file_put_contents('tmp/gif', file_get_contents($img[1]));

list($width, $height) = getimagesize('tmp/gif');

$position_x = $screen_width - $width - 20;

// Récupération des frames du gif
shell_exec('rm -rf tmp/images/*; gifsicle --unoptimize --explode tmp/gif --output tmp/images/frame');

$frames = glob('tmp/images/*');

if (!$frames) {
	die(1);
}

// Génération du fichier de configuration pour conky
echo <<< EOF
total_run_times 0
out_to_console no
double_buffer yes
no_buffers no
text_buffer_size 4096
update_interval .24

alignment top_left
minimum_size $width 5
maximum_width $width 50
gap_x $position_x
gap_y $position_y

draw_shades yes
draw_outline no
draw_borders no
border_width 1
border_margin 1

background no

own_window yes
own_window_hints undecorated,below,skip_taskbar,skip_pager,sticky
own_window_type override
own_window_transparent yes

use_xft yes
xftalpha .1
override_utf8_locale yes
xftfont Fixed:size=7
uppercase no

uppercase no
use_spacer right

default_color FFFFFF
default_shade_color 333333
default_outline_color black

color1 FFFFFF
color2 999999

imlib_cache_size 0
template1 $pwd/tmp/images/frame.
template2 -p 0,60 -s ${width}x${height}

TEXT

\${color1}\${font Astron Boy Video:style=Bold:pixelsize=15}Les joies du code\${font}

\${color2}$title

EOF;

foreach ($frames as $k => $frame) {
	list($temp, $num) = explode('.', $frame);
	echo '${if_updatenr '.($k+1).'}${image ${template1}'.$num.' ${template2}}${endif}'."\n";
}

Vous remarquerez 3 variables de configuration au début du fichier :

  • $screen_width : la résolution de la largeur de votre écran pour que le script calcule et place correctement le conky à droite de l'écran
  • $position_y : la position verticale du conky
  • $rss_url : l'url du flux RSS. Vous pouvez ainsi configurer le script pour les joies du sysadmin
Etape 5 : création de la tâche cron
$ cd ~/.conky/les_joies_du_code
$ chmod u+x cron update
$ crontab -e
*/20 *   * * * $HOME/.conky/les_joies_du_code/cron
Etape 6 : on test si ça fonctionne
$ ~/.conky/les_joies_du_code/cron
$ conky -q -c ~/.conky/les_joies_du_code/config

Conky - Les joies du code


Ajouter un commentaire

Vous pouvez utiliser du markdown.Afficher l'aide.