My Own Memory Hole
Blog♯console

Remplacer vim par nano dans Git Bash sous Windows

Vous êtes linuxien, incapable de comprendre vim (hormis le :quit...) et utilisez Git Bash sous Windows qui propose cet éditeur par défaut ? Faites comme moi, passez à nano !

Installation de nano

Commencez par vous rendre sur la page de téléchargement de nano et télécharger l'archive au format zip.

Décompressez l'ensemble des fichiers de l'archive vers le répertoire C:\Program Files (x86)\Git\share\nano\ (en fonction du chemin d'installation de Git).

Nano dans Git Bash

Créez un fichier avec l'éditeur de votre choix (Sublime Text, Notepad++) avec ceci dedans :

#!/bin/sh
exec /share/nano/nano.exe "$@"

Enregistrez-le sous le nom nano (sans extension) dans un répertoire qui se trouve dans le Path ou ajouter le répertoire dans le Path.

Connaître et modifier le Path sous Windows

Dans l'explorateur de fichier, faites un clic droit sur Ordinateur, sélectionnez Propriétés. Accédez aux Paramètres système avancés et allez dans Variables d'environnement. Dans la seconde partie de la fenêtre se trouvent les "Variables système". Double cliquez sur Path et vous aurez la liste des dossiers pris en compte par cette variable. Vous pouvez donc facilement ajouter le dossier où vous avez enregistré le fichier nano créé précédemment.

Prise en compte par Git Bash

Une fois cela fait, relancer Git Bash s'il était ouvert et vous devriez pouvoir lancer la commande nano directement :

nano

Si ce n'est pas le cas et que vous avez modifié le Path, ouvrez une invite de commande (Ctrl+R puis tapez cmd) et vérifiez la valeur de PATH :

PATH

Si votre répertoire n'apparaît pas dans la liste, lancez la commande :

SET PATH=%PATH%;C:\VOTRE\REPERTOIRE

Relancez Git Bash et testez à nouveau de lancer nano.

Utiliser nano pour les commits

Vous devez configurer Git pour qu'il appelle nano plutôt que vim pour les commits :

git config --global core.editor "nano"

Lors de votre prochain commit vous devriez donc bénéficier de nano.

lftp : automatiser les transferts avec des scripts

Après avoir présenté le mode interactif de lftp, client FTP en ligne de commande, et exploré son utilisation en ligne de commande, nous allons maintenant voir qu'il est possible d'automatiser les transferts, que ce soit par le biais d'alias bash ou grâce à des scripts propres à lftp. En effet, lftp permet d'appeler des scripts extrêmement simples à écrire dans la mesure où chaque ligne correspond à une instruction.

Création d'alias

Une fois que vous avez mis au point la ligne de commande permettant de réaliser les opérations récurrentes (si vous rencontrez des problèmes, reportez-vous à notre article précédent), vous pouvez créer un alias bash afin de ne pas avoir à la saisir ou à la rechercher dans votre historique à chaque fois que vous en avez besoin.

Pour créer un alias, il vous faut éditer le fichier .bashrc :

$ nano ~/.bashrc

Un alias se présente sous cette forme :

alias nom_souhaité='commande'

Prenons la commande lftp permettant de faire, dans notre cas, une sauvegarde de son site, en ne prenant en compte que les nouveaux fichiers tout en ignorant le répertoire tmp/, vers notre bureau :

$ lftp racine -e "mirror -n -x tmp /www/ /home/bbrice/Bureau/Sauvegarde; quit;"

Et voici l'alias que l'on peut créer :

alias sitesauv='lftp racine -e "mirror -n -x tmp /www/ /home/bbrice/Bureau/Sauvegarde; quit;"'

Une fois votre alias ajouté à la fin de votre .bashrc, enregistrez (Ctrl+o) puis quittez (Ctrl+x) avant de quitter et de relancer votre console. Vous pouvez maintenant utiliser votre alias pour lancer l'opération de transfert.

Utiliser les scripts lftp

Cette fonctionnalité de lftp est ce qui en fait mon client FTP favori, notamment lorsqu'il s'agit de mettre à jour ma collection de bandes dessinées réalisée avec GCstar vers mon serveur pour qu'elle soit accessible en ligne grâce à GCweb, un frontend web à GCstar.

Imaginons le cas où vous êtes amenés à régulièrement uploader les images de votre répertoire local Images vers le répertoire images de votre serveur distant.

Vous pouvez créer un fichier, appelé upload_images par exemple, dans lequel vous ne trouveriez que cette ligne :

mirror -R ~/Images images

Pour exécuter l'opération à partir de votre script, il vous faudra soit :

  • une fois connecté à votre serveur FTP, lancer la commande :
    source upload_images
  • ou bien en utilisant l'option _-e _permettant de lancer la commande directement :
lftp LOGIN:PASSWORD@SERVER -e "source upload_images; quit;"

en choisissant bien évidemment le mode d'identification qui vous convient le mieux (directement, avec prompt, à travers un signet).

Il est également possible de réaliser l'authentification au sein du script 

open LOGIN:PASSWORD@SERVER
mirror -R ~/Images images

Si vous avez un signet pointant vers la racine de votre site, vous pouvez modifier le script de la sorte :

open NOM_SIGNET
mirror -R ~/Images images

Désormais, pour lancer le transfert, il vous suffit de lancer la commande :

$ lftp -f upload_images

Même si cette commande est assez simple, vous pouvez en créer un alias comme vu précédemment.

Pour en savoir plus sur l'utilisation des scripts, vous pouvez vous rendre à la section «  Scripts » du tutoriel (en anglais) rédigé par Peter Matulis.

Enfin, vous pouvez utiliser cron afin de lancer périodiquement et automatiquement une commande, que celle-ci soit un simple alias ou qu'elle fasse appel à un script, les deux méthodes pouvant d'ailleurs être complémentaires.

Utiliser lftp sans le mode interactif

Dans un précédent article, nous avons présenté le client FTP en ligne de commande lftp et son utilisation en nous limitant au mode interactif, qui permet de naviguer au sein de l'arborescence distante et des dossiers locaux, de transférer des fichiers... le tout de manière « visuelle ». lftp permet cependant de se passer de ce mode interactif grâce à l'option -e qui prend pour argument une ou plusieurs commandes, ce qui permet de lancer en une seule commande de multiples tâches.

Uploader des fichiers

Comme nous l'avons vu précédemment, il va donc falloir nous connecter à notre serveur FTP en utilisant la commande :

$ lftp LOGIN:PASSWORD@SERVER

mais en ajoutant à cette commande l'option -e avec pour argument entre guillemets la commande ou les commandes à exécuter. Par exemple, pour envoyer un fichier de votre ordinateur vers la racine de votre serveur, vous utiliserez la commande :

$ lftp LOGIN:PASSWORD@SERVER -e "put MON_FICHIER_LOCAL;"

Il est à noter que vous pouvez, pour des raisons de sécurité, ne pas préciser votre mot de passe en clair dans la commande, celui-ci vous étant alors demandé par un prompt :

$ lftp LOGIN@SERVER -e "put MON_FICHIER_LOCAL;"

Vous pouvez également, si vous êtes pressé et avez créé des signets, vous connecter ainsi :

$ lftp SIGNET -e "put MON_FICHIER_LOCAL;"

Si vous souhaitez quitter lftp suite à votre transfert, il s'agit de rajouter la commande quit dans l'argument :

$ lftp LOGIN:PASSWORD@SERVER -e "put MON_FICHIER_LOCAL; quit;"

Si vous désirez, uploader votre fichier vers un répertoire distant autre que la racine, deux options s'offrent à vous :

  • soit vous utilisez la commande _cd _afin de vous déplacer dans le répertoire souhaité :
    $ lftp LOGIN:PASSWORD@SERVER -e "cd REP_DISTANT; put MON_FICHIER_LOCAL; quit;"
  • soit vous utilisez l'option -O de la commande _put _qui vous permet de spécifier le répertoire distant où uploader le fichier :
    $ lftp LOGIN:PASSWORD@SERVER -e "put -O REP_DISTANT/ MON_FICHIER_LOCAL; quit;"

Si vous désirez que le fichier uploadé porte un nom différent que le nom du fichier local, il vous faut utiliser l'option -o de la commande put :

$ lftp LOGIN:PASSWORD@SERVER -e "put -O REP_DISTANT/ MON_FICHIER_LOCAL -o NOUVEAU_NOM; quit;"

Vous pouvez bien sûr en une seule commande uploader plusieurs fichiers :

$ lftp LOGIN:PASSWORD@SERVER -e "put -O REP_DISTANT/ MON_FICHIER_LOCAL -o NOUVEAU_NOM MON_FICHIER_LOCAL_2 -o NOUVEAU_NOM_2; quit;"

Télécharger des fichiers

Pour récupérer des fichiers de votre serveur, l'utilisation est similaire si ce n'est qu'il faut utiliser la commande get à la place de put. Ainsi pour télécharger un fichier vers le répertoire local courant, il vous faut utiliser la commande suivante :

$ lftp LOGIN@SERVER -e "get MON_FICHIER_DISTANT; quit;"

Pour télécharger un fichier vers un répertoire local autre que le répertoire courant, il vous faut utiliser l'option -O de la commande get (notez qu'il faut que le répertoire existe) :

