Ekranı şəbəkə üzərindən birdən çox cihaza yayımlayın

Ekranı şəbəkə üzərindən birdən çox cihaza yayımlayın

Ofisdə bir neçə ekranda monitorinqi olan tablosunu nümayiş etdirməyə ehtiyacım var idi. Bir neçə köhnə Raspberry Pi Model B + və demək olar ki, qeyri-məhdud resurslu hipervizor var.

Göründüyü kimi, Raspberry Pi Model B+ brauzerin daim işləməsini və çoxlu qrafika göstərməsini təmin etmək üçün kifayət qədər təsadüfiliyə malik deyil, buna görə də səhifə qismən səhv olur və tez-tez çökür.

Kifayət qədər sadə və zərif bir həll var idi, onu sizinlə bölüşmək istəyirəm.

Bildiyiniz kimi, bütün Raspberries kifayət qədər güclü video prosessoruna malikdir, bu, videonun dekodlanması üçün əladır. Beləliklə, başqa bir yerdə tablosuna malik brauzeri işə salmaq və göstərilən şəkil ilə hazır axını moruqa köçürmək fikri ortaya çıxdı.

Üstəlik, bu idarəetməni sadələşdirməlidir, çünki bu halda bütün konfiqurasiya yeniləmək və ehtiyat nüsxəsini çıxarmaq daha asan olan bir virtual maşında həyata keçiriləcəkdir.

Daha tez deyildi.

Server hissəsi

Hazır istifadə edirik Ubuntu üçün bulud şəkli. Heç bir quraşdırma tələb etmir, o, virtual maşını tez bir zamanda yerləşdirmək üçün lazım olan hər şeyi ehtiva edir və CloudInit dəstəyi dərhal şəbəkə qurmağa, ssh düymələrini əlavə etməyə və onu tez bir zamanda işə salmağa kömək edir.

Yeni virtual maşın yerləşdiririk və ilk növbədə ona quraşdırırıq Xorg, nom и axın qutusu:

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

Xorg üçün konfiqurasiyadan da istifadə edəcəyik verilmişdir us Diego Ongaro, yalnız yeni bir qətnamə əlavə 1920 × 1080, çünki bütün monitorlarımız ondan istifadə edəcək:

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

İndi Firefox-u quraşdıracağıq, onu sistem xidməti kimi işlədəcəyik, ona görə də bir şey üçün onun üçün vahid fayl yazacağıq:

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-u dərhal tam ekran rejimində işə salmaq üçün bizə Xdotool lazımdır.
Parametrdən istifadə etməklə -url hər hansı bir səhifəni təyin edə bilərsiniz ki, brauzer işə salındıqda avtomatik olaraq açılsın.

Bu mərhələdə köşkümüz hazırdır, lakin indi görüntünü şəbəkə üzərindən digər monitorlara və cihazlara ixrac etməliyik. Bunun üçün biz imkanlardan istifadə edəcəyik Hərəkət JPEG, əksər veb-kameralardan video axını üçün daha çox istifadə olunan format.

Bunun üçün bizə iki şey lazımdır: FFmpeg modulu ilə x11grab, X-dən şəkillər çəkmək üçün və axın gözü, onu müştərilərimizə paylayacaq:

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

Şəkilimiz sürətli yeniləmə tələb etmədiyi üçün yeniləmə sürətini təyin etdim: saniyədə 1 kadr (parametr -r 1) və sıxılma keyfiyyəti: 5 (parametr -q:v 5)

İndi getməyə çalışaq http://your-vm:8080/, cavab olaraq iş masasının daim yenilənən ekran görüntüsünü görəcəksiniz. Əla! - nə lazımdı.

Müştəri tərəfi

Burada hələ daha asandır, dediyim kimi, Raspberry Pi Model B+-dan istifadə edəcəyik.

Əvvəlcə onu quraşdıraq ArchLinux ARM, bunun üçün izləyirik təlimatlar rəsmi saytında.

Video çipimiz üçün daha çox yaddaş ayırmalıyıq, bunun üçün redaktə edəcəyik /boot/config.txt

gpu_mem=128

Gəlin yeni sistemimizi yükləyək və pacman açarını işə salmağı, quraşdırmağı unutmayın OMXPlayer:

pacman -Sy omxplayer

Maraqlıdır ki, OMXPlayer x olmadan işləyə bilər, ona görə də bizə lazım olan tək şey onun üçün vahid fayl yazmaq və işə salmaqdır:

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 kimi -b http://your-vm:8080/ url-ni serverimizdən ötürürük.

Hamısı budur, serverimizdən bir şəkil dərhal qoşulmuş ekranda görünməlidir. Hər hansı problem olarsa, axın avtomatik olaraq yenidən işə salınacaq və müştərilər ona yenidən qoşulacaqlar.

Bonus olaraq, ortaya çıxan şəkli ofisdəki bütün kompüterlərə ekran qoruyucusu kimi quraşdıra bilərsiniz. Bunun üçün sizə lazım olacaq 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

İndi həmkarlarınız çox sevinəcək 🙂

Mənbə: www.habr.com

Добавить комментарий