Photobooth : live slideshow

La projection sur grand écran des photos en simultané

Image à afficher sur la porte du photobooth
Image à afficher sur la porte du photobooth

Comme annoncé dans le premier article, nous allons revenir sur le projet du photobooth pour l’agrémenter d’un slideshow. En effet, dans ce second volet, il est question de diffuser en parallèle les photos prises par les utilisateurs de la machine à selfies. Pour cela, nous allons utiliser un second Raspberry (machine slideshow), connecté au photobooth par une liaison Wifi.

La connexion réseau sera réalisée à l’aide de la fonctionnalité « point d’accès mobile » d’un smartphone.

CONFIGURATION DES RASPBERRY POUR SE CONNECTER AU POINT D’ACCES DU SMARTPHONE

Pour configurer l’interface wlan0, éditons le fichier idoine à l’aide de la commande :

et renseignons en fin de fichier les lignes suivantes :

Comme l’indique la troisième ligne, la configuration wpa est déportée dans le fichier /etc/wpa_supplicant/wpa_supplicant.conf. Nous allons donc y renseigner les paramètres de connexion à l’aide de la commande suivante :

La commande wpa_passphrase génère une clé WPA PSK à partir de la passphrase du SSID sur lequel on souhaite se connecter. A l’aide du chainage vers la commande sudo tee, le retour de la commande passphrase est ajouté à la fin du fichier /etc/wpa_supplicant/wpa_supplicant.conf, en plus d’être affiché à l’écran. Bien entendu, il est nécessaire de saisir le SSID et la passphrase afférente, tels que configurés sur votre smartphone.

Si on affiche le contenu du fichier /etc/wpa_supplicant/wpa_supplicant.conf, on constate que les paramètres ont effectivement renseignés en fin de fichier :

La commande iwconfig vous renseignera l’état de la connexion. Si le Raspberry n’est pas connecté au point d’accès, saisir la commande sudo ifdown wlan0 && sudo ifupwlan0. Evidemment, ces commandes devront également être exécutées sur le raspberry slideshow afin de la connecter au réseau wifi.

INSTALLATION ET CONFIGURATION DU SERVEUR NFS SUR PHOTOBOOTH POUR L’EXPORT DES PHOTOS

Comme nous l’avions vu dans l’article dédié au media center, le serveur NFS est la machine qui va exporter des fichiers sur le réseau. Ainsi, pour exporter les photos de la machine à selfies, il est nécessaire d’installer sur la machine photobooth les paquets suivants :

Les répertoires à partager sont définis dans le fichier /etc/exports. L’ajout de la ligne :

en fin de fichier permet d’exporter répertoire /media/nas :

  1. à destination des clients NFS du réseau 192.168.1.0 (masque 255.255.255.0) ;
  2. les ressources seront accédées en lecture/écriture, sous l’identité suivante : user pi et groupe pi ;
  3. en s’assurant de l’état de stockage stable des données avant de répondre aux requêtes NFS (sync).

L’option all_squash permet de mapper les UID/GID fournis dans les requêtes du client NFS vers l’UID et le GID définis à l’aide des paramètres anonuid et anongid (ici, 1000 et 1000, ce qui correspond à l’utilisateur/groupe pi).

Pour lister les partages NFS sur le serveur, taper la commande :

Désormais, le contenu du répertoire /home/pi/photobooth/photos de la borne photos est accessible depuis le réseau.

IMPORT NFS

Commençons par installer le paquet nécessaire sur le client NFS :

L’export étant configuré sur la machine photobooth, la ressource est accessible et nous allons la monter sur le système de fichier local de slideshow, dans le répertoire /home/pi/PHOTOBOOTH (local), à l’aide des commandes suivantes :

Il est également possible d’automatiser le montage au démarrage du système, en ajoutant à la fin du fichier /etc/fstab la ligne suivante :

Pour que les modifications du fichier /etc/fstab soient effectives, on peut redémarrer ou demander le (re)montage de tous les filesystem mentionnés dans le fichier /etc/fstab à l’aide de la commande :

