مرحباً جميعاً،
أردت أن أشارك كيف شغّلت كشك شاشة لمس بملء الشاشة على ZimaBoard 2 الخاص بي المتصل بشاشة لمس 22" عبر HDMI.
بما أن ZimaOS لا يحتوي على مدير حزم (apt غير موجود)، الحيلة هي القيام بكل شيء داخل حاويات Docker.
إعدادي
ZimaBoard 2 1664 (إنتل N100، 16 جيجابايت رام)
ZimaOS الإصدار 1.5.4
شاشة لمس 22" عبر HDMI + إدخال شاشة لمس USB-C→USB-A

النهج
ZimaOS مبني على Buildroot — لا apt، لا Xorg، لا بيئة سطح مكتب. بدلاً من ذلك، نشغل حاوية Debian مع سائق Xorg modesetting + Chromium في وضع الكشك، مع تمرير /dev/dri. حاوية nginx:alpine منفصلة تخدم ملفات لوحة التحكم.
الخطوة 1 — أضف المستخدم الخاص بك إلى مجموعة docker
افتح الطرفية على الويب عبر 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"]
| لماذا تحديثات Mesa؟ معالج Intel N100 (Alder Lake-N، معرف PCI 0x46d4) مدعوم فقط من Mesa 23.0 فما فوق. توزيعة Debian bookworm تأتي مع 22.3. التحديثات توفر 25.x. |
/DATA/AppData/kiosk/xorg.conf:
text
القسم "الجهاز"
المعرف "إنتل"
السائق "modesetting"
الخيار "طريقة التسريع" "لا شيء"
EndSection
القسم "الشاشة"
المعرف "الافتراضي"
الجهاز "إنتل"
EndSection
القسم "جهاز الإدخال"
المعرف "شاشة اللمس"
السائق "libinput"
الخيار "الجهاز" "/dev/input/event8"
EndSection
القسم "تخطيط الخادم"
المعرف "الافتراضي"
الشاشة "الافتراضية"
جهاز الإدخال "شاشة اللمس" "CorePointer"
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 — البناء والتشغيل
بناء (ملاحظة: يحتاج docker build إلى --config /tmp على ZimaOS):
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 لذا تبقى تعمل تلقائيًا بعد إعادة التشغيل.
تصحيح نقر شاشة اللمس (مهم!)
تقوم مكتبة libinput الخاصة بـ Xorg بتحويل اللمس إلى أحداث مؤشر (ماوس). ثم يطبق Chromium عتبة حركة صغيرة للنقر — حتى تحريك الإصبع بمقدار 1px يمنع النقر من التنفيذ. إذا كان لوحتك تستخدم معالجات onclick، أضف هذا الجافا سكريبت لاستبدالها بـ 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 بسبب علم غير معروف | استخدم docker --config /tmp build … |
| شاشة سوداء / فشل اختبار الإخراج الأساسي | استخدم وضع Xorg modesetting، وليس Wayland/cage |
| Mesa لا تدعم N100 | قم بتثبيت libgl1-mesa-dri من bookworm-backports |
| لم يتم اكتشاف إدخال اللمس | تحقق من رقم الحدث باستخدام /proc/bus/input/devices، حدّث xorg.conf |
| لوحة التحكم تعرض تسجيل دخول ZimaOS | المنفذ 80 محجوز من قبل ZimaOS — استخدم منفذًا مختلفًا (888 يعمل) |
إعداد المساعد المنزلي الدائم الخاص بي (رد)
قمت ببناء إعداد مساعد منزلي موفر للطاقة متاح على مدار الساعة دون أن يستهلك جهازي الرئيسي الكهرباء طوال الوقت. السلاح السري هو Zima الذي يعمل كدماغ دائم التشغيل، بينما يظل جهازي الكامل في وضع السبات حتى الحاجة إليه.
الكمبيوتر الرئيسي
إليك ما بداخل الجهاز الرئيسي:
المعالج: 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
بطاقة الرسومات (الألعاب): ASUS ROG Astral GeForce RTX 5080 16GB
بطاقة الرسومات (الذكاء الاصطناعي): Intel Arc Pro B70 32GB (بانتظار الإصدار)
مزود الطاقة: Corsair RM1200x
الصندوق: Thermaltake Tower 900
إعداد Zima (المركز الدائم التشغيل)
يعمل Zima على مدار الساعة ويتولى كل المهام الخفيفة — مهام المساعد المنزلي، بث الكاميرات، والاستفسارات الأساسية للذكاء الاصطناعي باستخدام Groq الطبقة المجانية عبر السحابة.
الأجهزة الطرفية المتصلة مباشرة بـ Zima:
شاشة لمس Pisichen 22" عبر HDMI → محول miniDP + كابل USB-C واحد لإدخال اللمس
مكبرات صوت Edifier G1000 II عبر بطاقة صوت خارجية USB-A إلى 3.5 مم
ميكروفون DAMAO DGM20S عبر USB-A
التخزين:
Seagate IronWolf Pro 20TB — قرص NAS "الثقب الأسود"
Seagate IronWolf Pro 1TB — القرص الرئيسي لنظام NAS
الشبكات:
Zima متصل بالموجه عبر إيثرنت
كابل إيثرنت ثاني يمتد مباشرة من Zima إلى الكمبيوتر لنقل البيانات بسرعة محلية

