Installer l'écran
Sur la machine hôte, sous Debian 13 : le service Marquee et ses réglages, puis Chromium en plein écran dès le démarrage.
Toutes les commandes se tapent sur la machine hôte, dans un terminal ou par ssh. Elles sont écrites avec sudo ; si tu travailles en root, retire-le. Dans les exemples, la machine hôte a pour adresse 192.168.1.50.
1Télécharger et vérifier
Récupère le binaire et le fichier des empreintes, puis vérifie l'un par l'autre.
curl -fLO https://marquee.yg-devworks.com/telechargements/v1.0.0/ecran-atelier-linux-amd64
curl -fLO https://marquee.yg-devworks.com/telechargements/v1.0.0/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
curl -fLO https://marquee.yg-devworks.com/telechargements/v1.0.0/ecran-atelier-linux-arm64
curl -fLO https://marquee.yg-devworks.com/telechargements/v1.0.0/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
La dernière commande doit répondre ecran-atelier-linux-amd64: OK (ou arm64). Si elle dit autre chose, arrête-toi là : le fichier n'est pas celui qui a été publié.
2Installer le binaire
Le service l'attend dans /usr/local/bin, sous le nom ecran-atelier.
sudo install -m 755 ecran-atelier-linux-amd64 /usr/local/bin/ecran-atelier
sudo install -m 755 ecran-atelier-linux-arm64 /usr/local/bin/ecran-atelier
install pose les droits d'exécution, et remplace un binaire existant par un fichier neuf plutôt que de l'écraser en place : c'est aussi la commande des mises à jour.
3Le service systemd
Marquee tourne comme un service systemd. Crée son unité :
sudo nano /etc/systemd/system/ecran-atelier.service
et colles-y ceci :
[Unit]
Description=Marquee, le bandeau lumineux du bureau
Documentation=https://marquee.yg-devworks.com/guide/ecran.html
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/ecran-atelier
Environment=ADRESSE=:8099
Environment=MUSIC_ASSISTANT=http://127.0.0.1:8095
# Le décalage entre le son et le spectre, en millisecondes : la latence de
# sortie de l'enceinte. Se calibre sur place, à l'oreille et à l'œil.
Environment=VISUALISEUR_DECALAGE_MS=0
# Le port où les services des machines (ecran-agent) se connectent. Sans
# jeton de machine, il reste fermé.
Environment=ADRESSE_MACHINES=:8098
# Le lieu de la météo et les jetons vivent à part, en 600 : une unité
# systemd est lisible par tout le monde, un secret ne doit pas y figurer.
# Le « - » rend le fichier facultatif : sans lui, l'écran afficherait ce
# qu'il sait au lieu de rester noir.
EnvironmentFile=-/etc/ecran-atelier.env
Restart=always
RestartSec=5
# La machine sert de la musique avant tout : le tableau de bord passe après.
Nice=10
# Il lit /proc et /sys pour les jauges du rail, et n'écrit rien : autant le
# lui interdire.
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yes
NoNewPrivileges=yes
DynamicUser=yes
[Install]
WantedBy=multi-user.target
- Aucun compte à créer
DynamicUserdonne au service un utilisateur éphémère, et les lignesProtect…lui ferment le disque : il lit/procet/syspour ses jauges, et n'écrit rien.- La musique d'abord
Nice=10: la machine sert de la musique, l'écran passe après.- Aucun secret ici
- Une unité se lit par tout le monde. Les jetons vont dans
/etc/ecran-atelier.env, à l'étape suivante. - Toujours debout
- S'il tombe, il repart cinq secondes plus tard, et démarre avec la machine.
4Le fichier des réglages
Tes réglages et tes secrets vivent dans /etc/ecran-atelier.env, que seul root peut lire.
sudo touch /etc/ecran-atelier.env
sudo chmod 600 /etc/ecran-atelier.env
sudo nano /etc/ecran-atelier.env
# Le lieu de la météo : « lat,lon », ou le nom d'une commune.
METEO=50.85,4.35
# Le jeton Music Assistant : voir l'étape suivante.
MUSIC_ASSISTANT_JETON=<ton jeton Music Assistant>
# Un jeton par Mac : « Nom=jeton;Autre nom=autre jeton ».
JETONS_MACHINES="MacBook Pro=<le jeton de ce Mac>"
Le nom d'un Mac est celui qu'il donnera dans son config.json : ni « = » ni « ; », 40 caractères au plus. Son jeton, tire-le au hasard ici :
openssl rand -hex 32
Tu le recopieras dans le config.json du Mac, au chapitre Installer le Mac. Sans aucun jeton de machine, le port 8098 reste fermé : tu peux laisser JETONS_MACHINES de côté pour l'instant.
Une valeur de ce fichier l'emporte sur celle de l'unité. Toutes les variables, et leurs valeurs par défaut, sont au chapitre Les réglages.
5Le jeton Music Assistant
Depuis la 2.10, Music Assistant refuse tout accès anonyme : Marquee a besoin d'un jeton longue durée. Cette commande le tire de ton identifiant et de ton mot de passe Music Assistant, qu'elle te demande sans les écrire nulle part, puis l'affiche :
python3 -c '
import getpass, json, urllib.error, urllib.request
def appel(commande, args, jeton=None):
entetes = {"Content-Type": "application/json"}
if jeton:
entetes["Authorization"] = "Bearer " + jeton
corps = json.dumps({"message_id": "marquee", "command": commande, "args": args}).encode()
try:
with urllib.request.urlopen(urllib.request.Request("http://127.0.0.1:8095/api", corps, entetes), timeout=10) as r:
return json.load(r)
except urllib.error.HTTPError as e:
raise SystemExit("Music Assistant a répondu %d à %s" % (e.code, commande))
identifiant = input("Identifiant Music Assistant : ")
connexion = appel("auth/login", {"username": identifiant, "password": getpass.getpass("Mot de passe : "), "device_name": "marquee"})
if not isinstance(connexion, dict) or not connexion.get("access_token"):
raise SystemExit("identifiants refusés")
print(appel("auth/token/create", {"name": "marquee"}, connexion["access_token"]))
'
Il lui faut python3 (sudo apt install python3 s'il manque) et Music Assistant à son adresse habituelle sur la machine, http://127.0.0.1:8095. Recopie le jeton affiché dans /etc/ecran-atelier.env, à la ligne MUSIC_ASSISTANT_JETON, et nulle part ailleurs. Il porte le nom marquee dans Music Assistant, d'où tu peux le révoquer.
Il expire au bout d'un an, et ne se renouvelle pas. Ce jour-là, l'écran affiche « jeton refusé », et non « erreur réseau » : relance la même commande.
Les touches de musique exigent la portée players.control. Un jeton qui lit sans pouvoir commander affiche la musique, mais chaque appui échoue, et l'écran le dit en ces termes.
6Démarrer, et vérifier
sudo systemctl daemon-reload
sudo systemctl enable --now ecran-atelier
Le service démarre, et redémarrera avec la machine. Vérifie qu'il répond :
curl -s http://127.0.0.1:8099/sante
La réponse attendue est {"etat":"ok"}. Depuis ton Mac, http://192.168.1.50:8099/ montre déjà la page : lisible, touches inertes, puisque Marquee n'accepte ses commandes que de l'écran lui-même.
Son journal, en continu :
journalctl -u ecran-atelier -f
Et après chaque modification de /etc/ecran-atelier.env :
sudo systemctl restart ecran-atelier
7Le kiosque
L'écran montre la page dans Chromium, en mode application et en plein écran, sous le compositeur Wayland labwc. greetd ouvre la session au démarrage, sans mot de passe : la machine s'allume, la page apparaît. Installe-les, avec un compte pour l'affichage :
sudo apt install labwc greetd chromium
sudo adduser marquee
Passe dans ce compte :
sudo -iu marquee
et écris le lanceur de Chromium :
mkdir -p ~/bin ~/.config/labwc
nano ~/bin/dashboard
#!/bin/sh
# Le navigateur de l'écran : Chromium en mode app, plein écran, sous labwc.
# Lancé par ~/.config/labwc/autostart.
#
# --overscroll-history-navigation=0 : un balayage depuis le bord ferait
# « page précédente », et l'écran resterait blanc.
# --disable-pinch : un pincement zoomerait la page.
export HOME=/home/marquee
export XDG_CONFIG_HOME=/home/marquee/.config
export XDG_CACHE_HOME=/home/marquee/.cache
export XDG_DATA_HOME=/home/marquee/.local/share
exec /usr/bin/chromium \
--ozone-platform=wayland \
--user-data-dir=/home/marquee/.config/chromium-dashboard \
--app=http://127.0.0.1:8099/ \
--start-fullscreen \
--no-first-run \
--disable-session-crashed-bubble \
--disable-infobars \
--noerrdialogs \
--overscroll-history-navigation=0 \
--disable-pinch
Rends-le exécutable, puis demande à labwc de le lancer à l'ouverture de la session :
chmod 755 ~/bin/dashboard
nano ~/.config/labwc/autostart
sleep 2
/home/marquee/bin/dashboard &
Le sleep 2 laisse à labwc le temps d'ouvrir son affichage Wayland : lancé trop tôt, au premier démarrage, Chromium pourrait ne pas le trouver. La machine de référence lance aussi waybar, une barre d'état, juste avant le lanceur : c'est facultatif (sudo apt install waybar, puis une ligne waybar &). Reviens ensuite à ton compte :
exit
Enfin, que greetd lance labwc sous le compte marquee au démarrage :
sudo nano /etc/greetd/config.toml
[terminal]
vt = 7
[default_session]
command = "labwc"
user = "marquee"
Remplace tout le contenu du fichier par ces lignes : la session du kiosque devient la session par défaut, que greetd relance d'elle-même si labwc ou Chromium tombe, sans jamais afficher d'invite de connexion. Puis :
sudo systemctl enable greetd
sudo reboot
Au redémarrage, la page s'affiche. Elle se recharge ensuite d'elle-même quand le service change de version : plus besoin de toucher à Chromium.
Relevé sur la machine de référence, le 2026-09-25. Le lanceur, l'autostart de labwc et la configuration de greetd sont les siens, au nom du compte et aux chemins près.
8L'heure juste
Installe la synchronisation de l'horloge, puis vérifie-la :
sudo apt install systemd-timesyncd
timedatectl
timedatectl doit dire System clock synchronized: yes.
Pourquoi ? L'heure du rail est celle de la machine, et la position du morceau aussi : Marquee la calcule depuis l'instant où Music Assistant l'a notée. Relevé le 2026-09-25 : sur une machine à l'horloge fausse, la position des morceaux était décalée.
9Caler le spectre sur le son
Une enceinte met un peu de temps à jouer ce qu'elle reçoit : sans correction, le spectre danse avant le son. VISUALISEUR_DECALAGE_MS retarde l'image d'autant de millisecondes. Il se règle sur place, à l'oreille et à l'œil.
- Lance un morceau aux attaques franches : une batterie, une basse.
- Regarde les barres. Si elles sautent avant le coup que tu entends, le spectre est en avance.
- Ajoute ou change la ligne dans
/etc/ecran-atelier.env, par exempleVISUALISEUR_DECALAGE_MS=150, puis relance le service. - Recommence jusqu'à ce que l'image et le son tombent ensemble.
sudo nano /etc/ecran-atelier.env
sudo systemctl restart ecran-atelier
La page relit le décalage à chaque rendu : inutile de recharger Chromium.
10Mettre à jour
Télécharge et vérifie la nouvelle version comme à l'étape 1, installe-la comme à l'étape 2, puis relance le service :
sudo systemctl restart ecran-atelier
La page se recharge d'elle-même à la nouvelle version.