Ainsi, l’espace disque /home/pi/PHOTOBOOTH/PHOTOS de la machine photobooth est accessible dans le répertoire /home/pi/PHTOTOBOOTH de la machine slideshow.

Montage NFS du client : si une erreur apparaît…

Depuis la machine slideshow, on pourra lister les partages NFS disponibles sur le photobooth en tapant la commande :

Dans mon cas, le retour de la commande m’affichait l’erreur suivante :

En investiguant sur le serveur NFS (le photobooth), on constate (sudo systemctl status nfs-kernel-server) que le service nfs-kernel-server n’est pas en cours d’éxécution (statut « exited »). Comme l’illustre les commandes ci-dessous, un simple redémarrage du service (sudo systemtl restart nfs-kernel-server) suffit à obtenir le statut « running ».

Erreur serveur NFS
Erreur serveur NFS

Après recherches, il s’avère que le service nfs-kernel-server s’appuie sur le service rpcbind. Il semblerait qu’au démarrage du Raspberry, le service rpcbind ne soit pas encore actif au moment où le démarrage du service NFS est demandé. Pour contourner ce problème, nous allons automatiser le redémarrage du serveur NFS en ajoutant dans le fichier /etc/rc.local (avant la ligne exit 0) la ligne suivante :

Le script restart_nfs.sh, placé à la racine contiendra les lignes suivantes :

RAPATRIEMENT/SYNCHRONISATION DES PHOTOS SUR LA MACHINE SLIDESHOW

Grâce à l’import du partage NFS configuré sur le photobooth, nous accédons à ces ressources distantes. Par ailleurs, le point d’accès wifi étant fourni par mon téléphone portable, une perte de connexion réseau entre les deux Raspberry est suffisamment probable pour être considérée (batterie faible, nécessité de s’éloigner des Raspberry pour passer un coup de fil,…). Un arrêt du diaporama ne serait pas du meilleur effet ! Pour éviter ce désagrément, nous allons tout simplement rapatrier les photos localement. Pour cela, nous allons synchroniser le répertoire /home/pi/PHOTOBOOTH du Raspberry chargé du diaporama avec le répertoire /home/pi/PHOTOBOOTH/PHOTOS du photobooth à l’aide de l’outil rsync.

Synchronisation des répertoires

Editons un script bash synchro.sh (nano synchro.sh) et renseignons les lignes suivantes :

Le « / » à la fin du chemin du répertoire source est nécessaire pour éviter de recréer le répertoire PHOTOS dans le répertoire destination.

Après y avoir ajouté les droits d’exécution (sudo chmod u+x synchro.sh), lançons le script. On constatera que naturellement, il est nécessaire de s’authentifier en tapant le mot de passe de l’utilisateur pi pour accéder aux ressources distantes. Puisque l’on souhaite automatiser l’exécution toutes les minutes dans le crontab, nous allons configurer l’authentification par système de clé publique/privée.

Pour générer une paire de clé publique/privée, taper la commande :

Tout d’abord, laissons le nom proposé par défaut pour enregistrer la clé, cela évitera de devoir le spécifier à l’aide de l’option –i à chaque connexion ssh. La saisie d’une passphrase n’est pas obligatoire mais recommandée pour renforcer encore davantage la sécurité. Une passphrase permet de chiffrer/déchiffrer la clé privée afin de la protéger d’une utilisation non légitime. En effet, si l’utilisateur pi laisse sa sessions ouverte, quiconque accédant à la machine aurait alors accès aux machines autorisant l’authentification via cette clé. Si une passphrase est renseignée lors de la génération des clés, la saisie de cette passphrase serait demandée à chaque utilisation de la clé. L’objectif étant d’éviter la saisie d’un mot de passe pour l’authentification, nous laisserons cette passphrase vide.

Comme le montre le retour de la commande ci-dessous, les clés (publique et privée) sont générées dans le répertoire /home/pi/.ssh :

Il ne reste plus qu’à copier la clé publique id_rsa.pub sur le serveur sur lequel on souhaite utiliser l’authentification par clé :

