Vous avez suivi :
- Lancez-vous, mettez de la vie dans votre Raspberry
- Projet Radio Wifi – Etape 1 : Faire sortir du son de votre Raspberry
Mais vous n’avez logiquement pas envie de vous connecter à chaque fois pour démarrer la musique.
Solution
Nous allons automatiser le démarrage.
On a déjà fait un gros morceau du boulot. Passons à la phase suivante pour faire en sorte que quand on branche le Raspberry sur le courant, il y ait rapidement de la musique qui sorte sur les enceintes. Cela suppose que l’étape 1 soit réalisée.
Qu’est-ce qui nous manque ? Un démarrage automatique de la radio une fois que le Raspberry est lui-même démarré.
Il y a une version simple, mais je vais préférer la version « propre » : créer un fichier dvgb-radio dans le répertoire /etc/init.d/ qui est un peu le répertoire « Démarrer » de Windows, les scripts qu’il contient seront exécutés au démarrage.
sudo vi /etc/init.d/dvgb-radio
Nous voilà dans l’éditeur de texte vi. Nous ne rentrerons pas aujourd’hui dans l’usage facile de cet outil, on va plutôt faire du didactique. Il faut donc appuyer sur la touche « i » pour passer en mode insertion et coller le texte ci-dessous
#! /bin/sh # /etc/init.d/dvgb-radio ### BEGIN INIT INFO # Provides: DaVinGhiBlog # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start radio via mpc at boot time # Description: Start the first radio wich is listen on mpc ### END INIT INFO # La description est faite ci-dessus, nous pouvons maintenant traiter les differents cas case "$1" in start) # Au demarrage, on souhaite ce mode de fonctionnement (boot y compris) mpc play 1 ;; stop) # A l'arrête, on souhaite cette action (arrêt du système y compris) mpc stop ;; reload|restart) # Si l utilisateur demande de redemarrer le service, on arrete et on demarre $0 stop $0 start ;; *) echo "Usage: $0 start|stop|restart|reload" exit 1 esac exit 0
Une fois la copie faite, il faut quitter le mode insertion avec la touche « Echap » de votre clavier, puis saisir « :w », ce qui va sauvegarder (write) votre fichier, avant de quitter avec « :q ».
Par curiosité, allons dans le répertoire où nous venons de créer ce fichier pour s’assurer qu’il est bien là.
cd /etc/init.d
et listons son contenu
ls
Nous constatons rapidement que le fichier est présent… surtout que le Raspberry le met en blanc alors que les autres sont en vert. Elle est sympa cette framboise.

En fait, oui et non… Elle met en avant le script que nous venons de créer car il n’est pas tout à fait pareil que ses copains. Rejouons une nouvelle commande :
ls -lrt
Cette commande liste le contenu d’un répertoire comme « ls », mais en précisant plus de choses, y compris les droits (l’ajout de la lettre « l »), en les triant selon leur date de modification (l’ajout de la lettre t) en allant du plus ancien au plus récent (l’ajout de la lettre r).

