Couac.tv

Configurer Pulseaudio sur son serveur de musique.

Posted on in Iot by Tom Darboux .

Il y a deux ans, j'ai fait un article pour installer une jukebox sous Linux. J'avais présenté comment faire fonctionner Pulseaudio. Ca fonctionnait, mais de façon bien peu optimale.

Pulseaudio par défaut attend une activation par un socket. Quand il n'y a rien, pulseaudio se désactive.
Sous Fedora le socket est dans /usr/lib/systemd/user/pulseaudio.socket avec le code suivant:

[Unit]
Description=Sound System
ConditionUser=!root

[Socket]
Priority=6
Backlog=5
ListenStream=%t/pulse/native

[Install]
WantedBy=sockets.target

Il écoute dans /run/pulse/native et ne doit pas être lancer en root. Il se charge ensuite de demmarer pulseaudio via son service dans pulseaudio.service

Sur un ordinateur avec une interface graphique, l'interface graphique se charge de la besogne. Elle démarre une instance de systemd en tant que l'utilisateur qui lance l'interface graphique avec systemd --user, puis active le socket.

Sur un serveur on pourrait faire la même chose. Mais quels sont nos alternatives ?

Pulseaudio en mode 'system' lancé en root (mauvaise idée)

De nombreux articles proposent de lancer Pulseaudio avec l'option --system. Ça permet de sauter ce problème d'utilisateur et de socket.

Pourquoi c'est pas terrible ?

  • Déjà, ca demande de lancer Pulseaudio avec les droits root (en réalité, ca dure pas longtemps, pulseaudio se fork avec son propre utilisateur), c'est déconseillé dans la doc.
  • Et par sécurité, pulseaudio va désactiver plein de plugins, l'expérience risque de pas être optimal.

Par contre, un avantage est de pouvoir utiliser Pulseaudio avec plusieurs utilisateurs à la fois.

Lancer pulseaudio en tant qu'un utilisateur pré-définie

Au lieu qu'une interface graphique se charge de lancer Pulseaudio, on va configurer le socket pour qu'il se lance seul au démarrage, avec l'utilisateur mopidy.

cp /usr/lib/systemd/user/pulseaudio.service /etc/systemd/system/pulseaudio.service
cp /usr/lib/systemd/user/pulseaudio.socket /etc/systemd/system/pulseaudio.socket

on va éditer /etc/systemd/system/pulseaudio.socket en enlevant le ConditionUser=!root et en ajoutant SocketUser=mopidy.

on va faire la même chose pour le service /etc/systemd/system/pulseaudio.service, on enlève ConditionUser=!root et on ajoute User=mopidy.

on désactive l'ancienne configuration:

systemctl --global disable pulseaudio.service pulseaudio.socket

On active la nouvelle:

systemctl enable pulseaudio.socket

Voila ! Vous avez une installation propre de Pulseaudio sur votre serveur. Vous ne pouvez par contre jouer du son que avec l'utilsateur mopidy (à vérifier), ce qui peut être limitant.