مرحباً جميعاً،
أردت أن أشارك كيف شغلت كشك شاشة لمس بملء الشاشة على ZimaBoard 2 الخاص بي المتصل بشاشة لمس 22" عبر HDMI.
بما أن ZimaOS لا يحتوي على مدير حزم (apt غير موجود)، الحيلة هي القيام بكل شيء داخل حاويات Docker.
إعدادي
ZimaBoard 2 1664 (Intel 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:
نص
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"]
| لماذا نستخدم backports لـ Mesa؟ معالج Intel N100 (Alder Lake-N، معرف PCI 0x46d4) مدعوم فقط من Mesa 23.0+. توزيعة Debian bookworm تأتي مع 22.3. توفر backports إصدار 25.x. |
/DATA/AppData/kiosk/xorg.conf:
نص
القسم "الجهاز"
المعرف "إنتل"
السائق "modesetting"
الخيار "طريقة التسريع" "لا شيء"
EndSection
القسم "الشاشة"
المعرف "الافتراضي"
الجهاز "إنتل"
EndSection
القسم "جهاز الإدخال"
المعرف "شاشة اللمس"
السائق "libinput"
الخيار "الجهاز" "/dev/input/event8"
EndSection
القسم "تخطيط الخادم"
المعرف "الافتراضي"
الشاشة "الافتراضية"
جهاز الإدخال "شاشة لمس" "المؤشر الأساسي"
EndSection
|
ابحث عن رقم حدث جهاز اللمس الخاص بك باستخدام: bash cat /proc/bus/input/devices | grep -A3 -i touch |
/DATA/AppData/kiosk/entrypoint.sh:
نص
#!/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:
نص
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
(دالة touchFix() {
ثابت downs = {};
document.addEventListener('pointerdown', e => {
downs[e.pointerId] = { x: e.clientX, y: e.clientY };
}, { passive: true });
دالة isTap(e) {
ثابت d = downs[e.pointerId];
إرجاع !d || (Math.abs(e.clientX - d.x) < 20 && Math.abs(e.clientY - d.y) < 20);
}
دالة run(fn) { حاول { دالة جديدة(fn)(); } التقاط(ex) {} }
دالة patchButtons(root) {
root.querySelectorAll('button[onclick]').forEach(btn => {
ثابت oc = btn.getAttribute('onclick');
btn.removeAttribute('onclick');
btn.addEventListener('pointerup', e => { e.stopPropagation(); إذا (isTap(e)) run(oc); });
});
}
window.addEventListener('load', () => {
document.querySelectorAll('.widget[onclick]').forEach(el => {
ثابت oc = el.getAttribute('onclick');
el.removeAttribute('onclick');
el.addEventListener('pointerup', e => { إذا (isTap(e) && !e.target.closest('button')) run(oc); });
});
patchButtons(document.body);
});
مراقب التغييرات الجديد MutationObserver(muts => muts.forEach(m =>
m.addedNodes.forEach(n => { إذا (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 لإيقاظ الكمبيوتر الرئيسي من وضع السكون. بمجرد استيقاظه، يتصل بـ نموذج لغوي كبير 70B معلمات يعمل محليًا على Intel Arc Pro B70. بعد الانتهاء من المهمة، يعود الكمبيوتر إلى النوم.
النتيجة: مساعد منزلي دائم الاستجابة، لكن الجهاز الكبير يستيقظ فقط عندما يكون هناك عمل ثقيل فعلي للقيام به. فواتير الكهرباء تبقى معقولة، وما زلت أحصل على وصول إلى نموذج محلي قوي عندما أحتاجه.
تحية كبيرة لـ Claude Code و Perplexity — بصراحة، بدون مساعدتهما لما كنت قادرًا على إنجاز هذا المشروع بأكمله بمفردي. لقد كانا لا يقدران بثمن طوال العملية بأكملها.
آمل أن تساعد هذه المعلومات أي شخص مجنون بما يكفي لخوض مشروع مماثل — لا تتردد في مشاركتها أينما شئت!
مركز حملة Zima
المزيد للقراءة

كيف تحوّل SjslTech جهاز ZimaBoard 2 إلى سطح مكتب بنظام ويندوز 11
شاهد SjslTech وهو يثبت ويندوز 11 على ZimaBoard 2 ويختبر فيديو 4K، أوفيس، DaVinci Resolve، ماينكرافت، الألعاب الخفيفة، واستهلاك الطاقة.

كيف تختبر CYBERTECH 2099 جهاز ZimaBoard 2 كخادم تخزين شخصي وسحابة خاصة
تختبر CYBERTECH 2099 جهاز ZimaBoard 2 كنظام تخزين شخصي NAS سهل الاستخدام وسحابة خاصة، مع تغطية الأجهزة، إعداد ZimaOS، بث الوسائط عبر Plex، التشغيل...

كيف يشغّل Zero Noichi الذكاء الاصطناعي المحلي على ZimaBoard 2 باستخدام AMD MI50 بسعة 32 جيجابايت
شاهد كيف يدمج Zero Noichi بين ZimaBoard 2 وبطاقة AMD MI50 مجددة بسعة 32 جيجابايت لتشغيل الذكاء الاصطناعي محليًا، وإنشاء موقع إلكتروني، وتلخيص المستندات.