Détaillons une de ces lignes pour le fichier « udev » par exemple :
-rwxr-xr-x 1 root root 6581 Jul 24 16:55 udev
On retrouve dans cette ligne, de droite à gauche :
- le nom du fichier « udev«
- la date de dernière modification « Jul 24 16:55 » (le 24 juillet de cette année puisque l’heure est indiquée : 16h55; sinon vous auriez « Jul 24 2015 » par exemple)
- la taille du fichier en octet « 6581«
- le propriétaire du fichier et le groupe auquel il appartient « root root«
- le nombre de lien vers ce fichier « 1«
- les droits du propriétaire, du groupe et des autres sous la forme « rwxr-xr-x«
- le type d’objet « – » pour un fichier (« l » pour un lien, « d » pour un répertoire, par exemple)
Ce qui nous intéresse le plus pour le moment, ce sont les droits. Cette chaîne est constituée toujours des 3 mêmes lettres, toujours dans le même sens :
- r pour lecture (Read)
- w pour l’écriture (Write)
- x pour l’exécution (eXecute)
Il faut comprendre que ce bloc de 3 caractères est répété 3 fois.
- les trois premiers indiquent les droits pour le propriétaire « rwx » qui a ici le droit de lire, écrire et exécuter le fichier.
- les trois suivants indiquent les droits pour les autres utilisateurs du groupe auquel appartient le fichier « r-x » qui ont alors ici le droit de lire et d’exécuter (le w est remplacé par un -)
- les trois derniers indiquent les droits pour tous les autres utilisateurs « r-x » qui ont donc également le droit de lire et d’exécuter.
Ces droits permettent donc à n’importe quel utilisateur de lire le fichier « udev » et de l’exécuter, mais seul root peut le modifier.
Notre script dvgb-radio a une situation bien différente. Les droits en lecture et en écriture sont similaires à tous ces copains, mais personne n’a le droit de l’exécuter… c’est dommage pour un script.
-rw-r--r-- 1 root root 812 Oct 12 22:17 dvgb-radio
Pour faire évoluer les droits, nous allons jouer la commande suivante qui permet de modifier les droits sur un fichier :
sudo chmod 755 dvgb-radio
De la même façon que tout à l’heure, un chiffre correspond à 3 lettres :
- le premier indique les droits pour le propriétaire
- le suivant indique les droits pour les autres utilisateurs du groupe auquel appartient le fichier
- le dernier indique les droits pour tous les autres utilisateurs
Et en terme de chiffre :
- 0 : aucun droit (—)
- 1 : exécution uniquement (–x)
- 2 : écriture uniquement (-w-)
- 3 (= 1 + 2) : exécution et écriture (-wx)
- 4 : lecture uniquement (r–)
- 5 (= 1 + 4) : lecture et exécution (r-x)
- 6 (= 2 + 4) : lecture et écriture (rw-)
- 7 (= 1 + 2 + 4) : lecture, écriture et exécution (rwx)
Maintenant que les droits sont posés, au prochain redémarrage, ça devrait être bon !
Testons notre script en demandant l’exécution du script en mode « start » :
sh -x dvgb-radio start
Miracle, la musique refonctionne 🙂
Il faut maintenant que le script fonctionne à chaque démarrage :
sudo update-rc.d dvgb-radio defaults sudo update-rc.d dvgb-radio enable

et si vous en avez marre que la radio démarre en même temps que le Raspberry :
sudo update-rc.d dvgb-radio remove
On teste en redémarrant le Raspberry
reboot
Choisissez l’utilisateur qui demande le redémarrage puis saisssez le mot de passe quand demandé. Normalement, le Raspberry redémarre, et la musique avec. J’ai mesuré 20 secondes entre le moment où je valide le reboot d’un Raspberry Pi 3 et le moment où j’entends à nouveau la musique, 17 secondes entre le moment où je branche le Raspberry Pi 3 et où j’entends la musique
Après le reboot, pensez à relancer votre connexion à Kitty / Putty car la fenêtre est sûrement toujours ouverte mais la connexion n’est plus active.
Amusez-vous bien, nous verrons plus tard comment couper le fil Ethernet par du WiFi et le fil Jack par du Bluettoth. A bientôt !
3 commentaires sur “Projet Radio Wifi – Etape 2 : Automatiser le démarrage”
Bonjour,
Le script fonctionne jusqu’à l’avant dernière étape.
A la dernière étape : sudo update-rc.d dvgb-radio enable, le message d’erreur suivant apparaît :
Failed to enable unit: Unit /run/systemd/generator.late/dvgb-radio.service is transient or generated.
Pouvez-vous m’indiquer une idée du correctif.
Etant relativement débutant sous linux je ne parviens pas à comprendre pourquoi cette erreur est générée.
En pratique la radio fonctionne (avec un Hifiberry) mais ne se lance pas automatiquement alors que le script fonctionne bien depuis le shell.
Merci pour votre aide
Merci pour votre commentaire pour faire avancer le problème. J’ai l’impression que, puisque c’est un script que nous avons créé, nous ne pouvons pas le mettre au démarrage… Et je crois justement que c’est par là que j’étais coincé sur le démarrage automatique !