$ lftp LOGIN@SERVER -e "get -O REPERTOIRE_LOCAL MON_FICHIER_DISTANT; quit;"

Vous pouvez également renommer localement le fichier téléchargé grâce à l'option -o :

$ lftp LOGIN@SERVER -e "get MON_FICHIER_DISTANT -o NOM_FICHIER_LOCAL; quit;"

Vous pouvez bien évidemment là encore téléchargé plusieurs fichiers en une seule commande :

$ lftp LOGIN@SERVER -e "get MON_FICHIER_DISTANT -o NOM_FICHIER_LOCAL MON_FICHIER_DISTANT_2 -o NOM_FICHIER_LOCAL_2; quit;"

Dossiers, sauvegarde et mise à jour

Nous allons maintenant nous intéresser à la commande mirror de lftp qui permet de copier des dossiers de votre ordinateur vers votre serveur et inversement et donc de faire des sauvegardes aisément de votre site ou de mettre ce dernier à jour en ne prenant en compte que les nouveaux éléments.

Ainsi pour copier de votre serveur vers votre ordinateur un dossier vous utiliserez la commande suivante :

$ lftp LOGIN:PASSWORD@SERVER -e "mirror REPERTOIRE_DISTANT; quit;"

Vous noterez que le répertoire local est créé automatiquement. Vous pouvez spécifier un répertoire local (qui sera également créé automatiquement) où l'ensemble des dossiers et fichiers du dossier distant sera copié :

