Mal som potrebu zobraziť dashboard s monitorovaním na viacerých obrazovkách v kancelárii. Existuje niekoľko starých Raspberry Pi Model B + a hypervízor s takmer neobmedzeným množstvom zdrojov.
Raspberry Pi Model B+ zrejme nemá dostatočnú náhodnosť, aby prehliadač neustále bežal a vykresľoval v ňom veľa grafiky, kvôli čomu sa stáva, že stránka je čiastočne zabugovaná a často padá.
Existovalo pomerne jednoduché a elegantné riešenie, o ktoré sa chcem s vami podeliť.
Ako viete, všetky Maliny majú pomerne výkonný video procesor, ktorý je skvelý na hardvérové dekódovanie videa. Tak prišiel nápad spustiť prehliadač s dashboardom niekde inde a preniesť hotový stream s vyrenderovaným obrázkom na malinovku.
Navyše by to malo mať zjednodušenú správu, pretože v tomto prípade bude všetka konfigurácia vykonaná na jednom virtuálnom počítači, ktorý sa jednoduchšie aktualizuje a zálohuje.
Len čo sa povie, tak urobí.
Serverová časť
Používame hotové
Nasadíme nový virtuálny stroj a v prvom rade ho naň nainštalujeme
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Použijeme tiež konfiguráciu pre Xorg, láskavo
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
Teraz nainštalujeme Firefox, spustíme ho ako systémovú službu, takže na jednu vec preň napíšeme súbor jednotky:
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
Na okamžité spustenie firefoxu v režime celej obrazovky potrebujeme Xdotool.
Pomocou parametra -url
môžete zadať ľubovoľnú stránku, aby sa automaticky otvorila pri spustení prehliadača.
V tejto fáze je náš kiosk pripravený, ale teraz potrebujeme exportovať obraz cez sieť na iné monitory a zariadenia. K tomu využijeme možnosti
Na to potrebujeme dve veci:
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
Keďže náš obrázok nevyžaduje rýchlu aktualizáciu, určil som obnovovaciu frekvenciu: 1 snímka za sekundu (parameter -r 1
) a kvalita kompresie: 5 (parameter -q:v 5
)
Teraz skúsme prejsť na
Strana klienta
Tu je to stále jednoduchšie, ako som povedal, použijeme Raspberry Pi Model B +.
Najprv si ho nainštalujte
Budeme tiež musieť prideliť viac pamäte pre náš video čip, na ktorý budeme upravovať /boot/config.txt
gpu_mem=128
Nabootujeme náš nový systém a nezabudnime inicializovať pacman kľúčenku, nainštalovať
pacman -Sy omxplayer
Je pozoruhodné, že OMXPlayer môže fungovať bez X, takže všetko, čo potrebujeme, je napísať súbor jednotky a spustiť:
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
Ako parameter -b http://your-vm:8080/
odovzdávame adresu URL z nášho servera.
To je všetko, na pripojenej obrazovke by sa mal okamžite objaviť obrázok z nášho servera. V prípade akýchkoľvek problémov sa stream automaticky reštartuje a klienti sa k nemu znova pripoja.
Ako bonus si môžete výsledný obrázok nainštalovať ako šetrič obrazovky na všetky počítače v kancelárii. Na to budete potrebovať
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
Teraz budú mať vaši kolegovia veľkú radosť 🙂
Zdroj: hab.com