안녕하세요 여러분,
HDMI로 연결된 22인치 터치 모니터에서 ZimaBoard 2를 사용해 전체 화면 터치스크린 키오스크를 실행하는 방법을 공유하고 싶었습니다.
ZimaOS에는 패키지 관리자가 없기 때문에(apt가 존재하지 않음) 모든 작업을 도커 컨테이너 내에서 수행하는 것이 핵심입니다.
내 설정
ZimaBoard 2 1664 (인텔 N100, 16GB RAM)
ZimaOS v1.5.4
HDMI + USB-C→USB-A 터치스크린 입력을 지원하는 22인치 터치 모니터

접근 방식
ZimaOS는 Buildroot 기반입니다 — apt, Xorg, 데스크탑 환경이 없습니다. 대신, Xorg modesetting 드라이버와 Chromium을 키오스크 모드로 실행하는 Debian 컨테이너를 사용하며 /dev/dri를 전달합니다. 별도의 nginx:alpine 컨테이너가 대시보드 파일을 제공합니다.
1단계 — 사용자를 도커 그룹에 추가
웹 터미널을 http://your-zima-ip:7681 에서 열고 다음을 실행하세요:
bash
sudo usermod -aG docker YOUR_USERNAME
변경 사항을 적용하려면 SSH를 다시 연결하세요.
2단계 — 파일 생성
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"]
| 왜 메사를 백포트하나요? 인텔 N100 (Alder Lake-N, PCI ID 0x46d4)은 메사 23.0 이상에서만 지원됩니다. Debian bookworm은 22.3을 제공합니다. 백포트는 25.x를 제공합니다. |
/DATA/AppData/kiosk/xorg.conf:
text
섹션 "장치"
식별자 "인텔"
드라이버 "modesetting"
옵션 "가속방법" "없음"
EndSection
섹션 "화면"
식별자 "기본"
장치 "인텔"
EndSection
섹션 "입력장치"
식별자 "터치스크린"
드라이버 "libinput"
옵션 "장치" "/dev/input/event8"
EndSection
섹션 "서버레이아웃"
식별자 "기본"
화면 "기본"
입력장치 "터치스크린" "코어포인터"
EndSection
|
터치 장치 이벤트 번호를 찾으려면 다음을 사용하세요: 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;
}
대시보드 HTML/CSS/JS 파일을 /DATA/AppData/kiosk/dashboard/에 넣으세요.

3단계 — 빌드 및 실행
빌드 (참고: ZimaOS에서는 docker build에 --config /tmp가 필요합니다):
bash
docker --config /tmp build -t kiosk:latest /DATA/AppData/kiosk
대시보드 웹 서버:
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
키오스크 디스플레이:
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
두 컨테이너 모두 --restart unless-stopped 옵션이 있어 재부팅 후 자동으로 실행됩니다.
터치스크린 클릭 수정 (중요!)
Xorg의 libinput은 터치를 포인터(마우스) 이벤트로 매핑합니다. Chromium은 클릭을 위해 아주 작은 이동 임계값을 적용하는데, 심지어 1px 손가락 이동도 클릭이 발생하지 않게 만듭니다. 대시보드에서 onclick 핸들러를 사용한다면, 이 JS를 추가하여 pointerup과 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 { 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 });
})();
터치스크린에서 마우스 커서를 숨기려면 CSS에 다음을 추가하세요:
css
{ cursor: none !important; touch-action: manipulation; }

