Straumaðu skjánum í mörg tæki yfir netið

Straumaðu skjánum í mörg tæki yfir netið

Ég þurfti að sýna mælaborð með eftirliti á nokkrum skjám á skrifstofunni. Það eru nokkrir gamlir Raspberry Pi Model B + og hypervisor með næstum ótakmarkað magn af auðlindum.

Svo virðist sem Raspberry Pi Model B+ hafi ekki nægilega tilviljunarkennd til að halda vafranum stöðugt í gangi og birta mikið af grafík í honum, vegna þess að síðan er að hluta til gallaður og hrynur oft.

Það var frekar einföld og glæsileg lausn sem mig langar að deila með ykkur.

Eins og þú veist eru öll hindber með nokkuð öflugan myndbandsörgjörva, sem er frábært fyrir vélbúnaðarmyndbandafkóðun. Svo kom upp sú hugmynd að opna vafra með mælaborði einhvers staðar annars staðar, og flytja tilbúið straum með renderðri mynd yfir á hindberið.

Auk þess ætti þetta að hafa einfaldað stjórnun, þar sem í þessu tilfelli verða allar stillingar framkvæmdar á einni sýndarvél, sem er auðveldara að uppfæra og taka öryggisafrit.

Ekki fyrr sagt en gert.

Server hluti

Við notum tilbúið Cloud Image fyrir Ubuntu. Það þarfnast engrar uppsetningar, það inniheldur allt sem þú þarft til að dreifa sýndarvél fljótt og CloudInit stuðningur hjálpar til við að setja upp netkerfi samstundis, bæta við ssh lyklum og setja það fljótt í notkun.

Við setjum upp nýja sýndarvél og setjum hana fyrst og fremst upp á henni Xorg, nikk и flæðibox:

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

Við munum líka nota stillingar fyrir Xorg, vinsamlegast veitt okkur Diego Ongaro, bætir aðeins við nýrri upplausn 1920 × 1080, þar sem allir skjáir okkar munu nota það:

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

Nú munum við setja upp Firefox, við munum keyra það sem kerfisþjónustu, svo í fyrsta lagi munum við skrifa einingaskrá fyrir það:

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

Við þurfum Xdotool til að keyra Firefox strax í fullum skjástillingu.
Að nota færibreytu -url þú getur tilgreint hvaða síðu sem er þannig að hún opnast sjálfkrafa þegar vafrinn ræsist.

Á þessu stigi er söluturninn okkar tilbúinn en nú þurfum við að flytja myndina út yfir netið á aðra skjái og tæki. Til að gera þetta munum við nota möguleikana Hreyfing JPEG, snið sem er oftar notað til að streyma myndbandi frá flestum vefmyndavélum.

Til þess þurfum við tvennt: FFmpeg með mát x11 grípa, til að taka myndir frá x og streymiEye, sem mun dreifa því til viðskiptavina okkar:

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

Þar sem myndin okkar þarfnast ekki hraðrar uppfærslu, tilgreindi ég hressingarhraðann: 1 ramma á sekúndu (breytu -r 1) og þjöppunargæði: 5 (færibreyta -q:v 5)

Nú skulum við reyna að fara að http://your-vm:8080/, sem svar muntu sjá stöðugt uppfært skjáskot af skjáborðinu. Frábært! — það sem þurfti.

Viðskiptavinahlið

Það er samt auðveldara hér, eins og ég sagði, við munum nota Raspberry Pi Model B +.

Fyrst af öllu skulum við setja það upp ArchLinux ARM, fyrir þetta fylgjum við leiðbeiningar á opinberu vefsvæðinu.

Við þurfum líka að úthluta meira minni fyrir myndbandskubbinn okkar, til þess munum við breyta inn /boot/config.txt

gpu_mem=128

Við skulum ræsa nýja kerfið okkar og ekki gleyma að frumstilla pacman lyklakippuna, setja upp OMXPlayer:

pacman -Sy omxplayer

Merkilegt nokk getur OMXPlayer virkað án x, svo allt sem við þurfum er að skrifa einingaskrá fyrir það og keyra:

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

Sem breytu -b http://your-vm:8080/ við erum að senda slóðina frá netþjóninum okkar.

Það er allt, mynd frá þjóninum okkar ætti strax að birtast á tengda skjánum. Ef einhver vandamál koma upp verður straumurinn sjálfkrafa endurræstur og viðskiptavinir tengjast honum aftur.

Sem bónus geturðu sett myndina sem myndast sem skjávara á allar tölvur á skrifstofunni. Fyrir þetta þarftu 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

Nú verða samstarfsmenn þínir mjög ánægðir 🙂

Heimild: www.habr.com

Bæta við athugasemd