$ lftp LOGIN:PASSWORD@SERVER -e "mirror REPERTOIRE_DISTANT REPERTOIRE_LOCAL; quit;"

Pour copier un dossier de votre ordinateur vers la racine de votre serveur, il vous faudra alors utiliser l'option -R de la commande mirror comme ceci :

$ lftp LOGIN:PASSWORD@SERVER -e "mirror -R REPERTOIRE_LOCAL; quit;"

Si le répertoire n'existe pas sur votre serveur, il sera créé automatiquement. Vous pouvez spécifier un répertoire de destination sur votre serveur qui sera là aussi créé automatiquement s'il n'existe pas :

$ lftp LOGIN:PASSWORD@SERVER -e "mirror -R REPERTOIRE_LOCAL REPERTOIRE_DISTANT; quit;"

Notez bien que si vous ajoutez un slash (/) à la fin du nom du répertoire distant, le répertoire local sera créé à l'intérieur du répertoire cible sur le serveur. Comparez :

$ lftp racine -e "mirror -R test testdistant;"

qui donne sur le serveur :

cd testdistant/ && cls
test.html  test2.html

et

$ lftp racine -e "mirror -R test testdistant/;"

qui donne sur le serveur :

cd testdistant/ && cls
test/
cd test/ && cls
test.html  test2.html

Sauvegarde de site

Si vous souhaitez réaliser une sauvegarde intégrale de votre site depuis la racine, vous pouvez utiliser cette commande :

