Cześć wszystkim,
Chciałem podzielić się, jak uruchomiłem kiosk na pełnym ekranie z ekranem dotykowym na moim ZimaBoard 2 podłączonym do 22-calowego monitora dotykowego przez HDMI.
Ponieważ ZimaOS nie ma menedżera pakietów (apt nie istnieje), trik polega na robieniu wszystkiego wewnątrz kontenerów Docker.
Moja konfiguracja
ZimaBoard 2 1664 (Intel N100, 16 GB RAM)
ZimaOS v1.5.4
22-calowy monitor dotykowy przez HDMI + USB-C→USB-A wejście ekranu dotykowego

Podejście
ZimaOS jest oparty na Buildroot — bez apt, bez Xorg, bez środowiska graficznego. Zamiast tego uruchamiamy kontener Debiana z Xorg i sterownikiem modesetting oraz Chromium w trybie kiosku, z przekazaniem /dev/dri. Osobny kontener nginx:alpine serwuje pliki dashboardu.
Krok 1 — Dodaj swojego użytkownika do grupy docker
Otwórz terminal webowy pod adresem http://your-zima-ip:7681 i uruchom:
bash
sudo usermod -aG docker TWOJA_NAZWA_UŻYTKOWNIKA
Następnie ponownie połącz się przez SSH, aby zmiany zaczęły działać.
Krok 2 — Utwórz pliki
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"]
| Dlaczego backporty Mesa? Intel N100 (Alder Lake-N, PCI ID 0x46d4) jest obsługiwany dopiero od Mesa 23.0+. Debian bookworm zawiera wersję 22.3. Backporty dostarczają 25.x. |
/DATA/AppData/kiosk/xorg.conf:
text
Sekcja "Urządzenie"
Identyfikator "Intel"
Sterownik "modesetting"
Opcja "MetodaPrzyspieszenia" "brak"
EndSection
Sekcja "Ekran"
Identyfikator "Domyślny"
Urządzenie "Intel"
EndSection
Sekcja "UrządzenieWejściowe"
Identyfikator "Ekran dotykowy"
Sterownik "libinput"
Opcja "Urządzenie" "/dev/input/event8"
EndSection
Sekcja "UkładSerwera"
Identyfikator "Domyślny"
Ekran "Domyślny"
Urządzenie wejściowe "Ekran dotykowy" "CorePointer"
EndSection
|
Znajdź numer zdarzenia swojego urządzenia dotykowego za pomocą: 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;
}
Umieść pliki HTML/CSS/JS pulpitu w /DATA/AppData/kiosk/dashboard/.

Krok 3 — Buduj i uruchom
Buduj (uwaga: docker build wymaga --config /tmp na ZimaOS):
bash
docker --config /tmp build -t kiosk:latest /DATA/AppData/kiosk
Serwer WWW pulpitu:
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
Wyświetlacz kiosku:
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
Oba kontenery mają --restart unless-stopped, więc automatycznie przetrwają ponowne uruchomienia.
Poprawka kliknięcia na ekranie dotykowym (ważne!)
Libinput Xorg mapuje dotyk jako zdarzenia wskaźnika (myszy). Chromium stosuje wtedy minimalny próg ruchu dla kliknięcia — nawet 1px przesunięcie palca uniemożliwia jego wywołanie. Jeśli Twój pulpit używa obsługi onclick, dodaj ten JS, aby zastąpić je pointerup + próg 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);
}
function run(fn) { try { nowa 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);
});
nowy MutationObserver(muts => muts.forEach(m =>
m.addedNodes.forEach(n => { if (n.nodeType === 1) patchButtons(n); })
)).observe(document.body, { childList: true, subtree: true });
})();
Dodaj także do swojego CSS, aby ukryć kursor myszy na ekranie dotykowym:
css
{ cursor: none !important; touch-action: manipulation; }