문제 해결
| 문제 | 수정 |
| docker build가 알 수 없는 플래그로 실패함 | docker --config /tmp build … 사용 |
| 검은 화면 / 기본 출력 테스트 실패 | Wayland/cage 대신 Xorg 모드셋팅 사용 |
| Mesa는 N100을 지원하지 않음 | bookworm-backports에서 libgl1-mesa-dri 설치 |
| 터치 입력이 감지되지 않음 | 이벤트 번호를 /proc/bus/input/devices에서 확인하고 xorg.conf를 업데이트하세요 |
| 대시보드에 ZimaOS 로그인 화면 표시 | 포트 80은 ZimaOS가 사용 중이므로 다른 포트(888이 작동함)를 사용하세요 |
항상 켜져 있는 홈 어시스턴트 설정 (답글)
전력 효율이 뛰어난 홈 어시스턴트 설정을 구축했으며, 메인 컴퓨터가 24시간 내내 전기를 소모하지 않고도 24/7 사용할 수 있습니다. 비밀 무기는 항상 켜져 있는 두뇌 역할을 하는 Zima이며, 제 PC는 실제로 필요할 때까지 최대 절전 모드로 잠자고 있습니다.
메인 PC
주요 기기에 들어있는 구성은 다음과 같습니다:
CPU: AMD Ryzen 9 9950X3D
메인보드: ASUS ROG Crosshair X870E Glacial
램: Acer Predator Hermes RGB DDR5 96GB (2×48GB) 6000MHz CL28
스토리지: Crucial T710 4TB NVMe M.2 PCIe 5.0 Gen5
GPU (게임용): ASUS ROG Astral GeForce RTX 5080 16GB
GPU (AI): Intel Arc Pro B70 32GB (출시 대기 중)
파워서플라이: Corsair RM1200x
케이스: Thermaltake Tower 900
Zima 세트업 (항상 켜져 있는 허브)
Zima는 24시간 작동하며 가벼운 작업을 모두 처리합니다 — 홈 어시스턴트 업무, 카메라 피드, 그리고 클라우드를 통한 Groq 무료 티어를 이용한 기본 AI 쿼리 등입니다.
Zima에 직접 연결된 주변기기:
Pisichen 22인치 터치스크린 모니터, HDMI → miniDP 어댑터 + 터치 입력용 USB-C 케이블 1개
Edifier G1000 II 스피커, 외부 USB-A to 3.5mm 사운드카드 통해 연결
DAMAO DGM20S 마이크로폰 USB-A 연결
스토리지:
Seagate IronWolf Pro 20TB — '블랙홀' NAS 드라이브
Seagate IronWolf Pro 1TB — 메인 NAS 드라이브
네트워킹:
Zima가 이더넷을 통해 라우터에 연결되어 있습니다.
두 번째 이더넷 케이블이 Zima에서 PC로 직접 연결되어 빠른 로컬 전송을 지원합니다.

스마트한 부분: Wake-on-LAN
여기서 마법이 시작됩니다 — 누군가 Gemini가 잘 처리하기 어려운 복잡한 질문을 하면, Zima가 Wake-on-LAN 패킷을 보내 메인 PC를 절전 모드에서 깨웁니다. PC가 켜지면 Intel Arc Pro B70에서 실행되는 70B 파라미터 LLM에 연결됩니다. 작업이 끝나면 PC는 다시 잠자기 모드로 돌아갑니다.
결과는: 항상 반응하는 홈 어시스턴트, 하지만 실제로 무거운 작업이 있을 때만 대형 장비가 깨어납니다. 전기 요금은 합리적으로 유지되고, 필요할 때는 강력한 로컬 모델에 접근할 수 있습니다.
Claude Code와 Perplexity에게 큰 감사를 전합니다 — 솔직히 그들의 도움이 없었다면 이 전체 프로젝트를 혼자서 완성할 수 없었을 겁니다. 그들은 전 과정에서 정말 소중한 존재였습니다.
이 정보가 비슷한 프로젝트에 도전하는 미친 사람들에게 도움이 되길 바랍니다 — 어디서든 자유롭게 공유하세요!
지마 캠페인 허브
더 읽어보기

SjslTech가 ZimaBoard 2를 윈도우 11 데스크톱으로 바꾸는 방법
SjslTech가 ZimaBoard 2에 Windows 11을 설치하고 4K 비디오, 오피스, 다빈치 리졸브, 마인크래프트, 가벼운 게임 및 전력 소비를 테스트하는 모습을 확인하세요.

CYBERTECH 2099가 ZimaBoard 2를 개인 NAS 및 프라이빗 클라우드로 테스트하는 방법
CYBERTECH 2099는 ZimaBoard 2를 친근한 개인 NAS 및 프라이빗 클라우드로 테스트하며, 하드웨어, ZimaOS 설정, Plex 미디어 스트리밍, 저전력 작동, 그리고 퍼블릭 클라우드 서비스를 대체하는...

Zero Noichi가 32GB AMD MI50을 탑재한 ZimaBoard 2에서 로컬 AI를 실행하는 방법
Zero Noichi가 ZimaBoard 2와 리퍼비시 32GB AMD MI50을 결합하여 로컬 AI를 실행하고, 웹사이트를 생성하며, 문서를 요약하는 방법을 확인해 보세요.

