Les platines Squeezelite

Référence : Lyrion Music Server 9.1.2 – squeezelite 1.9.9 – piCorePlayer 8.2 – Ubuntu 24.04 – Linux Mint 22.3

Convention : chaque bloc de commandes est précédé de la machine où il s’exécute — [nas-host], [poste-bureau], [platine].

⚠️ Cinq lignes de code de ce guide dépassent la largeur du PDF et s’y enroulent sans aucun signe visible : le chemin du binaire du greffon Local Player, la ligne de sortie numérique qu’il affiche, et les trois lignes de commande composées par piCorePlayer. Aucune n’accepte de continuation. Les recopier depuis le .md, jamais depuis le PDF.


1. Ce qu’est une platine

Le serveur Lyrion ne produit aucun son. Il tient la bibliothèque, décode, transcode et envoie un flux ; ce qui joue, à l’autre bout, est une platine — un lecteur, dans le vocabulaire de l’interface. Une platine peut être un appareil Squeezebox d’origine, ou n’importe quel ordinateur faisant tourner squeezelite, le lecteur logiciel qui parle le même protocole.

Quatre natures de platines s’y côtoient :

PlatineNatureSortie audio
Serveurgreffon Local Player sur nas-hostS/PDIF de la carte mère, vers l’amplificateur
Beelink-u1, Beelink-u2squeezelite sur le poste de travail, une platine par comptePipeWire
SalonRaspberry Pi sous piCorePlayerHiFiBerry DAC+
SejourRaspberry Pi sous piCorePlayerHDMI du Raspberry Pi
PCP-chambre2Raspberry Pi sous piCorePlayerHiFiBerry AMP, à travers l’égaliseur ALSA
ChambreSqueezebox Touch d’originesortie de l’appareil

Les téléphones et tablettes s’ajoutent à cette liste quand leur application est ouverte : ce sont des platines comme les autres, simplement intermittentes.

Où lire l’inventaire

La page Informations des préférences du serveur donne, pour chaque platine connectée, son modèle, son type, son micrologiciel, son adresse IP et son adresse MAC. C’est le relevé à ouvrir en premier quand on cherche à identifier une platine, à vérifier qu’un changement d’identité a bien pris, ou à connaître la version du logiciel qui tourne à l’autre bout.

ℹ️ Une platine qui doit jouer sans qu’une session soit ouverte sur un ordinateur ne peut pas être un poste de travail : c’est le rôle du Raspberry Pi ou de la Squeezebox. La raison est au point 4.


2. Les options qui décident de tout

Quelle que soit la machine, squeezelite se règle par la même poignée d’options. Le reste tient du détail.

-n <nom> — le nom affiché dans la liste des lecteurs.

-s <adresse du serveur> — l’adresse du serveur Lyrion, ici 192.168.0.11. À mettre toujours. Sans elle, squeezelite cherche le serveur par diffusion : il envoie un paquet vers 255.255.255.255 et attend une réponse. Cette diffusion suit la route par défaut, et sur une machine où un VPN est actif, la route par défaut part dans le tunnel. La platine cherche alors son serveur à l’autre bout du monde pendant que le serveur est sur le même commutateur qu’elle. Avec -s, la connexion s’établit directement, en une milliseconde.

Le serveur porte deux cartes réseau et répond sur les deux : l’une ou l’autre adresse convient. C’est une machine physique et non un conteneur, rien ne lie le service à une seule interface.

-m <adresse MAC> — l’identité de la platine. Lyrion classe ses lecteurs par adresse MAC, et c’est à cette adresse que sont attachés tous les réglages du lecteur : nom, volume, égaliseur, listes de lecture. Sur une machine à plusieurs interfaces — Wi-Fi, ponts Docker, tunnel VPN —, squeezelite en choisit une seule, et l’identité de la platine dépend alors de l’ordre d’énumération des cartes. Fixer -m avec l’adresse de la carte réellement câblée règle la question une fois pour toutes.

🔴 Ne jamais emprunter l’adresse d’une autre machine. Deux platines qui portent la même identité sont une seule platine pour le serveur, et la seconde à se connecter chasse la première.