Rozwiązywanie problemów
| Problem | Naprawa |
| docker build kończy się nieznaną flagą | Użyj docker --config /tmp build … |
| Czarny ekran / podstawowy test wyjścia nie powiódł się | Użyj Xorg modesetting, nie Wayland/cage |
| Mesa nie obsługuje N100 | Zainstaluj libgl1-mesa-dri z bookworm-backports |
| Nie wykryto dotyku | Sprawdź numer zdarzenia za pomocą /proc/bus/input/devices, zaktualizuj xorg.conf |
| Panel pokazuje logowanie do ZimaOS | Port 80 jest zajęty przez ZimaOS — użyj innego portu (działa 888) |
Mój zawsze aktywny system Home Assistant (Odpowiedź)
Zbudowałem energooszczędny system asystenta domowego, który działa 24/7, bez konieczności ciągłego zużywania prądu przez mój główny komputer. Sekretną bronią jest Zima, która działa jako zawsze aktywny mózg, podczas gdy mój pełny PC śpi w hibernacji, dopóki nie jest naprawdę potrzebny.
Główny PC
Oto, co znajduje się w głównym komputerze:
Procesor: AMD Ryzen 9 9950X3D
Płyta główna: ASUS ROG Crosshair X870E Glacial
RAM: Acer Predator Hermes RGB DDR5 96GB (2×48GB) 6000MHz CL28
Pamięć masowa: 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 (w oczekiwaniu na premierę)
Zasilacz: Corsair RM1200x
Obudowa: Thermaltake Tower 900
Konfiguracja Zimy (Zawsze Włączony Hub)
Zima działa 24/7 i obsługuje wszystko, co lekkie — zadania asystenta domowego, strumienie z kamer oraz podstawowe zapytania AI za pomocą bezpłatnego poziomu Groq w chmurze.
Podłączone peryferia bezpośrednio do Zimy:
Monitor dotykowy Pisichen 22" przez adapter HDMI → miniDP + jeden kabel USB-C do obsługi dotyku
Głośniki Edifier G1000 II podłączone przez zewnętrzną kartę dźwiękową USB-A na 3,5 mm
Mikrofon DAMAO DGM20S przez USB-A
Pamięć masowa:
Seagate IronWolf Pro 20TB — dysk NAS „czarna dziura”
Seagate IronWolf Pro 1TB — główny dysk NAS
Sieć:
Zima podłączona do routera przez Ethernet
Drugi kabel Ethernet biegnie bezpośrednio od Zimy do komputera dla szybkich lokalnych transferów

Inteligentna część: Wake-on-LAN
Oto magia — gdy ktoś zada pytanie zbyt skomplikowane dla Gemini, Zima wysyła pakiet Wake-on-LAN, aby wybudzić główny komputer ze stanu hibernacji. Gdy już jest aktywny, łączy się z lokalnym modelem LLM o 70 miliardach parametrów działającym na Intel Arc Pro B70. Po wykonaniu zadania komputer wraca do uśpienia.
Efekt: asystent domowy, który zawsze reaguje, ale duża maszyna budzi się tylko wtedy, gdy trzeba wykonać naprawdę ciężką pracę. Rachunki za prąd pozostają rozsądne, a ja wciąż mam dostęp do naprawdę wydajnego lokalnego modelu, gdy go potrzebuję.
Wielkie podziękowania dla Claude Code i Perplexity — szczerze, bez ich pomocy nigdy nie udałoby mi się samodzielnie zrealizować całego tego projektu. Byli nieocenieni przez cały czas.
Mam nadzieję, że te informacje pomogą każdemu, kto jest na tyle szalony, by podjąć się podobnego projektu — śmiało dzielcie się nimi gdzie tylko chcecie!
Centrum Kampanii Zima
Więcej do przeczytania

Jak SjslTech przekształca ZimaBoard 2 w komputer stacjonarny z Windows 11
Zobacz, jak SjslTech instaluje Windows 11 na ZimaBoard 2 i testuje wideo 4K, Office, DaVinci Resolve, Minecraft, lekkie gry oraz zużycie energii.

Jak CYBERTECH 2099 testuje ZimaBoard 2 jako osobisty NAS i prywatną chmurę
CYBERTECH 2099 testuje ZimaBoard 2 jako przystępny osobisty NAS i prywatną chmurę, obejmując sprzęt, konfigurację ZimaOS, strumieniowanie mediów Plex, niskie zużycie energii oraz granice...

Jak Zero Noichi uruchamia lokalną sztuczną inteligencję na ZimaBoard 2 z 32GB AMD MI50
Zobacz, jak Zero Noichi łączy ZimaBoard 2 z odnowioną kartą AMD MI50 32GB, aby uruchomić lokalną sztuczną inteligencję, wygenerować stronę internetową i podsumować dokumenty.

