
كانت هناك حاجة لي لعرض لوحات المعلومات مع المراقبة على العديد من الشاشات في المكتب. هناك العديد من Raspberry Pi Model B + القديمة و Hypervisor مع عدد غير محدود من الموارد تقريبًا.
على ما يبدو ، لا يحتوي Raspberry Pi Model B + على ما يكفي من العشوائية للحفاظ على تشغيل المتصفح باستمرار ورسم عدد كبير من الرسومات فيه ، بسبب حدوث ذلك ، تكون الصفحة عربات التي تجرها الدواب جزئياً وغالبًا ما تتعطل.
كان هناك حل بسيط وأنيق ، أريد مشاركته معك.
كما تعلمون ، لدى كل Raspberry معالج فيديو قوي إلى حد ما ، وهو أمر رائع لفك تشفير الفيديو. لذلك ظهرت الفكرة لإطلاق متصفح مع لوحة معلومات في مكان آخر ، ونقل الدفق النهائي مع الصورة المقدمة إلى التوت.
بالإضافة إلى كل هذا ، كان من المفترض تبسيط الإدارة ، لأنه في هذه الحالة ، سيتم تنفيذ كل التهيئة على جهاز افتراضي واحد ، وهو أسهل في التحديث والنسخ الاحتياطي.
لم يقل قال من القيام به.
جانب الخادم
سوف نستخدم صورة السحاب الجاهزة لأوبونتو . دون الحاجة إلى التثبيت ، فإنه يحتوي على كل ما تحتاجه لنشر جهاز افتراضي بسرعة ، كما يساعدك دعم Cloud-Init على تهيئة شبكتك على الفور وإضافة مفاتيح ssh وتشغيلها بسرعة.
ننشر جهازًا افتراضيًا جديدًا وقبل كل شيء تثبيت Xorg و nodm و fluxbox عليه:
apt-get update apt-get install -y xserver-xorg nodm fluxbox sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
نحن نستخدم أيضًا تهيئة Xorg المرجو توفيرها لنا من قِبل دييغو أونغارو ، مضيفًا القرار الجديد 1920 × 1080 فقط ، نظرًا لأن جميع شاشاتنا ستستخدمه:
cat > /etc/X11/xorg.conf <<\EOT Section "Device" Identifier "device" Driver "vesa" EndSection Section "Screen" Identifier "screen" Device "device" Monitor "monitor" DefaultDepth 16 SubSection "Display" Modes "1920x1080" "1280x1024" "1024x768" "800x600" EndSubSection EndSection Section "Monitor" Identifier "monitor" HorizSync 20.0 - 50.0 VertRefresh 40.0 - 80.0 Option "DPMS" EndSection Section "ServerLayout" Identifier "layout" Screen "screen" EndSection EOT systemctl restart nodm
الآن تثبيت Firefox ، سنبدأ تشغيله كخدمة نظام ، لذلك في نفس الوقت سوف نكتب ملف وحدة لذلك:
apt-get install -y firefox xdotool cat > /etc/systemd/system/firefox.service <<\EOT [Unit] Description=Firefox After=network.target [Service] Restart=always User=ubuntu Environment="DISPLAY=:0" Environment="XAUTHORITY=/home/ubuntu/.Xauthority" ExecStart=/usr/bin/firefox -url 'http://example.org/mydashboard' ExecStartPost=/usr/bin/xdotool search --sync --onlyvisible --class "Firefox" windowactivate key F11 [Install] WantedBy=graphical.target EOT systemctl enable firefox systemctl start firefox
نحن بحاجة إلى Xdotool لتشغيل فايرفوكس مباشرة في وضع ملء الشاشة.
باستخدام المعلمة -url
، -url
تحديد أي صفحة بحيث يتم فتحها تلقائيًا عند بدء تشغيل المتصفح.
في هذه المرحلة ، أصبح كشكنا جاهزًا ، لكننا نحتاج الآن إلى تصدير الصورة عبر الشبكة إلى شاشات وأجهزة أخرى. للقيام بذلك ، سوف نستخدم إمكانيات Motion JPEG ، وهو تنسيق يستخدم غالبًا لدفق الفيديو من معظم كاميرات الويب.
للقيام بذلك ، نحتاج إلى شيئين: FFmpeg مع وحدة x11grab ، لالتقاط الصور من X و streamEye ، والتي ستوزعها على عملائنا:
apt-get install -y make gcc ffmpeg cd /tmp/ wget https://github.com/ccrisan/streameye/archive/master.tar.gz tar xvf master.tar.gz cd streameye-master/ make make install cat > /etc/systemd/system/streameye.service <<\EOT [Unit] Description=streamEye After=network.target [Service] Restart=always User=ubuntu Environment="DISPLAY=:0" Environment="XAUTHORITY=/home/ubuntu/.Xauthority" ExecStart=/bin/sh -c 'ffmpeg -f x11grab -s 1920x1080 -r 1 -i :0 -f mjpeg -q:v 5 - 2>/dev/null | streameye' [Install] WantedBy=graphical.target EOT systemctl enable streameye systemctl start streameye
نظرًا لأن صورتنا لا تتطلب تحديثًا سريعًا ، أشرت إلى معدل التحديث: 1 إطار في الثانية ( -r 1
المعلمة) وجودة الضغط: 5 ( -q:v 5
المعلمة)
الآن نحاول الانتقال إلى http: // your-vm: 8080 / ، ردًا على ذلك ، سترى لقطة شاشة محدثة باستمرار لسطح المكتب. ! ممتاز - كان هذا هو المطلوب.
جزء العميل
لا يزال الأمر أكثر بساطة هنا ، كما قلت ، سوف نستخدم Raspberry Pi Model B +.
بادئ ذي بدء ، قم بتثبيت Arch Linux ARM على ذلك ، ولهذا نتبع التعليمات على الموقع الرسمي.
سنحتاج أيضًا إلى تخصيص المزيد من الذاكرة لرقاقة الفيديو الخاصة بنا ، لذلك سنقوم بتحريرها في /boot/config.txt
gpu_mem=128
قم بتشغيل نظامنا الجديد وتذكر أن تهيئ لك حلقة مفاتيح pacman ، قم بتثبيت OMXPlayer :
pacman -Sy omxplayer
بشكل ملحوظ ، يمكن أن يعمل OMXPlayer بدون Xs ، ولهذا السبب كل ما علينا فعله هو كتابة ملف وحدة له وتشغيله:
cat > /etc/systemd/system/omxplayer.service <<\EOT [Unit] Description=OMXPlayer Wants=network-online.target After=network-online.target [Service] Type=simple Restart=always ExecStart=/usr/bin/omxplayer -r --live -b http://your-vm:8080/ --aspect-mode full [Install] WantedBy=multi-user.target EOT systemctl enable omxplayer systemctl start omxplayer
كمعلمة -b http://your-vm:8080/
نقوم بتمرير عنوان URL من خادمنا.
هذا كل شيء ، يجب أن تظهر صورة من خادمنا على الفور على الشاشة المتصلة. في حالة حدوث أي مشاكل ، سيتم إعادة تشغيل الدفق تلقائيًا ، وسيعيد العملاء الاتصال به.
على سبيل المكافأة ، يمكنك تعيين الصورة الناتجة كحافظة شاشة لجميع أجهزة الكمبيوتر في المكتب. للقيام بذلك ، ستحتاج إلى MPV و XScreenSaver :
mode: one selected: 0 programs: \ "Monitoring Screen" mpv --really-quiet --no-audio --fs \ --loop=inf --no-stop-screensaver \ --wid=$XSCREENSAVER_WINDOW \ http://your-vm:8080/ \n\ maze -root \n\ electricsheep --root 1 \n\
الآن سيكون زملائك سعداء جدا :)