$ lftp LOGIN:PASSWORD@SERVER -e "mirror; quit;"

Vous pouvez spécifier les répertoires à ignorer lors de la copie en utilisant l'option -x :

$ lftp LOGIN:PASSWORD@SERVER -e "mirror -x DOSSIER_IGNORE -x DOSSIER_IGNORE_2 ; quit;"

Vous pouvez par la suite limiter la sauvegarde aux seuls fichiers nouveaux (attention : si vous avez ignoré des dossiers, il vous faudra les ignorer à nouveau) grâce à l'option -n (ou --only-newer) :

$ lftp LOGIN:PASSWORD@SERVER -e "mirror -n; quit;"

Mettre à jour son site

La commande mirror associée à son option -n est particulièrement utile lorsque l'on souhaite uploader de manière régulière le contenu d'un dossier local vers notre serveur afin de mettre à jour notre site. Ainsi la première fois, il me suffit de saisir la commande :

$ lftp racine -e "mirror -R test testdistant;"

Ensuite, pour n'ajoute que les contenus nouveaux, il me suffit de faire :

$ lftp racine -e "mirror -Rn test testdistant;"

Exemple

Un répertoire test/ ne contenant que deux fichiers :

$ ls test
test2.html  test.html

Je copie ce répertoire vers mon serveur :

$ lftp racine -e "mirror -R test testdistant; quit;"
cd ok, cwd=/www                                                            
Total : 1 répertoire, 2 fichiers, 0 liens symboliques   
Nouveau : 2 fichiers, 0 liens symboliques

Je crée dans mon répertoire local un nouveau fichier :

$ touch test/test_new.html

Je relance une copie du répertoire local vers le répertoire distant en utilisant l'option -n :

$ lftp racine -e "mirror -Rn test testdistant; quit;"
cd ok, cwd=/www                                              
Total : 1 répertoire, 3 fichiers, 0 liens symboliques
Nouveau : 1 fichier, 0 liens symboliques

Nous verrons dans un prochain article que l'on peut automatiser les transferts soit en passant par des alias soit par le biais de scripts propres à lftp.

Introduction à lftp, un client FTP en ligne de commande

lftp est un « programme en ligne de commande de transfert de fichiers pour Unix et systèmes d'exploitation apparentés […] écrit par Alexander Lukyanov et […] distribué sous Licence publique générale GNU. » [1] Parmi ses très nombreuses fonctionnalités, lftp permet de « répliquer récursivement une arborescence entière de répertoires, l'enregistrement de signets d'adresses et la capacité à reprendre un téléchargement arrêté ». De plus, lftp « peut entièrement s'insérer dans un script au lieu d'être utilisé de manière interactive par l'utilisateur. »

Je viens de découvrir ce programme et m'en sers uniquement (pour le moment du moins) comme client FTP et de manière restreinte au vu de ses très nombreuses fonctionnalités ; cet article se contentera donc de vous aider dans vos premiers pas.

Avant de commencer, il faut l'intaller :

$ sudo apt install lftp

Vous pouvez maintenant lancer lftp :

$ lftp

Mais que faire maintenant…

Première connexion

Une fois que vous avez ouvert lftp, vous vous trouvez face à ce prompt :

lftp :~>