L’utilisateur pi étant spécifié, son mot de passe sera demandé pour authentification afin de permettre la copie de la clé sur le serveur distant. Une fois la commande exécutée, on constate sur la machine photobooth qu’une nouvelle ligne est désormais présente dans le fichier authorized_keys :

La clé étant copié sur le photobooth, il est désormais possible de s’authentifier sans avoir à saisir le mot de passe ! Il ne reste plus qu’à planifier l’exécution du script synchro.sh dans le crontab. Pour cela, taper la commande crontab –e et ajouter en fin de fichiers la ligne suivante :

Avec cette planification, le script de synchronisation sera exécuté toutes les minutes.

AFFICHAGE DU DIAPORAMA

L’utilitaire feh

Comme évoqué dans l’introduction, ce projet implique un second Raspberry chargé de projeter les photos sur grand écran. La principale exigence est la suivante : l’outil doit prendre en compte dynamiquement l’ajout de nouvelles photos déposées dans le dossier en cours de diaporama. Après avoir passé en revue les options des différents outils de diffusion de diaporamas, c’est l’outil feh qui sera retenu pour répondre au besoin. On installe donc l’outil à l’aide de la commande suivante :

Les alternatives potentielles sont QIV (Quick Image Viewer) et fbi

L’outil est installé, nous pouvons maintenant écrire le script bash slideshow.sh qui lancera le diaporama :

et renseigner les lignes suivantes :

Les options utilisées sont les suivantes :

  • -Z : extension des photos en plein écran ;
  • -R 1 : reload le contenu du répertoire toutes les 1 secondes ;
  • -F : Affichage du diaporama en plein écran ;
  • -z : affichage ordre random ;
  • -D 4 : délai d’affichage de chaque photo ;
  • -drawexif et –draw-exif : affichage du nom du fichier et des informations exif de l’image ;
  • -Y : masque le pointeur de la souris ;
  • -z : affichage aléatoire des photos.

Exécution automatique du slideshow au démarrage du Raspberry

Sur ce Raspberry, l’interface graphique est lancée au démarrage et l’autologin de l’utilisateur pi est activé. L’environnement graphique de Raspbian, LXDE dispose d’un fichier de configuration permettant de définir les commandes à exécuter automatiquement à l’ouverture de session. Pour l’utilisateur pi, il s’agit du fichier /home/pi/.config/lxsession/LXDE-pi/autostart. Pour demander l’exécution du script slideshow.sh à l’ouverture de session de l’utilisateur pi, ajoutons en fin de fichier la ligne suivante :

A l’aide de la commande :

Comme l’indique le contenu du script slideshow.sh, les photos à projeter devront être enregistrées dans le répertoire /home/pi/PHOTOBOOTH. Pour rapatrier les photos stockées sur le photobooth, nous allons utiliser le partage NFS mis en place dans le paragraphe précédent.

Désactiver la mise en veille

La machine slideshow doit projeter en continu les photos prises au fil de la soirée. Il n’est donc pas souhaitable que la Raspberry se mette en veille après quelques minutes d’inactivité. Pour cela, éditons le fichier lightdm.conf avec la commande sudo nano /etc/lightdm/lightdm.conf pour y trouver la ligne (Ctrl + w) #xserver-command=X (section [SeatDefaults]). Cette ligne doit être décommentée (suppression du # en début de ligne) et modifiée de la manière suivante :

afin de désactiver la mise en veille.

DPMS est un acronyme pour Display Power Management Signaling, un standard permettant la désactivation de l’affichage pour l’économie d’énergie lorsque que la machine n’est pas utilisée.

ENCORE UN DETAIL POUR L’UTILITAIRE FEH…

Lors de mes premiers essais, l’utilitaire feh se lançait au démarrage du rapsberry mais l’écran restait définitivement noir,… même si des photos étaient ajoutées dynamiquement par la suite. Après investigations, il s’avère que si l’utilitaire feh est lancé alors que le répertoire /home/pi/PHOTOBOOTH est vide, le diaporama sera effectivement lancé mais aucune photo ne sera projetée et l’écran restera noir. Pour contourner ce problème, il est nécessaire qu’une photo (ou moins) soit présente dans le répertoire des clichés à projeter afin de lancer la projection.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *