Am avut nevoie să afișez un tablou de bord cu monitorizare pe mai multe ecrane din birou. Există mai multe vechi Raspberry Pi Model B + și un hypervisor cu o cantitate aproape nelimitată de resurse.
Aparent, Raspberry Pi Model B+ nu are suficientă aleatorie pentru a menține browserul să ruleze constant și să redeze o mulțime de grafică în el, din cauza căruia se întâmplă ca pagina să fie parțial cu erori și să se blocheze adesea.
A existat o soluție destul de simplă și elegantă, pe care vreau să o împărtășesc cu voi.
După cum știți, toate Raspberries au un procesor video destul de puternic, care este excelent pentru decodarea video hardware. Așa că a venit ideea de a lansa un browser cu un tablou de bord în altă parte și de a transfera un flux gata făcut cu o imagine redată pe zmeură.
În plus, acest lucru ar trebui să aibă un management simplificat, deoarece în acest caz toată configurația va fi efectuată pe o singură mașină virtuală, care este mai ușor de actualizat și de backup.
Făcut repede și foarte bine.
Partea serverului
Folosim gata
Implementăm o nouă mașină virtuală și, în primul rând, o instalăm pe ea
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Vom folosi și configurația pentru Xorg, vă rog
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
Acum vom instala Firefox, îl vom rula ca serviciu de sistem, așa că pentru un lucru vom scrie un fișier unitar pentru el:
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
Avem nevoie de Xdotool pentru a rula imediat Firefox în modul ecran complet.
Folosind parametrul -url
puteți specifica orice pagină, astfel încât să se deschidă automat la pornirea browserului.
În această etapă, chioșcul nostru este gata, dar acum trebuie să exportăm imaginea prin rețea către alte monitoare și dispozitive. Pentru a face acest lucru, vom folosi posibilitățile
Pentru asta avem nevoie de două lucruri:
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
Deoarece fotografia noastră nu necesită o actualizare rapidă, am specificat rata de reîmprospătare: 1 cadru pe secundă (parametru -r 1
) și calitatea compresiei: 5 (parametru -q:v 5
)
Acum să încercăm să mergem la
Partea clientului
Este încă mai ușor aici, așa cum am spus, vom folosi Raspberry Pi Model B +.
În primul rând, să-l instalăm
De asemenea, va trebui să alocăm mai multă memorie pentru cipul nostru video, pentru asta vom edita /boot/config.txt
gpu_mem=128
Haideți să pornim noul nostru sistem și să nu uitați să inițializați breloul pacman, să instalați
pacman -Sy omxplayer
În mod remarcabil, OMXPlayer poate funcționa fără X, așa că tot ce avem nevoie este să scriem un fișier unitar pentru el și să rulăm:
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
Ca parametru -b http://your-vm:8080/
transmitem adresa URL de pe serverul nostru.
Asta e tot, o poză de pe serverul nostru ar trebui să apară imediat pe ecranul conectat. În cazul oricăror probleme, fluxul va fi repornit automat și clienții se vor reconecta la el.
Ca bonus, puteți instala imaginea rezultată ca screensaver pe toate computerele de la birou. Pentru asta vei avea nevoie
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
Acum colegii tăi vor fi foarte fericiți 🙂
Sursa: www.habr.com