-o <périphérique> — la sortie audio. ⚠️ Le nom du périphérique se lit sur la machine, il ne se recopie pas d’une platine à l’autre : deux cartes différentes portent deux noms différents, et une même carte peut changer de nom d’une version de pilote à l’autre. La commande qui les liste est -l, et elle se lance sur la machine concernée.

-a <tampon>:<période>:<format>:<mmap> — les paramètres ALSA. Ils servent à allonger le tampon quand le son se coupe.

-r <fréquence> — bride la fréquence d’échantillonnage. Utile lorsque l’appareil en aval n’accepte pas tout : un téléviseur, un amplificateur ancien, ou un égaliseur logiciel qui s’instancie à une seule fréquence. Les fichiers de fréquence supérieure sont alors convertis par squeezelite au lieu d’être refusés en silence.

-R <recette> et -u <recette> — la qualité du rééchantillonnage, sous forme de lettres : qualité, filtre, et exceptions.

-v — active le support du visualiseur, utile seulement sur une platine à écran.

Les réglages propres à chaque platine

Une fois la platine visible dans la liste des lecteurs, tout le reste se règle dans l’interface du serveur, platine par platine : volume de démarrage, transitions entre pistes, rééchantillonnage, affichage. Il n’y a rien à mémoriser — on parcourt les options et on fait les choix qui conviennent à la pièce.

⚠️ Ces réglages sont attachés à l’adresse MAC, pas au nom. Changer l’adresse d’une platine en fait un lecteur neuf pour le serveur, dont les réglages sont à refaire.


3. La platine du serveur — le greffon Local Player

Le serveur peut être sa propre platine. C’est le montage à retenir quand la machine qui sert la musique est aussi celle qui est branchée à l’amplificateur, et qu’aucune autre application n’a besoin de sa sortie audio : squeezelite la prend en exclusivité.

Le compte de service

⚠️ Le compte de service ne s’appelle pas lyrion. Le paquet et le service portent le nom neuf, mais le compte, le binaire et les répertoires portent toujours l’ancien — squeezeboxserver. C’est ce compte qui doit appartenir au groupe audio, sans quoi il n’a pas accès à la carte son.

[nas-host]

sudo usermod -a -G audio squeezeboxserver
id squeezeboxserver

Activer la sortie numérique

La sortie S/PDIF d’une carte mère est muette par défaut. Le mélangeur ALSA l’active, et alsactl store rend le réglage permanent.

[nas-host]

sudo alsamixer

Choisir la carte avec F6, atteindre le canal IEC958 avec les flèches, et l’activer avec M — l’étiquette passe de [MM] à [on]. Puis, une fois sorti du mélangeur :

[nas-host]

sudo -H alsactl store
alsamixer

Le greffon

Local Player s’active depuis l’interface du serveur, page Réglages → Extensions. Il apporte son propre binaire squeezelite : il n’y a rien à installer, ni paquet squeezelite, ni binaire à télécharger.

C’est ce binaire qui liste les sorties disponibles :

[nas-host]

sudo /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/LocalPlayer/Bin/squeezelite-x86-64 -l

La liste est longue — une trentaine d’entrées pour trois cartes. Celle qui compte ici est la sortie numérique de la carte mère :

iec958:CARD=PCH,DEV=0 - HDA Intel PCH, ALC888-VD Digital - IEC958 (S/PDIF) Digital Audio Output

Les réglages

Page Réglages → Extensions → Local Player. Les quatre champs qui portent la configuration :

  • Périphérique de Sortie : iec958:CARD=PCH,DEV=0
  • Options Supplémentaires (Avancé) : -s 192.168.0.11 -u vLE -m 02:00:00:00:00:01
  • Démarrer le Lecteur avec le Serveur : coché
  • Accès direct aux fichiers locaux : coché — la platine lit les fichiers directement sur le disque plutôt que de les recevoir du serveur par le réseau, ce qui n’a de sens que là, sur la machine qui les porte.

Le bouton Enregistrer les réglages est en bas de page ; rien n’est appliqué tant qu’il n’est pas cliqué.

Ces valeurs se retrouvent dans /var/lib/squeezeboxserver/prefs/plugin/localplayer.prefs, écrit par l’interface :

