Hej allihopa,
Jag ville dela med mig av hur jag fick en pekskärmskiosk i helskärm att fungera på min ZimaBoard 2 ansluten till en 22" pekskärm via HDMI.
Eftersom ZimaOS saknar paketchef (apt finns inte), är tricket att göra allt inuti Docker-containrar.
Min setup
ZimaBoard 2 1664 (Intel N100, 16 GB RAM)
ZimaOS v1.5.4
22" pekskärm via HDMI + USB-C→USB-A pekskärmsingång

Tillvägagångssättet
ZimaOS är Buildroot-baserat — ingen apt, ingen Xorg, inget skrivbordsmiljö. Istället kör vi en Debian-container med Xorg modesetting-drivrutin + Chromium i kiosk-läge, med /dev/dri vidarebefordrat. En separat nginx:alpine-container serverar dashboard-filerna.
Steg 1 — Lägg till din användare i docker-gruppen
Öppna webbterminalen på http://your-zima-ip:7681 och kör:
bash
sudo usermod -aG docker DITT_ANVÄNDARNAMN
Anslut sedan om SSH för att ändringen ska träda i kraft.
Steg 2 — Skapa filerna
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"]
| Varför backports Mesa? Intel N100 (Alder Lake-N, PCI ID 0x46d4) stöds endast från Mesa 23.0+. Debian bookworm levererar 22.3. Backports erbjuder 25.x. |
/DATA/AppData/kiosk/xorg.conf:
text
Sektion "Enhet"
Identifierare "Intel"
Drivrutin "modesetting"
Alternativ "AccelMethod" "ingen"
EndSection
Sektion "Skärm"
Identifierare "Standard"
Enhet "Intel"
EndSection
Sektion "InputDevice"
Identifierare "Touchscreen"
Drivrutin "libinput"
Alternativ "Enhet" "/dev/input/event8"
EndSection
Sektion "ServerLayout"
Identifierare "Standard"
Skärm "Standard"
Inmatningsenhet "Touchscreen" "CorePointer"
EndSection
|
Hitta ditt touch-enhetens eventnummer med: 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;
}
Lägg dina dashboard HTML/CSS/JS-filer i /DATA/AppData/kiosk/dashboard/.

