Hallo allemaal,
Ik wilde delen hoe ik een fullscreen touchscreen kiosk draaiend kreeg op mijn ZimaBoard 2 aangesloten op een 22" touchmonitor via HDMI.
Omdat ZimaOS geen pakketbeheerder heeft (apt bestaat niet), is de truc om alles binnen Docker-containers te doen.
Mijn setup
ZimaBoard 2 1664 (Intel N100, 16 GB RAM)
ZimaOS v1.5.4
22" touchmonitor via HDMI + USB-C→USB-A touchscreen invoer

De aanpak
ZimaOS is Buildroot-gebaseerd — geen apt, geen Xorg, geen desktopomgeving. In plaats daarvan draaien we een Debian-container met Xorg modesetting-stuurprogramma + Chromium in kioskmodus, met /dev/dri doorgegeven. Een aparte nginx:alpine-container serveert de dashboardbestanden.
Stap 1 — Voeg je gebruiker toe aan de docker-groep
Open de webterminal op http://your-zima-ip:7681 en voer uit:
bash
sudo usermod -aG docker JOUW_GEBRUIKERSNAAM
Verbind daarna opnieuw via SSH zodat de wijziging van kracht wordt.
Stap 2 — Maak de bestanden aan
bash
mkdir -p /DATA/AppData/kiosk/dashboard
/DATA/AppData/kiosk/Dockerfile:
text
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"]
| Waarom Mesa backports? De Intel N100 (Alder Lake-N, PCI ID 0x46d4) wordt pas ondersteund vanaf Mesa 23.0+. Debian bookworm levert 22.3. Backports biedt 25.x. |
/DATA/AppData/kiosk/xorg.conf:
text
Sectie "Apparaat"
Identificatie "Intel"
Stuurprogramma "modesetting"
Optie "AccelMethod" "geen"
EndSection
Sectie "Scherm"
Identificatie "Standaard"
Apparaat "Intel"
EndSection
Sectie "Invoerapparaat"
Identificatie "Touchscreen"
Stuurprogramma "libinput"
Optie "Apparaat" "/dev/input/event8"
EndSection
Sectie "ServerLayout"
Identificatie "Standaard"
Scherm "Standaard"
Invoerapparaat "Touchscreen" "CorePointer"
EndSection
|
Vind het eventnummer van je touch-apparaat met: bash cat /proc/bus/input/devices | grep -A3 -i touch |
/DATA/AppData/kiosk/entrypoint.sh:
text
#!/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:
text
server {
listen 8888;
root /usr/share/nginx/html;
index index.html;
}
Plaats je dashboard HTML/CSS/JS bestanden in /DATA/AppData/kiosk/dashboard/.

