Пренесувајте го екранот на неколку уреди преку мрежата

Пренесувајте го екранот на неколку уреди преку мрежата

Требаше да прикажам контролна табла со мониторинг на неколку екрани во канцеларијата. Имаме неколку стари Raspberry Pi Model B+ и хипервизор со речиси неограничен број ресурси.

Очигледно Raspberry Pi Model B+ нема доволно случајност за да го одржува прелистувачот постојано да работи и да прикажува голема количина на графика во него, поради што се случува страницата да биде делумно блескава и често да паѓа.

Најдов прилично едноставно и елегантно решение, кое сакам да го споделам со вас.

Како што знаете, сите малини имаат прилично моќен видео процесор, кој е одличен за хардверско декодирање на видео. Така се појави идејата да се стартува прелистувач со контролна табла на друго место и да се префрли готов стрим со рендерирана слика на малина.

Плус, ова треба да има поедноставено управување, бидејќи во овој случај целото поставување ќе се изврши на една виртуелна машина, што ќе биде полесно за ажурирање и резервна копија.

Не порано кажано отколку направено.

Серверски дел

Ќе го искористиме готовиот Облак Слика за Ubuntu. Без да бара инсталација, содржи се што ви треба за брзо распоредување на виртуелна машина и Поддршка за Cloud-Init помага веднаш да поставите мрежа, да додадете ssh клучеви и брзо да ја ставите во функција.

Распоредуваме нова виртуелна машина и прво ја инсталираме на неа Xorg, нодм и флуксбокс:

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

Ни треба Xdotool за да го стартуваме Firefox веднаш во режим на цел екран.
Користење на параметарот -url Можете да наведете која било страница за да се отвора автоматски кога ќе се стартува прелистувачот.

Во оваа фаза, нашиот киоск е подготвен, но сега треба да ја извеземе сликата преку мрежата на други монитори и уреди. За да го направиме ова, ќе ги искористиме можностите Движење JPEG, формат кој почесто се користи за проследување видео од повеќето веб-камери.

За да го направиме тоа потребни ни се две работи: ffmpeg со модул x11 зграпчи, за снимање слики од 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 Model B+.

Прво, да го инсталираме Арх Линукс АРМ, за ова следиме инструкции на официјалната веб-страница.

Исто така, ќе треба да одвоиме повеќе меморија за нашиот видео чип, за ова ќе го уредиме /boot/config.txt

gpu_mem=128

Ајде да го подигнеме нашиот нов систем и, не заборавајте да го иницијализираме клучот на Pacman, да го инсталираме OMXPlayer:

pacman -Sy omxplayer

Она што е забележливо е дека OMXPlayer може да работи без Xs, така што сè што ни треба е да напишеме единица датотека за него и да извршиме:

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

Додадете коментар