من نیاز به نمایش یک داشبورد با نظارت بر روی چندین صفحه در دفتر داشتم. چندین Raspberry Pi مدل B + قدیمی و یک Hypervisor با مقدار تقریباً نامحدودی از منابع وجود دارد.
ظاهرا Raspberry Pi Model B+ تصادفی کافی برای نگه داشتن مرورگر را ندارد که دائماً در حال اجرا باشد و گرافیک های زیادی را در آن رندر کند، به همین دلیل این اتفاق می افتد که صفحه تا حدی باگ است و اغلب از کار می افتد.
یک راه حل نسبتا ساده و ظریف وجود داشت که می خواهم آن را با شما به اشتراک بگذارم.
همانطور که می دانید همه رزبری ها دارای یک پردازنده ویدئویی نسبتاً قدرتمند هستند که برای رمزگشایی ویدیوهای سخت افزاری عالی است. بنابراین این ایده مطرح شد که یک مرورگر با داشبورد را در جای دیگری راه اندازی کنیم و یک استریم آماده با یک تصویر رندر شده برای رزبری ارسال کنیم.
به علاوه، این باید مدیریت سادهتری داشته باشد، زیرا در این حالت تمام پیکربندیها روی یک ماشین مجازی انجام میشود که بهروزرسانی و پشتیبانگیری آسانتر است.
زودتر گفته شود.
بخش سرور
آماده استفاده می کنیم
ما یک ماشین مجازی جدید مستقر می کنیم و اول از همه آن را روی آن نصب می کنیم
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
لطفاً از پیکربندی 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
حالا ما فایرفاکس را نصب می کنیم، آن را به عنوان یک سرویس سیستم اجرا می کنیم، بنابراین برای یک چیز یک فایل واحد برای آن می نویسیم:
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
می توانید هر صفحه ای را مشخص کنید تا با شروع مرورگر به طور خودکار باز شود.
در این مرحله کیوسک ما آماده است، اما اکنون باید تصویر را از طریق شبکه به سایر مانیتورها و دستگاه ها صادر کنیم. برای این کار از امکانات استفاده خواهیم کرد
برای این کار به دو چیز نیاز داریم:
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
از آنجایی که تصویر ما نیاز به به روز رسانی سریع ندارد، من نرخ تازه سازی را مشخص کردم: 1 فریم در ثانیه (پارامتر -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/
ما آدرس را از سرور خود ارسال می کنیم.
این همه است، یک عکس از سرور ما باید بلافاصله در صفحه متصل ظاهر شود. در صورت بروز هرگونه مشکل، استریم به صورت خودکار راه اندازی مجدد می شود و کلاینت ها دوباره به آن متصل می شوند.
به عنوان یک امتیاز، می توانید تصویر حاصل را به عنوان محافظ صفحه روی همه رایانه های موجود در دفتر نصب کنید. برای این شما نیاز خواهید داشت
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