Ik hie in need om in dashboard mei tafersjoch op ferskate skermen yn it kantoar te werjaan. D'r binne ferskate âlde Raspberry Pi Model B + en in hypervisor mei in hast ûnbeheinde hoemannichte boarnen.
Blykber hat de Raspberry Pi Model B+ net genôch willekeurich om de browser konstant te hâlden en in protte grafiken yn te meitsjen, wêrtroch it bart dat de side foar in part buggy is en faak crasht.
D'r wie in frij ienfâldige en elegante oplossing, dy't ik mei jo diele wol.
Lykas jo witte, hawwe alle Raspberries in frij krêftige fideoprosessor, dy't geweldich is foar hardwarefideo-dekodearring. Dat it idee kaam op om in browser mei in dashboard earne oars te lansearjen, en in ready-made stream mei in werjûn ôfbylding oer te bringen nei de raspberry.
Plus, dit moat it behear ferienfâldige hawwe, om't yn dit gefal alle konfiguraasje wurdt útfierd op ien firtuele masine, dy't makliker is om te aktualisearjen en te backupjen.
Net earder sein as dien.
Server diel
Wy brûke klear
Wy sette in nije firtuele masine yn en earst ynstallearje it derop
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Wy sille ek de konfiguraasje brûke foar Xorg, freonlik
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
No sille wy Firefox ynstallearje, wy sille it útfiere as in systeemtsjinst, dus foar ien ding sille wy der in ienheidsbestân foar skriuwe:
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
Wy hawwe Xdotool nedich om firefox direkt yn folslein skermmodus út te fieren.
It brûken fan parameter -url
jo kinne elke side oantsjutte sadat dizze automatysk iepenet as de browser begjint.
Op dit stadium is ús kiosk klear, mar no moatte wy de ôfbylding oer it netwurk eksportearje nei oare monitors en apparaten. Om dit te dwaan, sille wy de mooglikheden brûke
Dêrfoar hawwe wy twa dingen nedich:
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
Om't ús ôfbylding gjin rappe fernijing fereasket, spesifisearre ik de ferfarskingsfrekwinsje: 1 frame per sekonde (parameter -r 1
) en kompresje kwaliteit: 5 (parameter -q:v 5
)
Litte wy no besykje te gean nei
Client kant
It is hjir noch makliker, lykas ik sei, wy sille de Raspberry Pi Model B + brûke.
Lit ús earst it ynstallearje
Wy sille ek mear ûnthâld moatte tawize foar ús fideochip, hjirfoar sille wy bewurkje /boot/config.txt
gpu_mem=128
Litte wy ús nije systeem opstarte en ferjit net de pacman-sleutelring te initialisearjen, ynstallearje
pacman -Sy omxplayer
Opfallend is dat OMXPlayer kin wurkje sûnder x, dus alles wat wy nedich binne is in ienheidsbestân foar te skriuwen en útfiere:
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 parameter -b http://your-vm:8080/
wy jouwe de url troch fan ús server.
Dat is alles, in foto fan ús server moat fuortendaliks ferskine op it ferbûne skerm. Yn gefal fan problemen sil de stream automatysk opnij starte en kliïnten sille der opnij mei ferbine.
As bonus kinne jo de resultearjende ôfbylding ynstallearje as skermbefeiliging op alle kompjûters yn it kantoar. Hjirfoar sille jo nedich hawwe
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
No sille jo kollega's tige bliid wêze 🙂
Boarne: www.habr.com