Szükségem volt arra, hogy az irodában több képernyőn megjelenítsek egy felügyeleti műszerfalat. Számos régi Raspberry Pi Model B + és egy hipervizor, szinte korlátlan mennyiségű erőforrással.
Úgy tűnik, a Raspberry Pi Model B+-ban nincs elég véletlenszerűség ahhoz, hogy a böngésző folyamatosan működjön és sok grafikát jelenítsen meg benne, ami miatt előfordul, hogy az oldal részben hibás és gyakran összeomlik.
Volt egy meglehetősen egyszerű és elegáns megoldás, amit szeretnék megosztani veletek.
Mint tudják, az összes Raspberry meglehetősen erős videoprocesszorral rendelkezik, amely nagyszerű a hardveres videó dekódolásához. Így jött az ötlet, hogy indítsunk el egy dashboardos böngészőt valahol máshol, és egy kész streamet, egy renderelt képpel vigyünk át a málnára.
Ezen túlmenően egyszerűsíteni kell a kezelést, mivel ebben az esetben minden konfiguráció egyetlen virtuális gépen történik, amelyet könnyebb frissíteni és biztonsági másolatot készíteni.
Alig van szó, mint kész.
Szerver rész
Készen használjuk
Telepítünk egy új virtuális gépet, és először telepítjük rá
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Szívesen használjuk a Xorg konfigurációját is
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
Most telepítjük a Firefoxot, rendszerszolgáltatásként fogjuk futtatni, így egyrészt egységfájlt írunk neki:
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
Szükségünk van az Xdotool-ra, hogy a Firefox azonnal teljes képernyős módban futhasson.
A paraméter használatával -url
bármilyen oldalt megadhat, hogy az automatikusan megnyíljon a böngésző indításakor.
Ebben a szakaszban a kioszkunk készen áll, de most a képet a hálózaton keresztül exportálnunk kell más monitorokra és eszközökre. Ennek érdekében ki fogjuk használni a lehetőségeket
Ehhez két dologra van szükségünk:
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
Mivel képünk nem igényel gyors frissítést, a frissítési gyakoriságot megadtam: 1 képkocka másodpercenként (paraméter -r 1
) és tömörítési minőség: 5 (paraméter -q:v 5
)
Most próbáljunk meg odamenni
Ügyfél oldal
Itt még mindig egyszerűbb, ahogy mondtam, a Raspberry Pi Model B+-t fogjuk használni.
Először is telepítsük
A videochipünkhöz is több memóriát kell lefoglalnunk, ehhez szerkesztjük /boot/config.txt
gpu_mem=128
Indítsuk el az új rendszerünket, és ne felejtsük el inicializálni a pacman kulcstartót, telepíteni
pacman -Sy omxplayer
Figyelemre méltó, hogy az OMXPlayer X nélkül is tud működni, így csak egy egységfájlt kell írnunk hozzá, és futtassuk:
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
Paraméterként -b http://your-vm:8080/
átadjuk az url-t a szerverünkről.
Ez minden, a szerverünkről származó képnek azonnal meg kell jelennie a csatlakoztatott képernyőn. Bármilyen probléma esetén a stream automatikusan újraindul, és az ügyfelek újra csatlakoznak hozzá.
Bónuszként a kapott képet képernyővédőként telepítheti az iroda összes számítógépére. Ehhez szüksége lesz
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
Most a kollégái nagyon boldogok lesznek 🙂
Forrás: will.com