260 lines
7.3 KiB
Markdown
260 lines
7.3 KiB
Markdown
Title: Smart home, épisode 1, la Jukebox.
|
||
Date: 2020-08-30 00:00
|
||
Category: Iot
|
||
|
||
Il est 2h du matin, et la voix d'Adèle sort enfin de mes enceintes, victoire !
|
||
Aller me coucher ou noter les instructions pour ne pas oublier, le choix fut dur.
|
||
|
||
I - Choisir un logiciel de musique:
|
||
-----------
|
||
|
||
Pour faire une jukebox, il y a à la fois beaucoup et finalement bien peu de logiciels.
|
||
|
||
* Subsonic
|
||
* Pulseaudio
|
||
* Icecast
|
||
* Snapcast
|
||
* MPD
|
||
* DLNA
|
||
* Mopidy
|
||
* Le Bluetooth
|
||
|
||
J'ai démarré avec un fork de Subsonic, Airsonic, il analyse une bibliothèque musical en local et permet de la jouer à distance:
|
||
|
||
- Il a beaucoup vieilli, il n'y a pas d'interface web potable.
|
||
- Malgré que ce soit vieux, il tournait péniblement sur mon mini pc
|
||
- Ne s'interface pas avec d'autre source de musique
|
||
|
||
Pulseaudio et Icecast, je n'ai pas pris le temps de comprendre leur fonctionnement mais à l'opposé de Airsonic, il sont là pour streamer des flux audios.
|
||
La musique est sur votre client ( téléphone ) et elle est streamé par le réseau vers le serveur, c'est du Bluetooth via le wifi...
|
||
|
||
Snapcast c'est la même chose, mais en plus moderne. Faible latence, il permet aussi de synchroniser plusieurs enceintes et dispose de clients modernes.
|
||
|
||
- Je n'ai pas réussi à le compiler sous Fedora 32, il faudra attendre Fedora 33
|
||
- Semble prometteur
|
||
|
||
DLNA, c'est un standard pour partager et streamer des médias inventé par un consortium de grosses boites (Samsung, Sony, Microsoft, et autres), si vous avez une télévision connectée non Android, ça peut être un choix intéressant, ça sera sûrement natif dans votre télé. Le principal hic c'est que Apple et Google ( soit 100% des smartphones ) ne font pas partie de ce consortium et ils poussent chacun un concurrent. Le deuxième problème est que la qualité des implémentations varie selon le prix et l'ancienneté de la télé, à tester.
|
||
|
||
Le dernier, Mopidy, est un mix des précédents. Par défaut il fonctionne comme Subsonic, la musique est en local mais via des plugins ( Spotify, MPD, subsonic, soundcloud,... ) et son api il est possible d'étendre ses fonctionnalités, c'est celui-ci que j'ai installé.
|
||
|
||
Je ferais sûrement un autre tuto pour l’implémentation du Bluetooth
|
||
|
||
II - Installer les outils
|
||
----
|
||
|
||
Pulseaudio:
|
||
```
|
||
dnf install pulseaudio pulseaudio-utils alsa-plugins-pulseaudio
|
||
```
|
||
|
||
Les codecs (via mplayer, pratique pour tester le son en ligne de commande):
|
||
```
|
||
dnf install http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
||
dnf install mplayer mencode
|
||
```
|
||
|
||
III - Installer Mopidy
|
||
----
|
||
|
||
L'installation est très simple:
|
||
|
||
```
|
||
dnf install mopidy mopidy-spotify mopidy-mpd
|
||
```
|
||
|
||
on édite la config dans `/etc/mopidy/mopidy.conf`:
|
||
|
||
```
|
||
[http]
|
||
enabled = true
|
||
hostname = wall-e.home
|
||
port = 6680
|
||
zeroconf = Mopidy HTTP server on $hostname
|
||
allowed_origins =
|
||
csrf_protection = true
|
||
default_app = mopidy
|
||
|
||
[mpd]
|
||
hostname = 10.10.10.10
|
||
|
||
[file]
|
||
enabled = true
|
||
media_dirs = /mnt/truck/Musique
|
||
show_dotfiles = false
|
||
excluded_file_extensions =
|
||
.directory
|
||
.html
|
||
.jpeg
|
||
.jpg
|
||
.log
|
||
.nfo
|
||
.pdf
|
||
.png
|
||
.txt
|
||
.zip
|
||
follow_symlinks = false
|
||
metadata_timeout = 1000
|
||
```
|
||
|
||
Il y a plusieurs interfaces, j'en utilise deux, Iris sur pc et Mopidy-mobile sur mon téléphone, on les installe avec pip (on pourrait faire du `sudo pip` mais c'est pas trop la sécurité)
|
||
|
||
```
|
||
chsh mopidy -s /bin/bash # par default il est en nologin
|
||
su mopidy
|
||
pip3 --user install Mopidy-Iris
|
||
pip3 --user install Mopidy-Mobile
|
||
```
|
||
|
||
|
||
Dans la doc d'Iris, il faut ajouter les droits sudo à un script, le script n'est pas utile, donc on privilégie encore une fois notre sécurité (enfin à vous de voir).
|
||
Malheureusement, Iris utilise Google-analytics, il suffit de remplacer les appels à Google par du beurre.
|
||
|
||
```
|
||
sed -i 's/google.com/lol.home/' /var/lib/mopidy/.local/lib/python3.8/site-packages/mopidy_iris/static/app.js
|
||
```
|
||
|
||
Enfin on lance Mopidy
|
||
|
||
```
|
||
systemctl start mopidy
|
||
```
|
||
|
||
Pour plus d'info : [la documentation de mopidy](https://docs.mopidy.com/en/latest/installation/)
|
||
|
||
Les interfaces webs sont accessible sur http://wall-e.home:6680
|
||
|
||
IV - La bête: Pulseaudio vs le bête: moi
|
||
-----
|
||
|
||
Naïvement, j'ai cliqué sur une piste, et je n'ai pas eu de son.
|
||
|
||
Naïvement j'ai cherché sur internet comment lancer Pulseaudio avec Systemd.
|
||
|
||
Naïvement j'ai suivi les conseils glané sur les forums.
|
||
|
||
Naïvement je pensais que Pulseaudio ca s'utilisait les doigts dans le nez, et que en 2020 on peut se passer de lire la doc juste pour avoir du son.
|
||
|
||
1 - On désactive la configuration par défaut, qui n'est adapté que si
|
||
|
||
- on fait tout avec l'utilisateur principal (merci la sécurité)
|
||
- on utilise une interface graphique
|
||
|
||
```
|
||
systemctl --global disable pulseaudio.service pulseaudio.socket
|
||
```
|
||
|
||
2 - On fait un service pour lancer Pulseaudio en tant que mopidy (on pourrait être tenté de sacrifier la sécurité pour la simplicité en lancant pulseaudio en root, on ne le fait pas)
|
||
|
||
Pas besoin d'aller chercher midi à 14h, on copie les configs déjà existantes:
|
||
```
|
||
cp /usr/lib/systemd/user/pulseaudio.service /etc/systemd/system/pulseaudio.service
|
||
cp /usr/lib/systemd/user/pulseaudio.socket /etc/systemd/system/pulseaudio.socker
|
||
```
|
||
|
||
Puis il faut éditer `/etc/systemd/system/pulseaudio.service` pour qu'il se lance avec le bon utilisateur
|
||
|
||
```
|
||
User=mopidy
|
||
```
|
||
|
||
et on change encore quelques bricoles:
|
||
|
||
```
|
||
Restart=always
|
||
Type=simple
|
||
```
|
||
|
||
pour que ça ressemble à
|
||
|
||
```
|
||
[Unit]
|
||
Description=Sound Service
|
||
Requires=pulseaudio.socket
|
||
|
||
[Service]
|
||
ExecStart=/usr/bin/pulseaudio --daemonize=no
|
||
LockPersonality=yes
|
||
MemoryDenyWriteExecute=yes
|
||
NoNewPrivileges=yes
|
||
Restart=always
|
||
RestrictNamespaces=yes
|
||
SystemCallArchitectures=native
|
||
SystemCallFilter=@system-service
|
||
# Note that notify will only work if --daemonize=no
|
||
Type=simple
|
||
UMask=0077
|
||
User=mopidy
|
||
|
||
[Install]
|
||
Also=pulseaudio.socket
|
||
WantedBy=default.target
|
||
```
|
||
|
||
On ne touche pas au socket qui est
|
||
|
||
```
|
||
[Unit]
|
||
Description=Sound System
|
||
ConditionUser=!root
|
||
|
||
[Socket]
|
||
Priority=6
|
||
Backlog=5
|
||
ListenStream=%t/pulse/native
|
||
|
||
[Install]
|
||
WantedBy=sockets.target
|
||
```
|
||
|
||
on enable tout ça:
|
||
|
||
```
|
||
systemctl enable --now pulseaudio
|
||
```
|
||
|
||
Si vous avez du son bravo !
|
||
|
||
V - Si ce n'est pas bon, des commandes en vrac
|
||
----
|
||
|
||
Sinon quelques commandes utiles
|
||
|
||
|
||
```
|
||
usermod -a -G pulse mopidy
|
||
```
|
||
|
||
```
|
||
usermod -a -G audio mopidy
|
||
```
|
||
|
||
```
|
||
sudo -i -u mopidy # pour devenir mopidy en cleanant les variables d'env qui font tout buguer
|
||
```
|
||
|
||
```
|
||
pactl list sinks # à lancer en tant que mopidy - affiche les sorties audios
|
||
```
|
||
|
||
```
|
||
pactl set-default-sink # à lancer en tant que mopidy - choisis la sortie audio à utiliser
|
||
```
|
||
|
||
```
|
||
speaker-test # teste le son, si vous avez des grésillement ou mieux c'est bon, pulseaudio fonctionne
|
||
```
|
||
|
||
```
|
||
mplayer mon-super-morceau.flac # joue un morceau de musique, pour être sur
|
||
```
|
||
|
||
VI - Applications pour controler mopidy
|
||
----
|
||
|
||
Voilà bientôt 2 ans que j'utilise Mopidy, l'année 2022 vient de commencer. Et je n'utilise quasiment jamais l'interface web.
|
||
|
||
MPD étant un standard, il y a énormément de clients téléphone et ordinateurs.
|
||
|
||
- Sous Android j'utilise M.A.L.P, open-source et disponible via F-droid
|
||
- Sous Linux, une application QT, Cantata. Cette superbe application gère aussi les podcasts et permet de streamer les podcasts en MPD sur l'enceinte.
|