كنت بحاجة لعرض لوحة القيادة مع المراقبة على عدة شاشات في المكتب. هناك العديد من طراز Raspberry Pi Model B + القديم ومشرف به قدر غير محدود تقريبًا من الموارد.
من الواضح أن Raspberry Pi Model B + لا يحتوي على ما يكفي من العشوائية للحفاظ على تشغيل المتصفح باستمرار وتقديم الكثير من الرسومات فيه ، مما يحدث أن الصفحة بها أخطاء جزئية وغالبًا ما تتعطل.
كان هناك حل بسيط وأنيق إلى حد ما ، أريد مشاركته معك.
كما تعلم ، تحتوي جميع Raspberries على معالج فيديو قوي إلى حد ما ، وهو أمر رائع لفك تشفير فيديو الأجهزة. لذلك جاءت فكرة إطلاق متصفح بلوحة معلومات في مكان آخر ، ونقل دفق جاهز مع صورة معروضة إلى التوت.
بالإضافة إلى ذلك ، يجب أن يكون لهذا الأمر إدارة مبسطة ، لأنه في هذه الحالة سيتم تنفيذ جميع التكوينات على جهاز افتراضي واحد ، مما يسهل التحديث والنسخ الاحتياطي.
لا قال في وقت أقرب مما فعله.
جزء الخادم
نستخدم جاهزة
ننشر جهازًا افتراضيًا جديدًا ونقوم أولاً بتثبيته عليه
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
سنستخدم أيضًا config لـ Xorg ، بلطف
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 لتشغيل Firefox فورًا في وضع ملء الشاشة.
باستخدام المعلمة -url
يمكنك تحديد أي صفحة بحيث يتم فتحها تلقائيًا عند بدء تشغيل المتصفح.
في هذه المرحلة ، يكون الكشك الخاص بنا جاهزًا ، لكننا الآن بحاجة إلى تصدير الصورة عبر الشبكة إلى أجهزة عرض وأجهزة أخرى. للقيام بذلك ، سوف نستخدم الاحتمالات
لهذا نحتاج شيئين:
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 -i :0 -r 1 -f mjpeg -q:v 5 - 2>/dev/null | streameye'
[Install]
WantedBy=graphical.target
EOT
systemctl enable streameye
systemctl start streameye
نظرًا لأن صورتنا لا تتطلب تحديثًا سريعًا ، فقد حددت معدل التحديث: إطار واحد في الثانية (معلمة -r 1
) وجودة الضغط: 5 (معلمة -q:v 5
)
الآن دعونا نحاول الذهاب إلى
جزء العميل
لا يزال الأمر أسهل هنا ، كما قلت ، سنستخدم Raspberry Pi Model B +.
بادئ ذي بدء ، دعنا نثبته
سنحتاج أيضًا إلى تخصيص المزيد من الذاكرة لشريحة الفيديو الخاصة بنا ، لذلك سنقوم بالتحرير فيها /boot/config.txt
gpu_mem=128
لنقم بتشغيل نظامنا الجديد ولا تنسَ تهيئة حلقة مفاتيح pacman وتثبيتها
pacman -Sy omxplayer
بشكل ملحوظ ، يمكن لـ OMXPlayer العمل بدون x ، لذلك كل ما نحتاجه هو كتابة ملف وحدة له وتشغيله:
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 من خادمنا.
هذا كل شيء ، يجب أن تظهر صورة من خادمنا على الفور على الشاشة المتصلة. في حالة حدوث أي مشاكل ، ستتم إعادة تشغيل البث تلقائيًا وسيعيد العملاء الاتصال به.
على سبيل المكافأة ، يمكنك تثبيت الصورة الناتجة كشاشة توقف على جميع أجهزة الكمبيوتر في المكتب. لهذا سوف تحتاج
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
الآن زملائك سيكونون سعداء جدا 🙂
المصدر: www.habr.com