Conky, MPD et Gmusicbrowser

Imprimer



Si vous utilisez Conky pour afficher tout un tas de variables système sur votre bureau, vous avez sans doute envie de saisir en un coup d'œil les informations concernant le morceau que vous êtes actuellement en train d'écouter avec votre lecteur préféré. Dans mon cas, j'utilise quotidiennement Gmusicbrowser et parfois MPD et me limiterai donc à la manière de configurer Conky pour afficher les informations en provenance de ces deux lecteurs. Je ne parlerai donc pas ici de ce que l'on peut faire si l'on utilise Rythmbox, Amarok ou tout autre lecteur ; pour cela rendez-vous sur cette page de la documentation de la communauté francophone Ubuntu.

Préalables

Avant d'aller plus loin, il faut bien évidemment avoir installé et configuré Conky.

De plus, pour obtenir un résultat similaire, il vous faudra posséder les polices suivantes :

Pour installer ces polices, il vous suffira de placer les fichiers .ttf contenus dans les archives dans le répertoire ~/.fonts.

Conky et MPD

conkymusicmpdSi vous ne lancez pas MPD avec une configuration exotique (changement du port par défaut…), l'affichage de ce que vous écoutez dans Conky est extrêmement simple (cependant, s'il s'avère que vous ne bénéficiez pas du support pour MPD, il vous faudra alors compiler Conky depuis les sources avec le support pour MPD).

Ainsi, voilà le code à insérer après TEXT dans le ~/.conkyrc pour obtenir un résultat similaire à ce que présente la capture ci-contre :

${color 5da5d3}${font Musicelements:regular:size=20}P ${font :size=14}${voffset -1}Music${font}
 
