Le besoin
Chez moi, je supervise un réseau UniFi complet : switch, gateway, access points, caméras. Le dashboard UniFi Network donne une vue temps réel utile… quand on la regarde. Problème classique : ouvrir un onglet de navigateur pour « jeter un œil » implique d’être devant un ordi, et mon ordi principal n’est pas dans le bureau en permanence.
L’idée : un kiosque tactile dédié qui affiche en permanence le dashboard UniFi, s’allume quand j’entre dans la pièce, s’éteint quand je pars. Discret, passif, sans clavier souris qui traîne.
Le matériel sous la main :
- Un Intel NUC i3-1220P qui tourne déjà 24/7 avec plusieurs VMs Proxmox — son iGPU n’était pas exploité, c’est l’opportunité parfaite
- Un écran portable Anmite 14″ 1920×1200 USB-C tactile
- Home Assistant et deux capteurs Hue déjà en place dans le bureau
Sur le papier : 30 minutes. En vrai : trois heures. Voici pourquoi, et surtout comment faire en 30 minutes la prochaine fois.
L’architecture
Au lieu de mettre Debian + Chromium directement sur le métal, j’ai ajouté une VM dédiée sur le NUC existant pour trois raisons :
- Isolation : le kiosque n’est qu’un affichage, il n’a pas à toucher l’hyperviseur ni les autres VMs
- Snapshotabilité : je peux tester des configs sans risque de perdre quoi que ce soit
- Zéro impact sur l’existant : les VMs déjà en production continuent de tourner normalement, le kiosque s’ajoute en parallèle
┌─────────────────────────────────────────────┐
│ Proxmox host (VMs existantes + iGPU bindé) │
│ ┌─────────────────────────────────────────┐ │
│ │ VM 510 "nuc-kiosk" Debian 13 Trixie │ │
│ │ ├── iGPU passthrough (x-vga) │ │
│ │ ├── USB passthrough direct (touchscreen)│ │
│ │ ├── Xorg + Chromium --kiosk │ │
│ │ └── x11vnc (pour debug initial) │ │
│ └─────────────────────────────────────────┘ │
│ Sortie : DP-3 → USB-C → écran │
└─────────────────────────────────────────────┘
Côté Home Assistant, deux capteurs Hue (bureau + tableau) sont agrégés en un binary_sensor template qui pilote l’allumage de l’écran via SSH.
Piège n°1 : le kernel cloud Debian
Symptôme : iGPU en passthrough, VM bootée, écran noir sans erreur utile.
Cause : Debian 13 propose linux-image-cloud-amd64 par défaut dans les templates VM. Ce kernel optimisé ne contient pas le module i915.
Fix en 3 commandes :
apt install linux-image-amd64apt purge 'linux-image-*-cloud-amd64'update-grub && reboot
À retenir : sur VM Debian pour passthrough GPU, toujours installer le kernel complet.
Piège n°2 : le VBT manquant
Symptôme : i915 se charge, puis dmesg affiche failed to load vbt.bin (-2).
Cause : le VBT (Video BIOS Table) est une config que le firmware Intel lit depuis la ROM iGPU. En passthrough, la VM voit le GPU mais pas la ROM.
La procédure (une fois, puis oubliée) :
- Sur l’hôte, temporairement binder l’iGPU à
i915au lieu devfio-pci - Dumper le VBT depuis debugfs :
cp /sys/kernel/debug/dri/0/i915_vbt /tmp/vbt.bin - Copier
vbt.bindans/lib/firmware/i915/sur la VM - Hook initramfs pour inclure le VBT dans l’image de démarrage
- Paramètre kernel
i915.vbt_firmware=i915/vbt.binvia GRUB - Remettre l’iGPU en
vfio-pciet rebooter
À retenir : pour tout iGPU Intel en passthrough, le VBT n’est pas optionnel. Dump et injection en 5 minutes si on connaît la séquence.
Piège n°3 : Thunderbolt tunneling dans une VM, c’est cassé
Symptôme : écran USB-C branché, image OK, tactile inerte. dmesg :
thunderbolt 0000:04:00.0: device links to tunneled native ports are missing!
Cause : le TB tunneling en VM nécessite une table ACPI DSD correctement propagée, que QEMU ne reconstruit pas en passthrough classique.
Le sauvetage : vérifier d’abord comment le périphérique est vu par l’hôte. Dans mon cas, le touchscreen Anmite passait directement par le xHCI PCH (00:14.0), pas via les contrôleurs TB4. Donc :
lsusb -tvsur l’hôte pour identifier le bon busqm set 510 --usb0 host=27c0:0859,usb3=1(passthrough USB par VID:PID)- Reboot VM
Tactile remonte immédiatement. Pas besoin de toucher à Thunderbolt.
À retenir : USB VID:PID > TB tunneling, quasi toujours.
Piège n°4 : Chromium kiosk + window manager = pas besoin
Symptôme : Xorg en boucle de redémarrage avec erreurs PyXDG cryptiques après install Openbox.
Cause : Chromium --kiosk gère le fullscreen seul. Ajouter un WM = dépendances en plus et points de rupture.
Le .xinitrc final tient en 10 lignes :
xset -dpms+xset s offpour éviter les mises en veille indésirablesxrandr --output DP-3 --mode 1920x1200pour forcer la résolution (sans ça, Chromium se lance à 50% de l’écran)unclutter -idle 0.5 -root &pour masquer le curseurchromium --kiosk --touch-events=enabled --no-sandbox <url>
Deux flags clés : --touch-events=enabled (sinon pas de multi-touch) et --no-sandbox (le sandbox namespace ne marche pas toujours en VM).
À retenir : pas de WM dans un kiosque. chromium --kiosk fait tout.
Piège n°5 : le clavier virtuel qui fait perdre 1h
Symptôme : UniFi demande login/password à la première connexion. Comment saisir sur un kiosque sans clavier physique ?
Ce qui a fait perdre du temps : onboard, le clavier virtuel Linux. Trois configs imbriquées (gsettings, AT-SPI, --force-renderer-accessibility), un bouton « minimize » piégeux, des heures de galère.
Ce qui a pris 5 minutes :
apt install x11vncsur la VM- Lancer un serveur VNC sur
:0 vnc://10.0.10.147:5900depuis le Mac, saisir les credentials avec le vrai clavier physique- Chromium les mémorise dans son
--user-data-dir - Tuer le VNC après (ou le garder pour les maintenances)
À retenir : pour tout kiosque tactile, installer x11vnc dès le début. 5 minutes qui évitent des heures de galère clavier virtuel.
Home Assistant : allumer l’écran uniquement quand quelqu’un est là
Dernière brique : pas de gaspillage, l’écran ne reste pas allumé 24/7 pour rien. Deux capteurs Hue couvrent les zones d’approche du bureau, agrégés côté HA en un binary_sensor OR.
Pourquoi agréger plutôt que deux triggers séparés : avec deux triggers indépendants, le timer for: 00:05:00 de l’un continue même si l’autre capteur est actif. L’écran peut s’éteindre alors qu’on est encore dans la pièce. Le template en OR règle ça : le timer ne court que si les deux capteurs sont inactifs simultanément.
Le package HA tient en un seul fichier /config/packages/kiosk_nuc.yaml :
shell_command: 2 commandes SSH vers la VM (xset dpms force on/off)template binary_sensor: agrégation OR des deux capteurs Hue- 2
automation: ON sur mouvement, OFF après 5 min sans mouvement
Avantage du package : pour désactiver le kiosque, je supprime ce fichier et c’est propre. Aucun fragment dispersé dans configuration.yaml.
Les 5 leçons à retenir
- VNC d’abord, toujours — pour tout kiosque tactile,
x11vncdès le début évite la galère clavier virtuel - USB VID:PID > Thunderbolt tunneling — regarde toujours si le périphérique USB-C ne passe pas directement par le xHCI du chipset
- Le VBT est obligatoire pour iGPU Intel en passthrough — pas d’exception, dump et injection via initramfs
- Pas de window manager dans un kiosque — Chromium
--kioskgère le fullscreen seul - Kernel full, pas cloud — sur VM Debian pour passthrough iGPU, toujours
linux-image-amd64
Résultat final
Un écran tactile 14″ accroché près du bureau, qui affiche en permanence le dashboard UniFi avec toutes les métriques temps réel. Il s’allume quand j’entre dans la pièce, s’éteint après 5 minutes sans présence. Le tactile fonctionne, je peux naviguer dans l’interface UniFi sans clavier ni souris. Consommation : négligeable en veille, ~8W en usage.
Le plus satisfaisant dans tout ça : le NUC continue d’héberger ses VMs comme avant, l’iGPU jusqu’ici inutilisé fait maintenant tourner un affichage dédié, et l’ensemble coûte zéro matériel supplémentaire hormis l’écran.
Durée du projet une fois qu’on connaît tous les pièges : 30 minutes. Durée réelle la première fois : 3 heures. La différence tient à cinq patterns qui reviennent sur la plupart des projets homelab, et que j’espère vous avoir évités en partageant ce retour d’expérience.
Prochaine étape : cloner la VM kiosk et changer l’URL pour afficher une vue Grafana de ma consommation électrique sur un deuxième écran au salon.
Pour aller plus loin
- Installer Home Assistant sur Proxmox — la base pour piloter les automatisations DPMS de cet article
- Mon setup homelab 2026 — vue d’ensemble du cluster Proxmox et des VMs qui tournent à côté du kiosque
- Dream Machine SE UniFi — le cœur du réseau qu’on supervise sur ce kiosque
- Pourquoi j’ai remplacé mon NAS Synology par un UniFi UNAS Pro — autre brique UniFi de mon homelab
FAQ
Pourquoi un Intel NUC plutôt qu’un Raspberry Pi pour un kiosque 24/7 ?
Le NUC a une ventilation plus fiable sur la durée, un stockage NVMe qui ne meurt pas comme les SD, et assez de CPU pour un Chromium fluide avec HA dashboard + animations CSS. Pour 5W de conso supplémentaire.
Quelle distribution Linux pour un kiosque tactile ?
Debian 12 minimal (LXC Proxmox ou bare-metal). J’utilise Debian sur LXC privilégié avec passthrough GPU + écran tactile. Ubuntu marche aussi mais Debian est plus stable sur le long terme.
Comment gérer le refresh automatique du dashboard ?
Chromium Kiosk Mode + extension auto-refresh chaque heure. Si HA redémarre, Chromium reprend automatiquement la session. Pour éviter les écrans blancs, j’ai un script bash qui ping HA toutes les 5 min et relance Chromium si timeout.