Steg 3 — Bygg och Kör
Bygg (notera: docker build behöver --config /tmp på ZimaOS):
bash
docker --config /tmp build -t kiosk:latest /DATA/AppData/kiosk
Dashboard webbserver:
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
Kioskdisplay:
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
Båda containrarna har --restart unless-stopped så de överlever omstarter automatiskt.
Touchskärmsklick-fix (viktigt!)
Xorg:s libinput mappar touch som pekare (mus) händelser. Chromium tillämpar sedan en liten rörelsetröskel för klick — även en 1px fingerförskjutning förhindrar att det utlöses. Om din dashboard använder onclick-hanterare, lägg till denna JS för att ersätta dem med pointerup + en 20px tröskel:
js
(funktion touchFix() {
const downs = {};
document.addEventListener('pointerdown', e => {
downs[e.pointerId] = { x: e.clientX, y: e.clientY };
}, { passive: true });
funktion isTap(e) {
const d = downs[e.pointerId];
returnera !d || (Math.abs(e.clientX - d.x) < 20 && Math.abs(e.clientY - d.y) < 20);
}
funktion run(fn) { försök { ny Function(fn)(); } fånga(ex) {} }
funktion patchButtons(root) {
root.querySelectorAll('button[onclick]').forEach(btn => {
const oc = btn.getAttribute('onclick');
btn.removeAttribute('onclick');
btn.addEventListener('pointerup', e => { e.stopPropagation(); om (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 => { om (isTap(e) && !e.target.closest('button')) run(oc); });
});
patchButtons(document.body);
});
ny MutationObserver(muts => muts.forEach(m =>
m.addedNodes.forEach(n => { om (n.nodeType === 1) patchButtons(n); })
)).observe(document.body, { childList: true, subtree: true });
})();
Lägg också till i din CSS för att dölja muspekaren på en pekskärm:
css
{ cursor: none !important; touch-action: manipulation; }

Felsökning
| Problem | Åtgärd |
| docker build misslyckas med okänd flagga | Använd docker --config /tmp build … |
| Svart skärm / Grundläggande utgångstest misslyckades | Använd Xorg modesetting, inte Wayland/cage |
| Mesa stöder inte N100 | Installera libgl1-mesa-dri från bookworm-backports |
| Pekskärmsinmatning upptäcks inte | Kontrollera händelsenummer med /proc/bus/input/devices, uppdatera xorg.conf |
| Instrumentpanelen visar ZimaOS-inloggning | Port 80 används av ZimaOS — använd en annan port (888 fungerar) |
Min alltid aktiva Home Assistant-lösning (Svara)
Jag byggde en energieffektiv home assistant-lösning som är tillgänglig dygnet runt utan att min huvuddator drar ström hela tiden. Hemligheten är en Zima som fungerar som den alltid aktiva hjärnan, medan min fulla PC sover i viloläge tills den verkligen behövs.
Huvud-PC:n
Här är vad som finns i den primära maskinen:
CPU: AMD Ryzen 9 9950X3D
Moderkort: ASUS ROG Crosshair X870E Glacial
RAM: Acer Predator Hermes RGB DDR5 96GB (2×48GB) 6000MHz CL28
Lagring: Crucial T710 4TB NVMe M.2 PCIe 5.0 Gen5
GPU (Spel): ASUS ROG Astral GeForce RTX 5080 16GB
GPU (AI): Intel Arc Pro B70 32GB (väntar på lansering)
PSU: Corsair RM1200x
Chassi: Thermaltake Tower 900
Zima-uppsättningen (Den alltid påslagna hubben)
Zima körs 24/7 och hanterar allt lättviktigt — hemassistentuppgifter, kameraflöden och grundläggande AI-frågor med Groq gratisnivå via molnet.
Anslutna kringutrustningar direkt till Zima:
Pisichen 22" pekskärmsmonitor via HDMI → miniDP-adapter + en USB-C-kabel för pekinmatning
Edifier G1000 II högtalare via extern USB-A till 3,5 mm ljudkort
DAMAO DGM20S mikrofon via USB-A
Lagring:
Seagate IronWolf Pro 20TB — ”svarta hålet” NAS-enhet
Seagate IronWolf Pro 1TB — huvud-NAS-enhet
Nätverk:
Zima ansluten till routern via Ethernet
Andra Ethernet-kabeln går direkt från Zima till PC:n för snabba lokala överföringar

Den smarta delen: Wake-on-LAN
Här är magin — när någon ställer en fråga som är för komplex för att Gemini ska hantera bra, skickar Zima ett Wake-on-LAN-paket för att väcka huvud-PC:n ur viloläge. När den är igång ansluter den till en lokal 70B parameter LLM som körs på Intel Arc Pro B70. När uppgiften är klar går PC:n tillbaka till viloläge.
Resultatet: en hemassistent som alltid är lyhörd, men den stora riggen vaknar bara när det verkligen är tungt arbete som ska göras. Elräkningarna hålls rimliga, och jag får fortfarande tillgång till en riktigt kapabel lokal modell när jag behöver den.
Stort tack till Claude Code och Perplexity — ärligt talat, utan deras hjälp hade jag aldrig kunnat sätta ihop hela det här projektet på egen hand. De var ovärderliga genom hela processen.
Jag hoppas att denna information hjälper alla som är galna nog att ge sig på ett liknande projekt — dela gärna vidare var du vill!
Zima Kampanjnav
Mer att läsa

Varför jag bytte ut rackservrar mot en ZimaCube 2 — En berättelse om homelab-utveckling
ZimaCube 2 ersätter bullriga rackservrar och begränsade mini-PC-lösningar med en tyst allt-i-ett homelab för Docker, ZFS-lagring, NVMe, säkerhetskopiering, självhosting och infrastrukturuppgifter dygnet runt.

Köra Docker, CI/CD och 10+ självhostade tjänster på ZimaCube 2
Det här community-spotlightet visar ZimaCube 2-pionjären Michael Luckenbills fullständiga självhostade infrastrukturtest. Med över 10 Docker-containrar, lokal GitHub Actions CI/CD, dubbla ZFS HDD/NVMe-lagringspooler, dubbla 2,5GbE-nätverk...

Vad händer när två AI-agenter slåss om en server?
Zero Noichis AI-säkerhetsexperiment använde två ZimaBoard 2-enheter för att simulera angripar- och försvaragenturer, vilket visade hur homelab-servrar kan stödja säker AI, Docker, NAS och...

