Stream schermu à parechji dispusitivi nantu à a reta

Stream schermu à parechji dispusitivi nantu à a reta

Aviu avutu bisognu di vede un dashboard cù monitorizazione in parechje schermi in l'uffiziu. Ci sò parechji vechji Raspberry Pi Model B + è un hypervisor cù una quantità quasi illimitata di risorse.

Apparentemente, u Raspberry Pi Model B + ùn hà micca abbastanza casualità per mantene u navigatore in permanenza in esecuzione è rende assai gràfiche in questu, per quessa chì succede chì a pagina hè parzialmente buggy è spessu crashes.

Ci era una suluzione abbastanza simplice è elegante, chì vogliu sparte cun voi.

Comu sapete, tutti i Raspberries anu un processatore video abbastanza putente, chì hè grande per a decodificazione di video hardware. Allora l'idea hè ghjunta per lancià un navigatore cù un dashboard in un altru locu, è trasfiriri un flussu prontu cù una stampa resa à u lampone.

In più, questu deve esse simplificatu a gestione, postu chì in questu casu tutte e cunfigurazioni seranu realizate nantu à una macchina virtuale, chì hè più faciule d'aghjurnà è di salvezza.

Nantu à dì chì fattu.

Parte di u servitore

Avemu aduprà pronta Cloud Image per Ubuntu. Ùn richiede micca installazione, cuntene tuttu ciò chì avete bisognu per implementà rapidamente una macchina virtuale, è Supportu CloudInit aiuta à stallà istantaneamente una rete, aghjunghje chjavi ssh è mette in opera rapidamente.

Implementemu una nova macchina virtuale è prima di tuttu installate nantu à questu Xorg, nodm и scatula di flussu:

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

Avemu ancu aduprà a cunfigurazione per Xorg, per piacè cuncessa noi Diego Ongaro, aghjunghjendu solu una nova risoluzione 1920 × 1080, postu chì tutti i nostri monitori l'utilizanu:

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

Avà stallà Firefox, u correremu cum'è un serviziu di sistema, cusì per una cosa scriveremu un schedariu di unità per questu:

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

Avemu bisognu di Xdotool per eseguisce firefox immediatamente in modalità di schermu pienu.
Utilizà u paràmetru -url pudete specificà ogni pagina in modu chì si apre automaticamente quandu u navigatore principia.

À questu stadiu, u nostru kiosk hè prontu, ma avà avemu bisognu di esportà l'imaghjini nantu à a reta à altri monitori è dispusitivi. Per fà questu, avemu aduprà e pussibulità Movimentu JPEG, un furmatu chì hè più comunmente utilizatu per streaming video da a maiò parte di webcam.

Per questu avemu bisognu di duie cose: FFmpeg cù u modulu x11 piglia, per catturà ritratti da X è streamEye, chì u distribuirà à i nostri clienti:

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

Siccomu a nostra stampa ùn hà micca bisognu di una aghjurnazione rapida, aghju specificatu a freccia di rinfrescante: 1 frame per seconda (parametru -r 1) è qualità di compressione: 5 (parametru -q:v 5)

Avà pruvemu à andà http://your-vm:8080/, in risposta vi vede una screenshot constantemente aghjurnata di u desktop. Perfettu! - ciò chì era necessariu.

Latu di u cliente

Hè sempre più faciule quì, cum'è aghju dettu, useremu u Raspberry Pi Model B +.

Prima di tuttu, stallà nantu à questu ArchLinux ARM, per questu seguitemu instructions in u situ ufficiale.

Avemu ancu bisognu di assignà più memoria per u nostru chip video, per questu avemu da edità in /boot/config.txt

gpu_mem=128

Avviate u nostru novu sistema è ùn vi scurdate di inizializà u keyring pacman, installate OMXPlayer:

pacman -Sy omxplayer

Notevolmente, OMXPlayer pò travaglià senza X, cusì tuttu ciò chì avemu bisognu hè di scrive un schedariu di unità per ellu è eseguisce:

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

Cum'è un paràmetru -b http://your-vm:8080/ passemu l'url da u nostru servitore.

Hè tuttu, una foto da u nostru servitore deve apparisce immediatamente nantu à u screnu cunnessu. In casu di prublemi, u flussu serà riavviatu automaticamente è i clienti si cunnettaranu cun ellu.

Cum'è un bonus, pudete installà a stampa resultanti cum'è screensaver in tutti l'urdinatori in l'uffiziu. Per questu avete bisognu 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

Avà i vostri culleghi seranu assai felici 🙂

Source: www.habr.com

Add a comment