$if_mpd_playing$alignr${voffset -30}${font}${color grey}(with mpd)$color
${if_empty $mpd_smart}
$else
${font Musicelements:regular:size=22}r${goto 45}${voffset -6}${font :size=12}$mpd_title
${voffset 10}${font Awesome 80's BV :size=18}G${goto 45}${voffset -2}${font :size=10}$mpd_artist
${color}${font FnT_BasicShapes1 :size=18}B${goto 45}${voffset -4}${font :size=10}$mpd_album
${voffset 6}${color 445F70}$mpd_bar
${font}${voffset -18}$color$mpd_elapsed$alignr$mpd_length
$endif

Je précise que Conky propose bien d'autres variable concernant MPD dont voici la liste : mpd_album, mpd_artist, mpd_bar, mpd_bitrate, mpd_elapsed, mpd_file, mpd_length, mpd_name, mpd_percent, mpd_random, mpd_repeat, mpd_smart, mpd_status, mpd_title, mpd_track, mpd_vol. Pour de plus amples détails, consulter cette page.

À vous donc de personnaliser l'affichage en sélectionnant les informations que vous souhaitez voir apparaître dans Conky.

Vous pouvez aussi afficher une notification lorsque le morceau joué change avec mpdnotify.

Conky et Gmusicbrowser

conkymusicL'affichage dans Conky des informations de lecture de Gmusicbrowser est plus complexe à mettre en place dans la mesure où il nous faut passer par deux scripts. Le premier script permet de récupérer les tags du morceau écouté que renvoie Gmusicbrowser par le biais de DBus et est nécessaire au fonctionnement du second script qui se charge de modifier dynamiquement le fichier de configuration de Conky pour que celui-ci affiche la jaquette.

Nous allons commencer par voir comment afficher le titre, le nom de l'artiste et celui de l'album ainsi que la durée et la progression de la lecture avant de nous pencher sur l'affichage de la pochette.

Avant d'aller plus loin, commençons par créer un répertoire dans lequel nous placerons les scripts :

$ mkdir ~/.conky

Titre, Artiste, Album…

Ensuite, on crée le premier script :

$ nano ~/.conky/gmusic_for_conky.pl

Il s'agit d'un script Perl proposé par Quentin Sculo, le développeur de Gmusicbrowser, suite à une discussion que j'avais initiée ici, et qui remplace avantageusement le script proposé par loomsen sur le forum de la communauté Ubuntu anglophone (). Le voici :

#!/bin/perl
use warnings;
use strict;
use Net::DBus;
 
my $bus = Net::DBus->session;
my $service = $bus->get_service('org.gmusicbrowser');
my $object = $service->get_object('/org/gmusicbrowser', 'org.gmusicbrowser');
 
my $info= $object->CurrentSong;
my $s0=$info->{length};
my $s1=$object->GetPosition;
 
$info->{total}= sprintf "%02d:%02d", $s0/60, $s0%60;
$info->{elapsed}= sprintf "%02d:%02d", $s1/60, $s1%60;
$info->{progress}= sprintf "%f", 100*$s1/$s0;
 
unless (@ARGV)
{ print "Usage examples :\n";
 print $0.q( title)."\n";
 print $0.q( '$title')."\n";
 print $0.q( '$title by $artist from $album' '$elapsed / $total')."\n";
 print "Available fields :\n";
 printf "%-15s = %s\n", $_,$info->{$_} for sort keys %$info;
 exit;
}
 
for my $string (@ARGV)
{ if ($string=~m/^\w+$/ && exists $info->{$string}) {$string='$'.$string }
 $string=~s/\$(\w+)/$info->{$1}/g;
 print "$string\n"
}

Il est possible d'utiliser ce script indépendamment de Conky. Ainsi, pour obtenir toutes les informations concernant le morceau en cours de lecture, il vous suffit de lancer la commande :

$ perl ~/.conky/gmusic_for_conky.pl

qui devrait vous renvoyer quelque chose comme cela :

Usage examples :
.conky/gmusic_for_conky.pl title
.conky/gmusic_for_conky.pl '$title'
.conky/gmusic_for_conky.pl '$title by $artist from $album' '$elapsed / $total'
Available fields :
album = 2007 - The Flying Club Cup
album_artist = Beirut
album_picture = /Multimedia/Musique/Beirut/Beirut - 2007 - The Flying Club Cup/The Flying Club Cup/cover.jpg
artist = Beirut
disc = 0
elapsed = 00:01
file = 02 - Beirut - Nantes.flac
length = 230
path = /Multimedia/Musique/Beirut/Beirut - 2007 - The Flying Club Cup/The Flying Club Cup
progress = 0.668090
title = Nantes
total = 03:50
track = 2
uri = file:///Multimedia/Musique/Beirut/Beirut%20-%202007%20-%20The%20Flying%20Club%20Cup/The%20Flying%20Club%20Cup/02%20-%20Beirut%20-%20Nantes.flac

Vous pouvez également utiliser des arguments pour n'afficher que le titre par exemple :

$ perl ~/.conky/gmusic_for_conky.pl '$title'

C'est de cette façon que nous récupérerons le titre, le nom de l'artiste et le nom de l'album pour les faire afficher par Conky. Il nous faut simplement utliser dans notre ~/.conkyrc les variables permettant d'exécuter des programmes, c'est-à-dire exec et execi (permet de spécifier un délai en secondes entre chaque exécution) comme cela :

${color 5da5d3}${font Musicelements:regular:size=20}P ${font :size=14}${voffset -1}Music${font}
 
${if_existing ~/.config/gmusicbrowser/gmusicbrowser.fifo}$alignr${voffset -28}${color grey}(with gmusicbrowser)$color
${voffset 20} ${color}${font Musicelements:regular:size=22}r${goto 41}${voffset -6}${font :size=12} ${execi 10 perl ~/.conky/gmusic_for_conky.pl '$title'}
${color}${voffset 10}${font Awesome 80's BV :size=18}G${goto 45}${voffset -2}${font :size=12}${execi 10 perl ~/.conky/gmusic_for_conky.pl '$artist'}${voffset 4}
${color}${font FnT_BasicShapes1 :size=18}B${goto 45}${voffset -4}${font :size=10}${execi 10 perl ~/.conky/gmusic_for_conky.pl '$album'}$color
${voffset 6}${color 445F70}${execbar perl ~/.conky/gmusic_for_conky.pl '$progress'}
${font}${voffset -18}$color${exec perl ~/.conky/gmusic_for_conky.pl '$elapsed'}$alignr${execi 10 perl ~/.conky/gmusic_for_conky.pl '$total'}
$endif

Affichage de la pochette

Passons maintenant au second script, celui nous permettant d'afficher la jaquette de l'album. Je me suis inspiré d'un script permettant de changer une image de façon dynamique au sein de Conky (trouvé ici) et Quentin a été d'un grand secours.

$ nano ~/.conky/gmusic_cover.sh

Cette fois-ci il s'agit d'un script Bash ; le voici :

##!/bin/bash
# Usage:
# ${execpi 3600 ~/.conky/gmusic_cover.sh}
#
 
coverSize="120x120"
cover=~/.conky/cover.jpg
file=$(perl ~/.conky/gmusic_for_conky.pl '$album_picture')
if [ "$file" = "" ] ;
 then rm -f $cover ;
 else cp -f "$file" $cover;
fi
 
### DO NOT EDIT BELOW THIS LINE
echo "\${image $cover -p 180,827 -s $coverSize -n}"
exit 0

Ce script se charge de récupérer le chemin de l'image (grâce au script précédent) puis de la copier vers un chemin sans espace et plus « accessible » pour conky avant de finalement retourner une variable conky (qui sera insérée dynamiquement au sein du fichier de configuration de Conky).

Vous pouvez bien évidemment modifier la taille de l'image en jouant sur la variable coverSize (ligne 6) ainsi que sur son positionnement en jouant sur les valeurs (coordonnées x et y respectivement) données à l'argument -p de la variable conky image (ligne 15) en gardant à l'esprit que ces coordonnées sont relatives à votre Conky (et non pas à votre écran).

Enfin, il faut appeler ce script dans le fichier de configuration de Conky en utilisant la variable execpi

${execpi 10 ~/.conky/gmusic_cover.sh}

de préférence après avoir vérifié si Gmusicbrowser est bien lancé :

${if_existing ~/.config/gmusicbrowser/gmusicbrowser.fifo

Et voilà !