Ekranni tarmoq orqali bir nechta qurilmalarga uzatish

Ekranni tarmoq orqali bir nechta qurilmalarga uzatish

Menga ofisdagi bir nechta ekranlarda monitoring bilan asboblar panelini ko'rsatish kerak edi. Bir nechta eski Raspberry Pi Model B + va deyarli cheksiz miqdordagi resurslarga ega gipervisor mavjud.

Ko'rinishidan, Raspberry Pi Model B+ brauzerning doimiy ishlashi va undagi ko'plab grafiklarni ko'rsatishi uchun etarli tasodifiylikka ega emas, buning natijasida sahifa qisman noto'g'ri va tez-tez ishdan chiqadi.

Men siz bilan baham ko'rmoqchi bo'lgan juda oddiy va oqlangan yechim bor edi.

Ma'lumki, barcha Raspberries juda kuchli video protsessorga ega, bu apparatli video dekodlash uchun juda yaxshi. Shunday qilib, boshqa joyda asboblar paneli bilan brauzerni ishga tushirish va renderlangan rasm bilan tayyor oqimni malinaga o'tkazish g'oyasi paydo bo'ldi.

Bundan tashqari, bu soddalashtirilgan boshqaruvga ega bo'lishi kerak, chunki bu holda barcha konfiguratsiyalar bitta virtual mashinada amalga oshiriladi, uni yangilash va zaxiralash osonroq bo'ladi.

Aytilgan gap otilgan o'q.

Server qismi

Biz tayyor holda foydalanamiz Ubuntu uchun bulutli tasvir. O'rnatishni talab qilmasdan, u virtual mashinani tezda joylashtirish uchun kerak bo'lgan hamma narsani o'z ichiga oladi va CloudInit-ni qo'llab-quvvatlash tarmoqni bir zumda sozlash, ssh kalitlarini qo'shish va uni tezda ishga tushirishga yordam beradi.

Biz yangi virtual mashinani joylashtiramiz va birinchi navbatda uni o'rnatamiz Xorg, nom ΠΈ oqim qutisi:

apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm

Xorg uchun konfiguratsiyadan ham foydalanamiz, iltimos berilgan biz Diego Ongaro, faqat yangi qaror qo'shib 1920 Γ— 1080, chunki barcha monitorlarimiz undan foydalanadi:

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

Endi biz Firefox-ni o'rnatamiz, uni tizim xizmati sifatida ishga tushiramiz, shuning uchun bir narsa uchun biz unga birlik faylini yozamiz:

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

Firefox-ni darhol to'liq ekran rejimida ishga tushirish uchun bizga Xdotool kerak.
Parametrdan foydalanish -url brauzer ishga tushganda avtomatik ravishda ochiladigan har qanday sahifani belgilashingiz mumkin.

Ushbu bosqichda bizning kioskimiz tayyor, ammo endi biz tasvirni tarmoq orqali boshqa monitor va qurilmalarga eksport qilishimiz kerak. Buning uchun biz imkoniyatlardan foydalanamiz Harakat JPEG, ko'pchilik veb-kameralardan video oqimlash uchun ko'proq foydalaniladigan format.

Buning uchun bizga ikkita narsa kerak: ffmpeg modul bilan x11grab, X-dan suratga olish uchun va streamEye, uni mijozlarimizga tarqatadi:

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

Bizning rasmimiz tez yangilanishni talab qilmagani uchun men yangilanish tezligini belgilab qo'ydim: soniyasiga 1 kadr (parametr -r 1) va siqish sifati: 5 (parametr -q:v 5)

Endi borishga harakat qilaylik http://your-vm:8080/, bunga javoban siz ish stolining doimiy yangilanib turadigan skrinshotini ko'rasiz. Ajoyib! - nima kerak edi.

Mijoz tomoni

Bu erda hali ham osonroq, aytganimdek, biz Raspberry Pi Model B + dan foydalanamiz.

Avvalo, uni o'rnatamiz ArchLinux ARM, buning uchun biz kuzatib boramiz ko'rsatmalar rasmiy veb-saytida.

Shuningdek, biz video chipimiz uchun ko'proq xotira ajratishimiz kerak, buning uchun biz tahrir qilamiz /boot/config.txt

gpu_mem=128

Keling, yangi tizimimizni ishga tushiramiz va pacman kalitini ishga tushirishni, o'rnatishni unutmang OMXPlayer:

pacman -Sy omxplayer

Shunisi e'tiborga loyiqki, OMXPlayer X holda ishlay oladi, shuning uchun bizga kerak bo'lgan yagona narsa uning uchun birlik faylini yozish va ishga tushirish:

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

Parametr sifatida -b http://your-vm:8080/ biz urlni serverimizdan uzatmoqdamiz.

Hammasi shu, bizning serverimizdagi rasm darhol ulangan ekranda paydo bo'lishi kerak. Har qanday muammo yuzaga kelsa, oqim avtomatik ravishda qayta ishga tushiriladi va mijozlar unga qayta ulanadi.

Bonus sifatida siz olingan rasmni ofisdagi barcha kompyuterlarga ekran pardasi sifatida o'rnatishingiz mumkin. Buning uchun sizga kerak bo'ladi 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

Endi sizning hamkasblaringiz juda xursand bo'lishadi πŸ™‚

Manba: www.habr.com

a Izoh qo'shish