autorun: 1
bin: squeezelite-x86-64
debugs: none
loc: 1
logging: 0
opts: -s 192.168.0.11 -u vLE -m 02:00:00:00:00:01
output: iec958:CARD=PCH,DEV=0

Les deux journaux ne se règlent pas au même endroit

⚠️ C’est le piège de cette platine. log.conf gouverne server.log, le journal du serveur — et pas celui de la platine. localplayer.log est écrit par squeezelite, et il dépend des deux champs Paramètres de Débogage et Activer la journalisation du greffon. Ramener log.conf à ERROR en laissant ces deux-là en place laisse un journal qui grossit d’environ cent kilo-octets à l’heure sans que rien ne le signale.

⚠️ Et les deux champs du greffon ne se valent pas : c’est Paramètres de Débogage qui commande l’écriture. Décocher Activer la journalisation en laissant le premier à Tous ne suffit pas — le fichier continue de grossir.

Le réglage à retenir est Paramètres de Débogage : Aucun et Activer la journalisation : décoché.

Rien dans le paquet ne fait tourner ce journal. La rotation se pose à la main :

[nas-host]

sudo nano /etc/logrotate.d/lyrion-localplayer

Contenu à coller dans l’éditeur ouvert :

# Journal du lecteur local de Lyrion (squeezelite). Ni le paquet ni ses
# prédécesseurs ne le déclarent : il grossissait sans limite.
#
# copytruncate est indispensable ici. Le serveur, lui, sait rouvrir son
# journal sur signal — c'est ce que fait le postrotate de son propre
# fichier. squeezelite ne le sait pas : il garde le fichier ouvert. Sans
# copytruncate, la rotation renommerait le fichier et squeezelite
# continuerait d'écrire dans l'ancien, devenu invisible et toujours aussi
# gros. La rotation paraîtrait fonctionner sans rien limiter.