الجزء الذكي: Wake-on-LAN
إليك السحر — عندما يطرح شخص ما سؤالاً معقدًا جدًا بحيث لا يستطيع Gemini التعامل معه جيدًا، يقوم Zima بإرسال حزمة Wake-on-LAN لإيقاظ الكمبيوتر الرئيسي من وضع السبات. بمجرد استيقاظه، يتصل بـ نموذج LLM محلي بمعاملات 70 مليار يعمل على Intel Arc Pro B70. بعد الانتهاء من المهمة، يعود الكمبيوتر إلى النوم.
النتيجة: مساعد منزلي دائم الاستجابة، لكن الجهاز الكبير يستيقظ فقط عندما يكون هناك عمل ثقيل فعلي للقيام به. فواتير الكهرباء تبقى معقولة، وما زلت أحصل على وصول إلى نموذج محلي قوي عندما أحتاجه.
تحية كبيرة لـ Claude Code و Perplexity — بصراحة، بدون مساعدتهم لما تمكنت من إنجاز هذا المشروع بأكمله بنفسي. لقد كانوا لا يقدرون بثمن طوال العملية بأكملها.
آمل أن تساعد هذه المعلومات أي شخص مجنون بما يكفي للقيام بمشروع مشابه — لا تتردد في مشاركتها أينما شئت!
مركز حملة Zima
المزيد للقراءة

ماذا يحدث عندما يتقاتل وكيلان ذكاء اصطناعي على خادم واحد؟
استخدمت تجربة الأمن السيبراني بالذكاء الاصطناعي لـ Zero Noichi جهازين من ZimaBoard 2 لمحاكاة وكلاء المهاجم والمدافع، مما أظهر كيف يمكن لخوادم المختبرات المنزلية...

الذكاء الاصطناعي المحلي على ZimaCube 2 — توسيع PCIe، أولاما، وتأمين مستقبل مختبرك المنزلي
يأتي ZimaCube 2 مزودًا بأربعة فتحات NVMe، وفتحة توسعة PCIe، وذاكرة DDR5 — جاهز لتشغيل Ollama، وأنابيب RAG، وDocker مباشرةً من الصندوق. لا حاجة...

دليل مراقبة مختبر المنزل ZimaCube: من Uptime Kuma إلى وكلاء الذكاء الاصطناعي
راقب خادم منزلك باستخدام Uptime Kuma أو Pulse أو Proxmox Data Center Manager أو وكيل ذكاء اصطناعي لتتبع وقت التشغيل، والنسخ الاحتياطية، والآلات الافتراضية،...

