Stroom skerm na verskeie toestelle oor die netwerk

Stroom skerm na verskeie toestelle oor die netwerk

Ek het 'n behoefte gehad om 'n dashboard met monitering op verskeie skerms in die kantoor te vertoon. Daar is verskeie ou Raspberry Pi Model B + en 'n hypervisor met 'n byna onbeperkte hoeveelheid hulpbronne.

Blykbaar het die Raspberry Pi Model B+ nie genoeg ewekansigheid om die blaaier voortdurend aan die gang te hou en baie grafika daarin weer te gee nie, en daarom gebeur dit dat die bladsy gedeeltelik karig is en dikwels ineenstort.

Daar was 'n redelik eenvoudige en elegante oplossing, wat ek met jou wil deel.

Soos u weet, het alle Frambose 'n redelik kragtige videoverwerker, wat ideaal is vir hardeware video-dekodering. Die idee het dus opgekom om 'n blaaier met 'n dashboard iewers anders te begin, en 'n klaargemaakte stroom met 'n gelewerde prentjie na die framboos te stuur.

Boonop behoort dit bestuur te vereenvoudig, aangesien in hierdie geval alle konfigurasie op een virtuele masjien uitgevoer sal word, wat makliker is om op te dateer en te rugsteun.

Nie gou gesΓͺ as gedaan nie.

Bediener deel

Ons gebruik gereed Wolkbeeld vir Ubuntu. Dit vereis geen installasie nie, dit bevat alles wat jy nodig het om vinnig 'n virtuele masjien te ontplooi, en CloudInit-ondersteuning help om onmiddellik 'n netwerk op te stel, ssh-sleutels by te voeg en dit vinnig in werking te stel.

Ons ontplooi 'n nuwe virtuele masjien en installeer dit eerstens daarop xorg, nom ΠΈ vloeikas:

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

Ons sal ook die konfigurasie vir Xorg gebruik, asseblief toegestaan ons Diego Ongaro, en voeg slegs 'n nuwe resolusie by 1920 Γ— 1080, aangesien al ons monitors dit sal gebruik:

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

Nou sal ons Firefox installeer, ons sal dit as 'n stelseldiens laat loop, so vir een ding sal ons 'n eenheidlΓͺer daarvoor skryf:

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

Ons het Xdotool nodig om Firefox onmiddellik in volskermmodus te laat loop.
Gebruik die parameter -url jy kan enige bladsy spesifiseer sodat dit outomaties oopmaak wanneer die blaaier begin.

Op hierdie stadium is ons kiosk gereed, maar nou moet ons die beeld oor die netwerk na ander monitors en toestelle uitvoer. Om dit te doen, sal ons die moontlikhede gebruik Beweging JPEG, 'n formaat wat meer algemeen gebruik word vir die stroom van video vanaf die meeste webkameras.

Hiervoor het ons twee dinge nodig: FFmpeg met module x11 gryp, vir die vaslegging van foto's van X's en stroomOog, wat dit aan ons kliΓ«nte sal versprei:

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

Aangesien ons foto nie 'n vinnige opdatering benodig nie, het ek die verversingstempo gespesifiseer: 1 raam per sekonde (parameter -r 1) en kompressiekwaliteit: 5 (parameter -q:v 5)

Kom ons probeer nou gaan na http://your-vm:8080/, in reaksie sal jy 'n voortdurend opgedateerde skermskoot van die lessenaar sien. Puik! - wat nodig was.

KliΓ«ntkant

Dit is steeds makliker hier, soos ek gesΓͺ het, ons sal die Raspberry Pi Model B + gebruik.

Eerstens, laat ons dit installeer ArchLinux ARM, hiervoor volg ons instruksies op die amptelike webwerf.

Ons sal ook meer geheue vir ons videoskyfie moet toewys, hiervoor sal ons redigeer /boot/config.txt

gpu_mem=128

Kom ons begin ons nuwe stelsel en moenie vergeet om die pacman-sleutelring te inisialiseer nie, installeer OMXPlayer:

pacman -Sy omxplayer

Merkwaardig genoeg kan OMXPlayer sonder x werk, so al wat ons nodig het is om 'n eenheidlΓͺer daarvoor te skryf en te hardloop:

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

As 'n parameter -b http://your-vm:8080/ ons gee die url van ons bediener af.

Dit is al, 'n prentjie van ons bediener moet onmiddellik op die gekoppelde skerm verskyn. In die geval van enige probleme, sal die stroom outomaties herbegin word en kliΓ«nte sal weer daaraan koppel.

As 'n bonus kan jy die resulterende prentjie as 'n skermbewaarder op alle rekenaars in die kantoor installeer. Hiervoor sal jy nodig hΓͺ 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

Nou sal jou kollegas baie gelukkig wees πŸ™‚

Bron: will.com

Voeg 'n opmerking