/var/log/squeezeboxserver/localplayer.log {
    weekly
    maxsize 50M
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

Puis le contrôle, qui n’écrit rien :

[nas-host]

sudo logrotate -d /etc/logrotate.d/lyrion-localplayer

Vérifier que le son sort bien par le numérique

La sortie de cette platine peut retomber sur l’analogique après un incident. Trois relevés le disent sans laisser place au doute : le périphérique numérique est occupé, l’analogique est libre, et le mélangeur est actif.

[nas-host]

grep '^output' /var/lib/squeezeboxserver/prefs/plugin/localplayer.prefs
fuser -v /dev/snd/pcmC0D0p /dev/snd/pcmC0D1p
amixer -c PCH get IEC958 | tail -2

4. La platine d’un poste de travail

Un poste de travail fait une bonne platine à deux conditions qu’il faut connaître d’avance : elle ne joue que pendant qu’une session est ouverte, et seulement pendant que cette session est celle qui est à l’écran.

🔴 Le serveur de son d’un bureau Linux — PipeWire comme PulseAudio — appartient à la session de l’utilisateur, et les permissions sur /dev/snd viennent des attributs que logind pose pour l’utilisateur du siège actif. Aucun réglage systemd ne contourne cela : le lingering, qui donne à un compte une instance systemd sans session ouverte, ne lui donne pas de siège. Une platine logicielle qui sort par PipeWire reste liée à une session ouverte.

Le binaire

squeezelite se distribue en binaire, sans installation. Il vient des sources de Ralph Irving, ou d’une compilation toute faite.

⚠️ Le poser dans /usr/local/bin, pas dans un dossier personnel. Une unité valable pour tous les comptes ne peut pas désigner ~/Logiciels/ : %h y résout le dossier de celui qui ouvre la session, et la platine disparaîtrait pour tous les autres.

[poste-bureau]

sudo install -m 755 squeezelite-x86-64 /usr/local/bin/squeezelite-x86-64
/usr/local/bin/squeezelite-x86-64 -l | head -20

Sur un bureau qui tourne sous PipeWire, la sortie à retenir est pipewire : le son passe alors par le serveur de son du bureau et cohabite avec le reste.

L’enveloppe, et les deux questions auxquelles elle répond

Sur un poste à plusieurs comptes, deux sessions peuvent être ouvertes en même temps — l’une à l’écran, l’autre derrière. Une unité activée pour tous les comptes lance alors autant de platines qu’il y a de sessions, pour une seule carte son. Un petit script d’enveloppe règle la question, et il en règle une seconde au passage.

Quand la platine doit-elle vivre ? Seulement pendant que son compte tient le siège actif.

⚠️ Il n’existe aucune cible systemd sur laquelle s’ancrer. Sous Cinnamon, graphical-session.target reste inactive alors même qu’une session est ouverte, et sound.target est dans le même cas : les services de session sont démarrés par D-Bus à la demande. Une unité accrochée à l’une de ces cibles ne démarre jamais.

logind, lui, sait. La propriété State d’un compte vaut active quand une de ses sessions est à l’écran, et online quand il n’a que des sessions en arrière-plan. C’est cette propriété que l’enveloppe interroge, toutes les cinq secondes.

ℹ️ Le verrouillage de l’écran ne déplace pas le siège : la session reste active et la lecture se poursuit. Seules une bascule de compte et une fermeture de session l’interrompent. Le son peut d’ailleurs se prolonger quelques secondes après une bascule — le déplacement des permissions ne referme pas un flux déjà ouvert, c’est l’arrêt de la platine par l’enveloppe qui le coupe.

Qui est la platine ? Un compte, pas une machine. Le nom et l’adresse MAC se dérivent de l’identifiant numérique du compte, ce qui donne une platine distincte par personne — Beelink-u1, Beelink-u2 —, stable d’un démarrage à l’autre.

🔴 Seuls les comptes nommés dans l’enveloppe ont une platine. Le gestionnaire de connexion ouvre une session comme n’importe qui : sans cette liste, une platine fantôme s’enregistre auprès du serveur à chaque passage par l’écran de connexion, et elle reste ensuite dans la liste des lecteurs.

[poste-bureau]

sudo nano /usr/local/bin/platine-squeezelite

Contenu à coller dans l’éditeur ouvert :

#!/bin/sh
# Platine Lyrion du poste de travail.
#
# Un seul binaire sert tous les comptes : l'identité de la platine vient
# du compte qui l'exécute, pas du fichier. L'adresse MAC est dérivée de
# l'identifiant numérique du compte, ce qui donne une platine distincte
# par personne, stable d'un démarrage à l'autre. Le préfixe 02 marque
# une adresse localement administrée.
#
# Seuls les comptes nommés ci-dessous ont une platine. L'unité étant
# activée pour tous les comptes, elle est aussi lancée par le
# gestionnaire de connexion, qui ouvre une session comme n'importe qui :
# sans cette liste, une platine fantôme s'enregistre auprès du serveur
# à chaque passage par l'écran de connexion.
#
# La platine ne vit que pendant que le compte détient le siège actif. La
# carte son appartient à l'utilisateur du siège, et deux platines qui
# jouent en même temps sur une seule carte n'ont aucun sens. Un écran
# verrouillé ne déplace pas le siège : la lecture se poursuit. Seuls une
# bascule de compte et une fermeture de session l'interrompent.

BINAIRE=/usr/local/bin/squeezelite-x86-64
SERVEUR=192.168.0.11
SORTIE=pipewire
INTERVALLE=5

uid=$(id -u)
case "$(id -un)" in
    user) NOM="Beelink-u1" ;;
    u2)   NOM="Beelink-u2" ;;
    *)        exit 0 ;;
esac
MAC=$(printf '02:00:00:00:%02x:%02x' $((uid / 256)) $((uid % 256)))

pid=""

arreter() {
    [ -n "$pid" ] || return 0
    kill "$pid" 2>/dev/null
    wait "$pid" 2>/dev/null
    pid=""
}

trap 'arreter; exit 0' TERM INT

while : ; do
    if [ "$(loginctl show-user "$uid" --value -p State)" = active ]; then
        if [ -z "$pid" ] || ! kill -0 "$pid" 2>/dev/null; then
            "$BINAIRE" -n "$NOM" -o "$SORTIE" -s "$SERVEUR" -m "$MAC" &
            pid=$!
        fi
    else
        arreter
    fi
    sleep "$INTERVALLE"