Pour vous connecter à votre serveur, il vous faut utiliser la commande suivante [dans le reste de cet article, avant chaque commande, j'ajouterai la « flèche » (>) du prompt] :

> open -u LOGIN SERVER

Une fois le mot de passe saisi, vous devriez obtenir un prompt correspondant à ceci :

lftp LOGIN@SERVER:~>

Vous êtes maintenant connecté à votre serveur.

Il est à noter que vous pouvez lancer lftp tout en vous connectant à votre serveur, en une seule commande, d'au moins deux façons :

  • la commande suivante vous demandera votre mot de passe que vous aurez alors à taper sans qu'il n'apparaisse à l'écran :
    $ lftp -u LOGIN SERVER
  • cette commande par contre, vous permet de tout faire d'un seul coup :
    $ lftp LOGIN:PASSWORD@SERVER

Il est encore possible de faire plus simple. Une fois connecté à votre serveur, vous pouvez créer un signet [voir ci-dessous] qui pointe vers votre racine (le répertoire de base) :

> bookmark add NOM

Bien évidemment vous remplacez NOM par le nom que vous souhaitez. Ainsi, pour lancer lftp et vous connecter vous n'aurez plus qu'à saisir la commande suivante :

$ lftp NOM

Pour vous déconnecter, utilisez une des trois commandes suivantes :

> quit
> exit
> bye

Navigation

Bases

La navigation au sein de votre serveur avec lftp fonctionne exactement comme celle au sein de vos dossiers sur votre poste de travail avec le terminal et en reprend en partie les commandes. Notez que vous bénéficiez de l'autocomplétion tant au niveau des commandes que des noms de fichiers avec la touche tab.

Avant d'aller plus loin, appuyer deux fois sur la touche tab permet de voir l'ensemble des commandes disponibles ; parmi elles, la commande help qui lancée permet de voir l'ensemble des fonctions avec leur utilisation :

> help
    !<commande-shell>                    (commandes)                          alias [<nom> [<valeur>]]             attach [PID]
    bookmark [SOUS-COMMANDE]             cache [SOUS-COMMANDE]                cat [-b] <fichiers>                  cd <rép-dis>
    chmod [OPTS] mode fichier...         close [-a]                           [re]cls [opts] [chemin/][motif]      debug [OPTS] [<level>|off]
    du [options] <répertoires>           edit [OPTS] <file>                   exit [<code>|bg]                     get [OPTS] <fichier-distant> -o <fichier-local>]
    glob [OPTS] <cmd> <args>             help [<cmd>]                         historique : -w fichier|-r fichier|-c|-l [num]
    jobs [-v] [<job_no...>]              kill all|<num>                       lcd <répertoire-local>               lftp [OPTS] <site>
    ln [-s] <file1> <file2>              ls [<args>]                          mget [OPTS] <fichiers>               mirror [OPTS] [distant [local]]
    mkdir [OPTS] <dirs>                  module nom [args]                    more <fichiers>                      mput [OPTS] <fichiers>               mrm <fichiers>
    mv <fichier1> <fichier2>             mmv [OPTS] <files> <target-dir>      [re]nlist [<args>]                   open [OPTS] <site>
    pget [OPTS] <fichier-distant> [-o <fichier-local>]                        put [OPTS] <fichier-local> [-o <fichier-distant>]                         pwd [-p]
    queue [OPTS] [<cmd>]                 quote <cmd>                          repeat [OPTS] [délai] [commande]     rm [-r] [-f] <fichiers>
    rmdir [-f] <répertoires>             scache [<num_session>]               set [OPT] [<var> [<val>]]            site <site-cmd>
    source <fichier>                     torrent [OPTS] <file|URL>...         user <user|URL> [<pass>]             wait [<num_travail>]                 zcat <fichiers>
    zmore <fichiers>

La commande help peut prendre pour argument le nom d'une autre commande ce qui permet d'obtenir un descriptif sur cette dernière :

> help cls

De plus, les commandes semblables à celles que vous utilisez localement, sont « inversables » en les faisant précédé du caractère !. Ainsi, si pour lister les éléments présents sur votre serveur, vous utilisez cette commande :

> ls

pour lister les fichiers sur votre ordinateur vous utiliserez :

> !ls

Bien sûr, il est possible d'utiliser des options et des arguments ; ainsi :

> !ls -al REP/

Vous noterez que par défaut les options a et l sont inutiles côté serveur, la commande ls les appelant automatiquement. Si vous souhaitez lister les fichiers de votre serveur et obtenir un simple listing, utilisez la commande cls qui elle aussi peut prendre un chemin comme argument :

> cls REP/

Pour afficher récursivement le contenu du répertoire courant ou spécifié en argument, vous pouvez également utiliser la commande find.

Pour naviguer dans les répertoires distants ou locaux :

> cd REP/
> !cd REP

Par contre avec cette dernière commande (!cd REP/) le changement de dossier local n'est que temporaire ; pour que le changement de dossier local soit « retenu », il faut utiliser la commande lcd :

> lcd REP/

