Bonjour,

Voici une petite astuce permettant de créer un diaporama en fond d'écran de son bureau Linux sans quelconque installation de logiciel. Pourquoi ?

Il existe certes les logiciels cortina, Desktop Drapes, Wallpaper-tray, Wally... mais en fonction des distributions, des versions de kernel il n'est pas toujours évident de les installer. Je vous présente donc une méthode simple que j'ai testée sur une Debian squeeze Gnome 64 bits.
Le principe consiste à créer un fichier XML qui contiendra les images de notre diaporama, les temps d'affichage et de transition entre chacune d'elle.

Pour créer ce fichier, j'ai développé un programme Perl auquel il faut passer en argument le(s) répertoires contenant les images qui seront dans le diaporama, la durée d'affichage de chaque image et le temps de transition en secondes.
Ce programme sera amélioré au fur et à mesure de vos remarques ou attentes.

Voici le programme :

Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/usr/bin/perl
#==========================================================================
# Auteur : djibril
# Date   : 19/08/2012 15:39:12 
# But    : Création du fichier XML pour le diaporama de fond d'écran Gnome
#==========================================================================
use warnings;
use strict;
 
use Cwd;
use English '-no_match_vars';
use File::Spec;
use File::Basename qw/basename dirname/;
use Getopt::Long;
my $USAGE = <<"USAGE";
  perl $PROGRAM_NAME -r '/path1/to/image' -r '/path2/to/image' -t XXX -d YYY 
    -r : permet de spécifier un repertoire d'images pour le diaporama. On peut faire appel plusieurs 
         fois pour mentionner plusieurs repertoire.
    -t : donnez la duree de transition entre chaque image en secondes (ex : XXX = 1 pour 1 seconde). Par defaut 2.
    -d : donnez la duree d'affichage de chaque image en secondes (ex : YYY = 60 pour 60 secondes). Par defaut 60.
USAGE
 
# Récupération des arguments
my ( @repertoires_images, $duree_transition, $duree_affichage ) = ();
GetOptions(
  'r=s' => \@repertoires_images,
  't=i' => \$duree_transition,
  'd=i' => \$duree_affichage,
);
my @extensions = qw/ jpeg jpg jpe bmp svg gif png /;
 
# Vérification des arguments
# Répertoires images
if ( scalar @repertoires_images == 0 ) {
	print "Merci de mentionner au moins un répertoire d'images\n\n$USAGE";
	exit;
}
 
foreach my $repertoire ( @repertoires_images ) {
	if ( ! -e $repertoire ) {
		print "$repertoire n'existe pas\n";
		exit;
	}
}
 
# Vérification temps d'affichage et de transition.
if ( not defined $duree_affichage) {
	$duree_affichage = 60;
}
 
if ( not defined $duree_transition ) {
	$duree_transition = 2;
}
$duree_affichage  = sprintf '%.1f', $duree_affichage;
$duree_transition = sprintf '%.1f', $duree_transition;
my $diaporama_xml = 'diaporama-gnome.xml';
 
# Liste des images à mettre dans le diaporama après un parcours récursif des répertoire d'images
my $regex_extension = join '|', @extensions;
my @fichiers_images;
foreach ( @repertoires_images ) {
	push @fichiers_images, grep { /$regex_extension$/i } lister_fichiers($_, 1);
}
 
# Création du fichier XML du diaporama
open my $fh, '>:encoding(UTF-8)', $diaporama_xml or die "Impossible de créer le fichier $diaporama_xml\n";
 
print {$fh} <<'ENTETE';
<?xml version="1.0" encoding="UTF-8"?>
<background>
  <starttime>
    <year>2012</year>
    <month>08</month>
    <day>19</day>
    <hour>00</hour>
    <minute>00</minute>
    <second>00</second>
  </starttime>
	<!-- Debut du diaporama -->
ENTETE
 
my $last = scalar @fichiers_images - 1;
for my $index ( 0..$last) {
	my $suivant = ( $index == $last ) ? 0 : $index +1;
 
	# Static et transition
	print {$fh} <<"DIAPO";
  <static>
    <duration>$duree_affichage</duration> <!-- temps pendant lequel cette image est affichee -->
    <file>$fichiers_images[$index]</file> <!-- chemin absolu vers l'image en cours-->
  </static>
  <transition>
    <duration>$duree_transition</duration> <!-- duree de l'effet de transition -->
    <from>$fichiers_images[$index]</from> <!-- chemin absolu vers l'image en cours -->
    <to>$fichiers_images[$suivant]</to> <!-- chemin absolu vers l'image suivante -->
  </transition>
DIAPO
}
 
print {$fh} '</background>';
close $fh; 
 
print "Fichier $diaporama_xml OK\n";
 
 
#======================================================
# Nombre d'arguments : 1 ou 2
# Argument(s)        : un répertoire et valeur 0 ou 1
# Retourne           : Tableau de fichier (@fichiers)
#======================================================
sub lister_fichiers {
  my ( $repertoire, $recursivite ) = @_;
 
  my $cwd = getcwd();
 
  # Recherche dans les sous répertoire ou non
  if ( ( not defined $recursivite ) || ( $recursivite != 1 ) ) { $recursivite = 0; }
 
  # Verification répertoire
  if ( not defined $repertoire ) { die "Aucun repertoire de specifie\n"; }
 
  # Ouverture d'un répertoire
  opendir my $fh_rep, $repertoire or die "impossible d'ouvrir le répertoire $repertoire\n";
 
  # Liste fichiers et répertoire sauf (. et ..)
  my @fic_rep = grep { !/^\.\.?$/ } readdir $fh_rep;
 
  # Fermeture du répertoire
  closedir $fh_rep or die "Impossible de fermer le répertoire $repertoire\n";
 
  chdir $repertoire;
  $repertoire= getcwd();
 
  # On récupère tous les fichiers
  my @fichiers;
  foreach my $nom (@fic_rep) {
    my $notre_ficrephier = File::Spec->catfile( $repertoire, $nom );
 
    if ( -f $notre_ficrephier ) {
      push( @fichiers, $notre_ficrephier );
    }
    elsif ( -d $notre_ficrephier and $recursivite == 1 ) {
      push( @fichiers, lister_fichiers($notre_ficrephier, $recursivite) );    # recursivité
    }
  }
 
  chdir $cwd;
 
  return @fichiers;
}

Renommez ce programme creation-xml-diaporama.pl par exemple. Puis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
perl creation-xml-diaporama.pl  -r '/path1/to/image' -r '/path2/to/image' -t XXX -d YYY 
    -r : permet de spécifier un répertoire d'images pour le diaporama. On peut faire appel plusieurs 
         fois pour mentionner plusieurs répertoire.
    -t : donnez la durée de transition entre chaque image en secondes (ex : XXX = 1 pour 1 seconde). Par défaut 2.
    -d : donnez la durée d'affichage de chaque image en secondes (ex : YYY = 60 pour 60 secondes). Par défaut 60.
Le programme créera un fichier diaporama-gnome.xml.
Ensuite, faites un clic-droit sur votre fond d'écran -> changer l'arrière-plan du bureau. Ensuite cliquez sur le bouton "ajouter". Puis sélectionnez le fichier XML (pour pouvoir choisir le xml, mettez tous les fichiers).

Voilà, c'est tout !

N.B. Les extensions des images lues seront les suivantes : jpeg, jpg, jpe, bmp, svg, gif et png.

Qu'en pensez-vous ?