Stap 3 — Bouwen en Uitvoeren
Bouwen (let op: docker build heeft --config /tmp nodig op ZimaOS):
bash
docker --config /tmp build -t kiosk:latest /DATA/AppData/kiosk
Dashboard webserver:
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
Kiosk weergave:
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
Beide containers hebben --restart unless-stopped zodat ze automatisch herstarten na een reboot.
Touchscreen Klik Fix (belangrijk!)
Xorg's libinput behandelt aanraking als pointer (muis) gebeurtenissen. Chromium past dan een kleine bewegingsdrempel toe voor klikken — zelfs een 1px vingerverschuiving voorkomt dat het wordt geactiveerd. Als je dashboard onclick handlers gebruikt, voeg dan deze JS toe om ze te vervangen door pointerup + een drempel van 20px:
js
(function touchFix() {
const downs = {};
document.addEventListener('pointerdown', e => {
downs[e.pointerId] = { x: e.clientX, y: e.clientY };
}, { passive: true });
function isTap(e) {
const d = downs[e.pointerId];
return !d || (Math.abs(e.clientX - d.x) < 20 && Math.abs(e.clientY - d.y) < 20);
}
functie run(fn) { probeer { nieuwe Function(fn)(); } vang(ex) {} }
functie patchButtons(root) {
root.querySelectorAll('button[onclick]').forEach(btn => {
const oc = btn.getAttribute('onclick');
btn.removeAttribute('onclick');
btn.addEventListener('pointerup', e => { e.stopPropagation(); als (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 => { als (isTap(e) && !e.target.closest('button')) run(oc); });
});
patchButtons(document.body);
});
nieuwe MutationObserver(muts => muts.forEach(m =>
m.addedNodes.forEach(n => { als (n.nodeType === 1) patchButtons(n); })
)).observe(document.body, { childList: true, subtree: true });
})();
Voeg ook toe aan je CSS om de muiscursor op een touchscreen te verbergen:
css
{ cursor: none !important; touch-action: manipulation; }

Probleemoplossing
| Probleem | Oplossing |
| docker build faalt met onbekende vlag | Gebruik docker --config /tmp build … |
| Zwart scherm / Basis outputtest mislukt | Gebruik Xorg modesetting, niet Wayland/cage |
| Mesa ondersteunt N100 niet | Installeer libgl1-mesa-dri van bookworm-backports |
| Touch-invoer niet gedetecteerd | Controleer eventnummer met /proc/bus/input/devices, update xorg.conf |
| Dashboard toont ZimaOS login | Poort 80 is in gebruik door ZimaOS — gebruik een andere poort (888 werkt) |
Mijn altijd-aan Home Assistant setup (Antwoord)
Ik heb een energiezuinige home assistant setup gebouwd die 24/7 beschikbaar is zonder dat mijn hoofdcomputer continu stroom verbruikt. Het geheime wapen is een Zima die fungeert als het altijd-aan brein, terwijl mijn volledige pc in slaapstand staat totdat hij echt nodig is.
De hoofd-pc
Dit zit er in de hoofdcomputer:
CPU: AMD Ryzen 9 9950X3D
Moederbord: ASUS ROG Crosshair X870E Glacial
RAM: Acer Predator Hermes RGB DDR5 96GB (2×48GB) 6000MHz CL28
Opslag: Crucial T710 4TB NVMe M.2 PCIe 5.0 Gen5
GPU (Gaming): ASUS ROG Astral GeForce RTX 5080 16GB
GPU (AI): Intel Arc Pro B70 32GB (wacht op release)
Voeding: Corsair RM1200x
Behuizing: Thermaltake Tower 900
De Zima-opstelling (de altijd-aan hub)
De Zima draait 24/7 en regelt alles wat licht is — taken van de home assistant, camerafeeds, en basis AI-vragen via de Groq free tier in de cloud.
Aangesloten randapparatuur direct op de Zima:
Pisichen 22" touchscreen monitor via HDMI → miniDP-adapter + één USB-C-kabel voor touch input
Edifier G1000 II luidsprekers via een externe USB-A naar 3,5mm geluidskaart
DAMAO DGM20S microfoon via USB-A
Opslag:
Seagate IronWolf Pro 20TB — ''zwart gat'' NAS-schijf
Seagate IronWolf Pro 1TB — hoofd NAS-schijf
Netwerk:
Zima verbonden met de router via ethernet
Een tweede ethernetkabel loopt rechtstreeks van de Zima naar de pc voor snelle lokale overdrachten

Het slimme deel: Wake-on-LAN
Hier is de magie — wanneer iemand een vraag stelt die te complex is voor Gemini om goed af te handelen, stuurt de Zima een Wake-on-LAN-pakket om de hoofd-pc uit de slaapstand te halen. Zodra hij aan is, maakt hij verbinding met een lokale 70B parameter LLM die draait op de Intel Arc Pro B70. Nadat de taak is voltooid, gaat de pc weer in slaapstand.
Het resultaat: een home assistant die altijd responsief is, maar de grote computer alleen wakker wordt als er echt zwaar werk te doen is. De energierekeningen blijven beheersbaar, en ik heb nog steeds toegang tot een zeer capabel lokaal model wanneer ik het nodig heb.
Een grote dank aan Claude Code en Perplexity — eerlijk gezegd had ik zonder hun hulp dit hele project nooit alleen kunnen realiseren. Ze waren onmisbaar gedurende het hele proces.
Ik hoop dat deze informatie iedereen helpt die gek genoeg is om een soortgelijk project aan te pakken — voel je vrij om het te delen waar je maar wilt!
Zima Campagne Hub
Meer om te lezen

Wat gebeurt er als twee AI-agenten vechten om één server?
Zero Noichi’s AI-cybersecurity-experiment gebruikte twee ZimaBoard 2-apparaten om aanvallers- en verdedigersagenten te simuleren, waarmee werd aangetoond hoe homelab-servers veilige AI, Docker, NAS en beveiligingstests...

Lokale AI op de ZimaCube 2 — PCIe-uitbreiding, Ollama en je homelab toekomstbestendig maken
De ZimaCube 2 wordt geleverd met 4× NVMe-slots, een PCIe-uitbreidingsslot en DDR5-RAM — klaar voor Ollama, RAG-pijplijnen en Docker direct uit de doos. Geen...

ZimaCube Home Lab Monitoring Gids: Van Uptime Kuma tot AI Agents
Houd je thuisserver in de gaten met Uptime Kuma, Pulse, Proxmox Data Center Manager of een AI-agent om de uptime, back-ups, virtuele machines, waarschuwingen...

