Pretakajte zaslon na več naprav prek omrežja

Pretakajte zaslon na več naprav prek omrežja

Imel sem potrebo prikazati nadzorno ploščo z nadzorom na več zaslonih v pisarni. Obstaja več starih Raspberry Pi Model B + in hipervizor s skoraj neomejeno količino virov.

Očitno Raspberry Pi Model B+ nima dovolj naključnosti, da bi brskalnik ves čas deloval in v njem upodabljal veliko grafike, zaradi česar se zgodi, da je stran delno hrošča in se pogosto sesuje.

Obstaja dokaj preprosta in elegantna rešitev, ki jo želim deliti z vami.

Kot veste, imajo vse maline dokaj močan video procesor, ki je odličen za strojno dekodiranje videa. Tako se je porodila ideja, da bi brskalnik z nadzorno ploščo zagnal nekje drugje, na malino pa prenesel že pripravljen tok z izrisano sliko.

Poleg tega bi to moralo imeti poenostavljeno upravljanje, saj bo v tem primeru vsa konfiguracija izvedena na enem virtualnem stroju, ki ga je lažje posodabljati in varnostno kopirati.

Ni prej povedano kot storjeno.

Strežniški del

Uporabljamo pripravljeno Slika v oblaku za Ubuntu. Ker ne zahteva namestitve, vsebuje vse, kar potrebujete za hitro namestitev virtualnega stroja in Podpora za CloudInit pomaga takoj vzpostaviti omrežje, dodati ssh ključe in ga hitro zagnati.

Razmestimo nov virtualni stroj in ga najprej namestimo nanj Xorg, nom и flux box:

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

Vljudno bomo uporabili tudi konfiguracijo za Xorg odobreno nas Diego Ongaro, ki je dodal le novo resolucijo 1920 × 1080, saj ga bodo uporabljali vsi naši monitorji:

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

Zdaj bomo namestili Firefox, zagnali ga bomo kot sistemsko storitev, zato bomo zanj napisali datoteko enote:

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

Za takojšnji zagon firefoxa v celozaslonskem načinu potrebujemo Xdotool.
Uporaba parametra -url katero koli stran lahko določite tako, da se samodejno odpre ob zagonu brskalnika.

Na tej stopnji je naš kiosk pripravljen, zdaj pa moramo sliko izvoziti po omrežju na druge monitorje in naprave. Da bi to naredili, bomo uporabili možnosti Gibanje JPEG, format, ki se pogosteje uporablja za pretakanje videa iz večine spletnih kamer.

Za to potrebujemo dve stvari: FFmpeg z modulom x11zgrabi, za zajemanje slik iz x in streamEye, ki ga bo distribuiral našim strankam:

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

Ker naša slika ne zahteva hitre posodobitve, sem določil hitrost osveževanja: 1 slika na sekundo (parameter -r 1) in kakovost stiskanja: 5 (parameter -q:v 5)

Zdaj pa poskusimo iti na http://your-vm:8080/, kot odgovor boste videli nenehno posodobljen posnetek zaslona namizja. Super! — kar je bilo potrebno.

Stranka za stranke

Tukaj je še vedno lažje, kot sem rekel, uporabili bomo Raspberry Pi Model B+.

Najprej ga namestimo ArchLinux ARM, za to sledimo Navodila na uradni spletni strani.

Prav tako bomo morali dodeliti več pomnilnika za naš video čip, za to bomo urejali /boot/config.txt

gpu_mem=128

Zaženimo naš novi sistem in ne pozabimo inicializirati obeska za ključe pacman, namestimo OMXPlayer:

pacman -Sy omxplayer

Zanimivo je, da lahko OMXPlayer deluje brez x, tako da potrebujemo le, da zanj napišemo datoteko enote in zaženemo:

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

Kot parameter -b http://your-vm:8080/ posredujemo url iz našega strežnika.

To je vse, slika iz našega strežnika bi se morala takoj prikazati na povezanem zaslonu. V primeru težav se bo tok samodejno znova zagnal in odjemalci se bodo znova povezali z njim.

Kot bonus lahko nastalo sliko namestite kot ohranjevalnik zaslona na vse računalnike v pisarni. Za to boste potrebovali MPV и Shranjevalnik 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

Zdaj bodo vaši sodelavci zelo veseli 🙂

Vir: www.habr.com

Dodaj komentar