done

Puis le rendre exécutable :

[poste-bureau]

sudo chmod 755 /usr/local/bin/platine-squeezelite

L’unité systemd

Le démarrage par un fichier .desktop de session graphique fonctionne, mais il ne se surveille pas, ne se relance pas et n’appartient qu’à un compte. Une unité utilisateur fait mieux, et elle se contente de lancer l’enveloppe.

[poste-bureau]

sudo nano /etc/xdg/systemd/user/squeezelite.service

Contenu à coller dans l’éditeur ouvert :

[Unit]
Description=Squeezelite — platine Lyrion du poste de travail
After=pipewire.service pipewire-pulse.service
Wants=pipewire.service
StartLimitIntervalSec=0

[Service]
Type=simple
ExecStart=/usr/local/bin/platine-squeezelite
Restart=on-failure
RestartSec=30

[Install]
WantedBy=default.target

Puis l’activation, pour tous les comptes du poste :

[poste-bureau]

sudo systemctl --global enable squeezelite.service

ℹ️ Restart=on-failure et non always : l’enveloppe se termine normalement sous un compte qui n’a pas de platine, et always la relancerait toutes les trente secondes, indéfiniment.

🔴 -z n’a pas sa place dans la ligne de squeezelite. Cette option le fait passer en arrière-plan ; l’enveloppe perdrait de vue le processus qu’elle vient de lancer et en démarrerait un nouveau à chaque tour.

Contrôler

[poste-bureau]

systemctl --user status squeezelite.service
pgrep -a -f 'squeezelite-x86-64|platine-squeezelite'

Sur un poste où deux comptes ont une session ouverte, le relevé attendu est deux enveloppes et une seule platine — celle de la personne à l’écran.

ℹ️ pgrep squeezelite-x86-64 ne trouve rien : le nom fait dix-neuf caractères, et pgrep sans -f compare sur un champ que le noyau plafonne à quinze. pidof et pgrep -f n’ont pas cette limite.


5. Les platines piCorePlayer

piCorePlayer est une distribution Linux minuscule qui tient sur une carte µSD et ne fait qu’une chose : faire tourner squeezelite sur un Raspberry Pi. C’est la platine à retenir pour une pièce où la musique doit jouer sans qu’aucun ordinateur ne soit ouvert.

Le matériel

Le montage le plus abouti du parc reprend l’idée d’une Squeezebox Touch :

  • un écran tactile 7″ officiel pour Raspberry Pi, dans un boîtier SmartiPi Touch ;
  • un Raspberry Pi 3 et une carte µSD ;
  • une carte HiFiBerry DAC pour la sortie audio ;
  • un capteur infrarouge TSOP38238, qui rend les télécommandes Slimdevices utilisables.
Écran 7″, carte son et Raspberry Pi

La sortie audio est le seul choix qui change vraiment le résultat. La prise analogique du Raspberry Pi convient mal ; une carte fille — HiFiBerry DAC, DAC+, AMP, ou une carte S/PDIF optique et coaxiale — se pose sur le connecteur GPIO et fait le travail correctement. La sortie HDMI est une solution valable quand la platine alimente un téléviseur.

Le capteur infrarouge demande trois fils soudés depuis la carte fille : GPIO 22, masse et 3,3 V. LIRC, installé depuis l’interface de piCorePlayer, reconnaît les télécommandes Slimdevices d’origine.

GPIO B+

L’installation

L’image se télécharge depuis le site du projet et s’écrit sur la carte µSD ; il n’y a pas d’autre installation. Au premier démarrage, la platine prend une adresse par DHCP et sert son interface web sur le port 80.

⚠️ L’interface vit entièrement sous /cgi-bin/. La racine ne fait que rediriger vers /cgi-bin/about.cgi — un nom de page deviné en dehors de ce répertoire rend une erreur 404.

🔴 Plusieurs liens de cette interface agissent au chargement : redémarrer, éteindre, mettre à jour, sauvegarder sur la carte. Il n’y a pas de confirmation. Naviguer à l’aveugle dans les onglets d’une platine en service est un moyen sûr de l’arrêter.

