Salut à tous,
Je voulais partager comment j’ai fait fonctionner un kiosque tactile plein écran sur mon ZimaBoard 2 connecté à un écran tactile 22" via HDMI.
Comme ZimaOS n’a pas de gestionnaire de paquets (apt n’existe pas), l’astuce est de tout faire à l’intérieur des conteneurs Docker.
Ma configuration
ZimaBoard 2 1664 (Intel N100, 16 Go RAM)
ZimaOS v1.5.4
Écran tactile 22" via HDMI + entrée tactile USB-C→USB-A

L’approche
ZimaOS est basé sur Buildroot — pas d’apt, pas de Xorg, pas d’environnement de bureau. À la place, nous exécutons un conteneur Debian avec le pilote Xorg modesetting + Chromium en mode kiosque, avec /dev/dri passé. Un conteneur nginx:alpine séparé sert les fichiers du tableau de bord.
Étape 1 — Ajoutez votre utilisateur au groupe docker
Ouvrez le terminal web à http://your-zima-ip:7681 et exécutez :
bash
sudo usermod -aG docker VOTRE_NOM_UTILISATEUR
Reconnectez ensuite SSH pour que le changement prenne effet.
Étape 2 — Créez les fichiers
bash
mkdir -p /DATA/AppData/kiosk/dashboard
/DATA/AppData/kiosk/Dockerfile :
texte
FROM debian:bookworm-slim
RUN echo 'deb http://deb.debian.org/debian bookworm-backports main' >> /etc/apt/sources.list
RUN apt-get update && \
apt-get install -y \
xserver-xorg-core \
xserver-xorg-input-libinput \
openbox chromium \
x11-xserver-utils xinit \
fonts-noto-core && \
apt-get install -y -t bookworm-backports libgl1-mesa-dri && \
rm -rf /var/lib/apt/lists/*
COPY xorg.conf /etc/X11/xorg.conf
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
| Pourquoi les backports Mesa ? Le Intel N100 (Alder Lake-N, ID PCI 0x46d4) est supporté uniquement à partir de Mesa 23.0+. Debian bookworm fournit la version 22.3. Les backports fournissent la 25.x. |
/DATA/AppData/kiosk/xorg.conf :
texte
Section "Périphérique"
Identifiant "Intel"
Pilote "modesetting"
Option "MéthodeAccel" "aucune"
EndSection
Section "Écran"
Identifiant "Par défaut"
Périphérique "Intel"
EndSection
Section "PériphériqueEntrée"
Identifiant "Écran tactile"
Pilote "libinput"
Option "Périphérique" "/dev/input/event8"
EndSection
Section "DispositionServeur"
Identifiant "Par défaut"
Écran "Par défaut"
Périphérique d'entrée "Écran tactile" "CorePointer"
EndSection
|
Trouvez le numéro d'événement de votre appareil tactile avec : bash cat /proc/bus/input/devices | grep -A3 -i touch |
/DATA/AppData/kiosk/entrypoint.sh :
texte
#!/bin/sh
Xorg :0 vt1 -s 0 -dpms -nolisten tcp &
sleep 4
export DISPLAY=:0
xset s off && xset -dpms && xset s noblank
openbox --sm-disable &
sleep 1
exec chromium \
--kiosk --no-sandbox --disable-gpu \
--disable-dev-shm-usage \
--touch-events=enabled \
--no-first-run --disable-infobars \
"${KIOSK_URL:-http://localhost:8888}"
/DATA/AppData/kiosk/nginx.conf :
texte
server {
listen 8888;
root /usr/share/nginx/html;
index index.html;
}
Placez vos fichiers HTML/CSS/JS du tableau de bord dans /DATA/AppData/kiosk/dashboard/.

Étape 3 — Construire et lancer
Construire (note : docker build nécessite --config /tmp sur ZimaOS) :
bash
docker --config /tmp build -t kiosk:latest /DATA/AppData/kiosk
Serveur web du tableau de bord :
bash
docker --config /tmp run -d \
--name dashboard-server \
--restart unless-stopped \
--network host \
-v /DATA/AppData/kiosk/dashboard:/usr/share/nginx/html:ro \
-v /DATA/AppData/kiosk/nginx.conf:/etc/nginx/conf.d/default.conf:ro \
nginx:alpine
Affichage Kiosk :
bash
docker --config /tmp run -d \
--name jarvis-kiosk \
--restart unless-stopped \
--privileged \
--network host \
-e KIOSK_URL=http://localhost:8888 \
-v /DATA/AppData/kiosk/xorg.conf:/etc/X11/xorg.conf:ro \
-v /DATA/AppData/kiosk/entrypoint.sh:/entrypoint.sh:ro \
-v /run/udev:/run/udev:ro \
kiosk:latest
Les deux conteneurs ont --restart unless-stopped pour qu'ils survivent automatiquement aux redémarrages.
Correction du clic sur écran tactile (important !)
Le libinput de Xorg mappe le tactile comme des événements pointeur (souris). Chromium applique ensuite un seuil de mouvement minime pour le clic — même un déplacement de 1px du doigt l'empêche de se déclencher. Si votre tableau de bord utilise des gestionnaires onclick, ajoutez ce JS pour les remplacer par pointerup + un seuil de 20px :
js
(fonction touchFix() {
const downs = {};
document.addEventListener('pointerdown', e => {
downs[e.pointerId] = { x: e.clientX, y: e.clientY };
}, { passive: true });
fonction isTap(e) {
const d = downs[e.pointerId];
retour !d || (Math.abs(e.clientX - d.x) < 20 && Math.abs(e.clientY - d.y) < 20);
}
function run(fn) { try { new Function(fn)(); } catch(ex) {} }
function patchButtons(root) {
root.querySelectorAll('button[onclick]').forEach(btn => {
const oc = btn.getAttribute('onclick');
btn.removeAttribute('onclick');
btn.addEventListener('pointerup', e => { e.stopPropagation(); if (isTap(e)) run(oc); });
});
}
window.addEventListener('load', () => {
document.querySelectorAll('.widget[onclick]').forEach(el => {
const oc = el.getAttribute('onclick');
el.removeAttribute('onclick');
el.addEventListener('pointerup', e => { if (isTap(e) && !e.target.closest('button')) run(oc); });
});
patchButtons(document.body);
});
new MutationObserver(muts => muts.forEach(m =>
m.addedNodes.forEach(n => { if (n.nodeType === 1) patchButtons(n); })
)).observe(document.body, { childList: true, subtree: true });
})();
Ajoutez aussi à votre CSS pour cacher le curseur de la souris sur un écran tactile :
css
{ cursor: none !important; touch-action: manipulation; }

Dépannage
| Problème | Correction |
| La construction docker échoue avec un flag inconnu | Utilisez docker --config /tmp build … |
| Écran noir / test de sortie basique échoué | Utilisez le mode Xorg, pas Wayland/cage |
| Mesa ne supporte pas N100 | Installez libgl1-mesa-dri depuis bookworm-backports |
| Entrée tactile non détectée | Vérifiez le numéro d'événement avec /proc/bus/input/devices, mettez à jour xorg.conf |
| Le tableau de bord affiche la connexion à ZimaOS | Le port 80 est utilisé par ZimaOS — utilisez un autre port (888 fonctionne) |
Ma configuration Home Assistant toujours active (Réponse)
J'ai construit une configuration Home Assistant économe en énergie, disponible 24h/24 et 7j/7, sans que mon PC principal ne consomme de l'électricité en permanence. L'arme secrète est un Zima qui agit comme le cerveau toujours actif, tandis que mon PC complet reste en hibernation jusqu'à ce qu'il soit réellement nécessaire.
Le PC principal
Voici ce qu'il y a à l'intérieur de la machine principale :
Processeur : AMD Ryzen 9 9950X3D
Carte mère : ASUS ROG Crosshair X870E Glacial
RAM : Acer Predator Hermes RGB DDR5 96 Go (2×48 Go) 6000 MHz CL28
Stockage : Crucial T710 4 To NVMe M.2 PCIe 5.0 Gen5
GPU (Jeu) : ASUS ROG Astral GeForce RTX 5080 16 Go
GPU (IA) : Intel Arc Pro B70 32 Go (en attente de sortie)
Alimentation : Corsair RM1200x
Boîtier : Thermaltake Tower 900
La configuration Zima (le hub toujours actif)
Le Zima fonctionne 24/7 et gère tout ce qui est léger — tâches d’assistant domestique, flux de caméras, et requêtes IA basiques via le palier gratuit Groq dans le cloud.
Périphériques connectés directement au Zima :
Écran tactile Pisichen 22" via adaptateur HDMI → miniDP + un câble USB-C pour l'entrée tactile
Enceintes Edifier G1000 II via une carte son externe USB-A vers jack 3,5 mm
Microphone DAMAO DGM20S via USB-A
Stockage :
Seagate IronWolf Pro 20 To — disque NAS « trou noir »
Seagate IronWolf Pro 1 To — disque principal NAS
Réseau :
Zima connecté au routeur via Ethernet
Un second câble Ethernet relie directement le Zima au PC pour des transferts locaux rapides

La partie intelligente : Wake-on-LAN
Voici la magie — quand quelqu'un pose une question trop complexe pour que Gemini la gère bien, le Zima envoie un paquet Wake-on-LAN pour sortir le PC principal de l'hibernation. Une fois allumé, il se connecte à un LLM local de 70 milliards de paramètres tournant sur l'Intel Arc Pro B70. Une fois la tâche terminée, le PC se remet en veille.
Le résultat : un assistant domestique toujours réactif, mais la grosse machine ne se réveille que lorsqu'il y a un vrai travail lourd à faire. Les factures d'électricité restent raisonnables, et j'ai toujours accès à un modèle local très performant quand j'en ai besoin.
Un immense merci à Claude Code et Perplexity — honnêtement, sans leur aide, je n'aurais jamais pu réaliser ce projet tout seul. Ils ont été indispensables tout au long du processus.
J'espère que ces informations aideront tous ceux qui sont assez fous pour se lancer dans un projet similaire — n'hésitez pas à les partager où vous voulez !
Centre de Campagne Zima
Plus à lire

Comment SjslTech transforme le ZimaBoard 2 en un bureau Windows 11
Regardez SjslTech installer Windows 11 sur ZimaBoard 2 et tester la vidéo 4K, Office, DaVinci Resolve, Minecraft, des jeux légers et la consommation d'énergie.

Comment CYBERTECH 2099 teste ZimaBoard 2 en tant que NAS personnel et cloud privé
CYBERTECH 2099 teste le ZimaBoard 2 en tant que NAS personnel accessible et cloud privé, couvrant le matériel, la configuration de ZimaOS, le streaming...

Comment Zero Noichi exécute l'IA locale sur ZimaBoard 2 avec un AMD MI50 de 32 Go
Découvrez comment Zero Noichi associe ZimaBoard 2 à un AMD MI50 reconditionné de 32 Go pour exécuter une IA locale, générer un site web...