Si vous ne risquez pas de vous perdre dans les répertoires de votre serveur du fait du prompt, cela peut arriver sur votre poste ; pour connaître le répertoire local où vous vous trouvez :

> !pwd
/home/bbrice

Il est possible de combiner plusieurs commandes :

> cd REP/ && ls

Par contre, pour faire de même localement, il ne faut pas « échapper » (ajout du caractère !) la seconde commande :

> !cd REP/ && ls

Signets

Comme nous l'avons déjà évoqué, lftp propose un système de signets (bookmarks). Pour créer un signet sur le répertoire courant, il faut utilise la commande :

> bookmark add NOM

Pour ensuite vous rendre à ce signet :

> open NOM

Pour lister l'ensemble des signets disponibles, vous pouvez utiliser la sous-commande list mais vous pouvez vous en passer :

> bookmark

Pour effacer un signet :

> bookmark delete NOM

Vous pouvez également éditer directement la liste des signets, lftp ouvrant alors soit vi soit emacs (selon votre configuration) :

> bookmark edit

Envoi et récupération de données

Pour copier un fichier situé sur votre serveur vers le dossier local courant, il suffit de lancer la commande :

> get FILE

Par défaut, lftp attribue au fichier local le même nom que le fichier distant que l'on a copié ; pour remédier à cela, il faut alors utiliser l'option -o nom_local. De plus, il est possible de télécharger plusieurs fichiers à la fois (tout en leur attribuant un nom local différent de leur nom distant) et de spécifier le répertoire local où télécharger les fichier (option -O base) :

> get -O REP_LOCAL/ FICHIER_DISTANT1 -o NOM_LOCAL1 FICHIER_DISTANT2 -o NOM_LOCAL2

Pour envoyer un fichier local vers le répertoire courant de votre serveur, il faut utiliser la commande put :

> put FILE

Comme pour la commande get, il est possible d'uploader plusieurs fichiers tout en les renommant vers un répertoire spécifique en une seule commande :

> put -O REP_DISTANT/ FICHIER_LOCAL1 -o NOM_DISTANT1 FICHIER_LOCAL2 -o NOM_DISTANT2

Si vous avez besoin de créer un dossier [ou plusieurs], il vous faudra utiliser la commande mkdir (elle aussi « inversable » avec !) :

> mkdir REP [REP2 REP3]

Pour effacer un fichier [ou plusieurs], il faudra alors utiliser la commande rm (« inversable » aussi bien évidemment) ; pour effacer un dossier il faudra alors utiliser l'option -r (mais faîtes attention…) :

> rm FILE [FILE2 FILE3]

Il est également possible de dupliquer un répertoire distant vers le répertoire local et inversement grâce à la commande mirror. Pour dupliquer un répertoire distant dans le répertoire local courant :

> mirror REP_DISTANT