Les réglages de squeezelite

Onglet Squeezelite Settings. Les champs qui comptent sont exactement les options du point 2, présentées en formulaire : le nom de la platine, le périphérique de sortie — choisi dans une liste que la machine compose elle-même —, l’adresse du serveur, et une zone d’options supplémentaires.

Les trois platines du parc, telles que piCorePlayer compose leur ligne de commande :

/usr/local/bin/squeezelite -n "Salon" -o hw:CARD=sndrpihifiberry -a 80:4::1: -s 192.168.0.11 -v
/usr/local/bin/squeezelite -n "Sejour" -o sysdefault:CARD=b1 -a 80::32:1: -s 192.168.0.11 -v
/usr/local/bin/squeezelite -n "PCP-chambre2" -o equal -a 80:4::1 -r 44100 -R vLX -s 192.168.0.11 -v

Trois enseignements s’y lisent :

  • La sortie porte un nom différent sur chaque machine. hw:CARD=sndrpihifiberry est une carte HiFiBerry ; sysdefault:CARD=b1 est la sortie HDMI du Raspberry Pi lui-même ; equal n’est pas une carte du tout, mais l’égaliseur logiciel d’ALSA, qui relaie ensuite vers la carte. Le nom se lit sur la machine.
  • -s est partout. Aucune de ces platines ne s’en remet à la découverte.
  • Le bridage de fréquence est local à une platine. -r 44100 accompagne ici la sortie par l’égaliseur ; il ne se recopie pas sur les autres.

ℹ️ Les versions de piCorePlayer installées dans une maison finissent par diverger — la mise à jour se fait platine par platine, depuis chacune. Ce n’est pas grave tant que squeezelite fonctionne, mais une capture d’écran de l’interface d’une platine ne décrit pas forcément celle d’à côté.

L’écran

Le greffon Jivelite affiche pochette et métadonnées sur l’écran 7″ — ou sur le téléviseur, quand la platine sort en HDMI. Il demande l’option -v sur la ligne de squeezelite, déjà présente sur les trois platines ci-dessus.


6. La Squeezebox Touch

L’appareil d’origine de Logitech reste une platine pleinement fonctionnelle. Il n’y a rien à installer : sur le réseau local, il trouve le serveur, s’y enregistre et apparaît dans la liste des lecteurs sous son propre type, fab4.

ℹ️ Aucun service n’y est exposé hormis SSH. C’est une platine, pas une machine à administrer : ses réglages passent par son écran ou par l’interface du serveur.

Son micrologiciel se lit sur la page Informations du serveur, au même endroit que celui des autres platines — c’est le seul moyen simple de savoir ce qu’elle exécute, l’appareil n’ayant plus de mise à jour depuis l’arrêt de sa fabrication.


7. Les télécommandes et les platines mobiles

Un téléphone peut jouer deux rôles distincts, et les applications ne sont pas les mêmes :

  • télécommande — elle pilote les platines du réseau sans jouer elle-même : SqueezeCtrl, ou l’interface web du serveur, qui suffit le plus souvent ;
  • platine — l’appareil devient un lecteur et apparaît dans la liste tant que l’application est active : SqueezePlayer, SBPlayer.

Une troisième catégorie s’y ajoute : les applications qui rendent les boutons d’un casque ou d’un adaptateur Bluetooth utilisables comme commande de lecture.

Sur le réseau local

Il suffit d’indiquer l’adresse du serveur et son port — 192.168.0.11 et 9000 — puis les identifiants, si l’authentification est active sur le serveur.

Hors de la maison

🔴 Aucune redirection de port n’est ouverte vers le serveur, et il n’y a pas lieu d’en ouvrir une. Exposer Lyrion sur Internet derrière une simple authentification revient à confier toute la bibliothèque à la robustesse d’un mot de passe dans un formulaire en clair.

