Экранды желі арқылы бірнеше құрылғыға жіберу

Экранды желі арқылы бірнеше құрылғыға жіберу

Маған кеңседегі бірнеше экрандарда мониторингі бар бақылау тақтасын көрсету қажет болды. Бірнеше ескі Raspberry Pi Model B + және ресурстардың шексіз саны бар гипервизор бар.

Шамасы, Raspberry Pi Model B+ браузерді үнемі жұмыс істеп тұруға және ондағы көптеген графиканы көрсетуге жеткілікті кездейсоқтыққа ие емес, соның салдарынан бет ішінара ақаулы және жиі бұзылады.

Мен сіздермен бөліскім келетін өте қарапайым және талғампаз шешім болды.

Өздеріңіз білетіндей, барлық таңқурайда жеткілікті қуатты бейне процессоры бар, ол аппараттық бейнені декодтау үшін тамаша. Сонымен, басқа жерде бақылау тақтасы бар шолғышты іске қосу және рендерленген суреті бар дайын ағынды таңқурайға жіберу идеясы келді.

Сонымен қатар, бұл басқаруды жеңілдетуі керек, өйткені бұл жағдайда барлық конфигурация жаңарту және сақтық көшірме жасау оңайырақ бір виртуалды машинада орындалады.

Айтылды істелді.

Сервер бөлігі

Дайын қолданамыз Ubuntu үшін бұлтты кескін. Орнатуды қажет етпейтін, ол виртуалды машинаны жылдам орналастыру үшін қажет нәрсенің барлығын қамтиды және CloudInit қолдауы желіні бірден орнатуға, ssh пернелерін қосуға және оны тез іске қосуға көмектеседі.

Біз жаңа виртуалды машинаны орналастырамыз және ең алдымен оны оған орнатамыз Xorg, nodm и флюсбокс:

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

Firefox-ты толық экран режимінде бірден іске қосу үшін бізге Xdotool қажет.
Параметрді пайдалану -url шолғыш іске қосылғанда ол автоматты түрде ашылатындай кез келген бетті көрсетуге болады.

Бұл кезеңде біздің дүңгіршек дайын, бірақ енді суретті желі арқылы басқа мониторлар мен құрылғыларға экспорттау керек. Ол үшін біз мүмкіндіктерді пайдаланамыз Қозғалыс 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 -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)

Енді баруға тырысайық http://your-vm:8080/, жауап ретінде жұмыс үстелінің үнемі жаңартылып тұратын скриншотын көресіз. Тамаша! -не керек еді.

Клиент бөлігі

Мұнда бәрі оңай, мен айтқанымдай, біз Raspberry Pi B + моделін қолданамыз.

Ең алдымен, оны орнатамыз Linux Linux ARM, бұл үшін біз ұстанамыз нұсқаулар ресми сайтында.

Біз сондай-ақ бейне чипке көбірек жад бөлуіміз керек, ол үшін біз өңдейміз /boot/config.txt

gpu_mem=128

Жаңа жүйемізді жүктеп алайық және pacman кілттерін баптандыруды, орнатуды ұмытпаңыз OMXPlayer:

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 жібереміз.

Барлығы, біздің сервердің суреті қосылған экранда бірден пайда болуы керек. Қандай да бір мәселе туындаған жағдайда ағын автоматты түрде қайта іске қосылады және клиенттер оған қайта қосылады.

Бонус ретінде алынған суретті кеңседегі барлық компьютерлерге экран сақтағыш ретінде орнатуға болады. Бұл үшін сізге қажет болады 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

Енді сіздің әріптестеріңіз өте қуанышты болады 🙂

Ақпарат көзі: www.habr.com

пікір қалдыру