Notez que le répertoire local est créé automatiquement. Vous pouvez cependant spécifier un répertoire local (sans l'avoir créé précédemment) dans lequel le répertoire distant sera copié :

> mirror REP_DISTANT REP_LOCAL

L'option -R permet de dupliquer un répertoire local vers un répertoire distant :

> mirror -R REP_LOCAL/ REP_DISTANT

Attention : si vous ajoutez un slash à la fin de REP_DISTANT le répertoire local sera créé dans ce répertoire distant ; un exemple valant parfois mieux qu'un long discours, constatez la différence entre :

> mirror -R TEST/memoire/ TEMPtest
[...]
> cd
> cd TEMPtest/ && cls
css/ images/ index.php javascript/ maps/ menu.php pages/ stats.php

et :

> mirror -R TEST/memoire/ TEMPtest/
[...]
> cd TEMPtest/ && cls
memoire/
> cd TEMPtest/memoire && cls
css/ images/ index.php javascript/ maps/ menu.php pages/ stats.php

Parmi les nombreuses options de la commande mirror, nous retenons celle permettant de limiter le transfert aux seuls nouveaux fichiers, l'option -n (ou --only-newer) :

> mirror -R TEST/memoire/ TEMPtest
Total&nbsp;: 21 répertoires, 122 fichiers, 0 liens symboliques 
Nouveau&nbsp;: 122 fichiers, 0 liens symboliques
[...]
[//On créé un fichier]
> !touch TEST/memoire/TEST.php
[//On relance la duplication avec l'option -n]
> mirror -Rn TEST/memoire/ TEMPtest
Total&nbsp;: 21 répertoires, 123 fichiers, 0 liens symboliques 
Nouveau&nbsp;: 1 fichier, 0 liens symboliques

Cet article s'achève ici, dans la mesure où je suis presque à bout de ce que je connais de lftp et où cet article est déjà bien assez long… La suite au prochain épisode.

mpdscribble : MPD et LastFM

Utilisateur de LastFM et de MPD pour écouter ma musique, je dois pouvoir scrobbler les titres que j'écoute : mpdscribble est la solution, particulièrement simple à installer et configurer.

Il faut donc commencer par installer le paquet mpdscribble :

$ sudo apt install mpdscribble

Une fois cela fait, il faut le configurer :

$ sudo dpkg-reconfigure mpdscribble

Il faut alors accepter de lancer mpdscribble comme daemon, puis saisir ses identifiants LastFM. Une fois cela fait, le service devrait démarrer et les titres écoutés apparaîtront sur LastFM.

MPD (Music Player Daemon)

MPD (Music Player Daemon) est un lecteur audio fonctionnant selon l'architecture client-serveur. Nous n'allons aborder ici que l'aspect serveur, pris en charge par MPD, et verrons ultérieurement le côté client (en l'occurrence ncmpcpp). Si MPD peut apparaître au premier abord assez complexe, il n'en demeure pas moins un outil extrêmement intéressant ne serait-ce que pour sa légèreté et la flexibilité qu'un tel système propose. Sans chercher à pénétrer trop avant dans les arcanes de sa configuration, il est possible d'obtenir un outil fonctionnel très rapidement et finalement assez facilement. La preuve…

Pour commencer, il faut installer le paquet mpd :

$ sudo apt install mpd

puis lancer la commande suivante afin de créer le daemon&nbsp:

$ sudo dpkg-reconfigure mpd

C'est à ce moment-là que les choses semblent se corser, mais rien de bien alarmant non plus : il va nous falloir modifier le fichier de configuration de MPD. Commençons :

$ sudo nano /etc/mpd.conf

Il faut commencer par renseigner les chemins vers les répertoires où se trouvent notre musique et où seront stockées les playlists :

music_directory "/Multimedia/Musique"
playlist_directory "/home/user/.mpd/playlists"

On commente (ajout d'un # en début de ligne) la ligne suivante :

user "mpd"

Que vous utilisiez ALSA ou PulseAudio, les sorties audio sont déjà configurées et fonctionnent par défaut chez moi :

audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:0,0"        # optional
        mixer_type      "hardware"      # optional
        mixer_device    "default"       # optional
        mixer_control   "PCM"           # optional
        mixer_index     "0"             # optional
}

audio_output {
        type            "pulse"
        name            "My MPD Pulse Output"
        server          "127.0.0.1"             # optional
#       sink            "remote_server_sink"    # optional
}

Avec PulseAudio, lancez l'utilitaire paprefs et vérifiez dans l'onglet « Network Server » que « Activer l'accès réseau aux périphériques de son locaux » et « Don't require authentification » soient bien cochés.

Le plus dur est fait. Il ne nous reste plus qu'à relancer MPD avec l'une des deux commandes suivantes :

$ sudo service mpd restart

et à créer la base de données recensant l'ensemble des morceaux disponibles :

$ sudo mpd --create-db

Pour suivre la progression de cette dernière opération (qui peut s'avérer longue si vous avez beaucoup de morceaux) vous pouvez utiliser la commande suivante :

$ tail -f ~/.mpd/mpd.log

Bien que le client soit facultatif, nous vous présentons ncmpcpp, un client en ncurse extrêmement léger, facile à utiliser et à configurer, « grand frère » de ncmpc.
De plus si vous êtes un utilisateur de LastFM, vous souhaitez bien évidemment pouvoir scrobbler la musique que vous écoutez avec MPD ; pour cela il existe mpdscribble.