Deux voies remplacent la redirection de ports :

  • WireGuard, pour retrouver le réseau de la maison tel quel — les applications ci-dessus fonctionnent alors sans changer un seul réglage, et c’est la seule voie acceptable pour la télécommande, dont le protocole de contrôle passe en clair et n’est pas fait pour traverser Internet ;
  • Navidrome, servi en HTTPS, avec une application compatible sur le téléphone. C’est la voie à retenir pour l’écoute en voiture, où maintenir un tunnel n’est pas pratique.

Dans les deux cas, limiter le débit de diffusion dans les réglages du serveur évite de consommer un forfait mobile en quelques albums.

Deux comportements à connaître

⚠️ L’authentification du serveur prive les Chromecast de l’affichage des pochettes. Le pont qui les alimente ne sait pas s’authentifier ; la lecture continue, l’affichage sur le téléviseur non.

⚠️ L’économie d’énergie d’Android coupe le Wi-Fi des applications en arrière-plan. La platine mobile se déconnecte alors dès qu’on ouvre la télécommande pour changer de piste. Le correctif est d’exclure ces applications de l’optimisation de la batterie, dans les réglages du téléphone.


8. Jouer dans plusieurs pièces

Rien n’empêche de lancer la même liste de lecture sur deux platines, chacune de son côté. Le résultat déçoit : les deux lectures démarrent à quelques dixièmes de seconde d’écart et ne se rattrapent jamais. Tant qu’on reste dans une pièce, on ne s’en aperçoit pas ; en passant de l’une à l’autre, le décalage s’entend et devient vite désagréable.

La fonction Synchroniser existe pour ça. Elle rassemble plusieurs platines en un groupe qui lit la même liste, et le serveur cale leur lecture : le son est le même partout, sans décalage perceptible. Le groupe se défait aussi simplement qu’il se crée, et chaque platine redevient indépendante.


9. Les ports

Trois ports portent tout le trafic, et il suffit de les connaître pour dépanner une platine.

  • 3483 — le protocole des platines. C’est le port qu’une platine doit joindre pour exister ; une platine qui ne le joint pas n’apparaît nulle part.
  • 9000 — l’interface web du serveur et son interface de programmation.
  • 9090 — l’interface de commande en texte.

🔴 Aucun des trois n’est fait pour traverser Internet. Le protocole de contrôle circule en clair ; l’exposer revient à ouvrir la commande du serveur à qui écoute. Hors de la maison, tout passe par le tunnel.


10. Quand une platine n’apparaît pas

Elle ne s’est pas annoncée. C’est le cas le plus fréquent, et le plus trompeur, parce que tout le reste fonctionne : la machine joint le serveur, mais sa diffusion de découverte part ailleurs. Le relevé qui tranche compare les deux routes — celle du serveur et celle de la diffusion :

[poste-bureau]

ip route get 192.168.0.11
ip route get 255.255.255.255

Si la seconde sort par une interface de tunnel, la découverte ne peut pas aboutir. Le correctif est -s, au point 2.

Elle apparaît sous un autre nom, ou en double. Deux entrées pour une même machine viennent d’un démarrage sans -m : le serveur a créé un lecteur pour l’interface choisie ce jour-là. Fixer -m, puis retirer l’entrée devenue inutile — voir ci-dessous.

Une entrée périmée traîne dans la liste des lecteurs. Le serveur garde la trace de toute platine qui s’est présentée un jour, et une identité abandonnée y reste indéfiniment. Le greffon Client Cleanup sert exactement à ça : il présente la liste complète, avec pour chaque entrée son adresse MAC, son nom, son modèle, la date de sa dernière apparition et son état de connexion. On coche celles dont on ne veut plus et on enregistre.

ℹ️ La colonne de la dernière apparition est ce qui permet de trancher sans risque : une platine active y porte la date du jour, une identité abandonnée une date ancienne.

La ligne de commande affichée n’est pas celle qui est en vigueur. ⚠️ squeezelite et le serveur réécrivent leur propre titre de processus : ps et /proc montrent un chemin répété et une adresse MAC dont les deux-points ont disparu. Seuls le fichier de l’unité, ou le fichier de préférences, font foi.

Le son ne revient pas après un redémarrage. Sur un poste de travail, c’est le comportement attendu tant qu’aucune session n’est ouverte — voir le point 4.