Ich hatte das Bedürfnis, ein Dashboard mit Überwachung auf mehreren Bildschirmen im Büro anzuzeigen. Es gibt mehrere alte Raspberry Pi Model B+ und einen Hypervisor mit nahezu unbegrenzten Ressourcen.
Anscheinend verfügt der Raspberry Pi Model B+ nicht über genügend Zufälligkeit, um den Browser ständig laufen zu lassen und viele Grafiken darin darzustellen, wodurch es vorkommen kann, dass die Seite teilweise fehlerhaft ist und häufig abstürzt.
Es gab eine ziemlich einfache und elegante Lösung, die ich mit Ihnen teilen möchte.
Wie Sie wissen, verfügen alle Raspberry über einen recht leistungsstarken Videoprozessor, der sich hervorragend für die Hardware-Videodekodierung eignet. So entstand die Idee, irgendwo anders einen Browser mit Dashboard zu starten und einen fertigen Stream mit einem gerenderten Bild auf den Raspberry zu übertragen.
Darüber hinaus sollte die Verwaltung dadurch vereinfacht werden, da in diesem Fall die gesamte Konfiguration auf einer virtuellen Maschine durchgeführt wird, was einfacher zu aktualisieren und zu sichern ist.
Gesagt, getan.
Serverteil
Wir verwenden fertig
Wir stellen eine neue virtuelle Maschine bereit und installieren sie zunächst darauf
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Wir werden freundlicherweise auch die Konfiguration für Xorg verwenden
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
Jetzt werden wir Firefox installieren, ihn als Systemdienst ausführen, also zum einen eine Unit-Datei dafür schreiben:
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
Wir benötigen Xdotool, um Firefox sofort im Vollbildmodus auszuführen.
Verwenden des Parameters -url
Sie können eine beliebige Seite so festlegen, dass sie beim Start des Browsers automatisch geöffnet wird.
Zu diesem Zeitpunkt ist unser Kiosk fertig, aber jetzt müssen wir das Bild über das Netzwerk auf andere Monitore und Geräte exportieren. Dazu werden wir die Möglichkeiten nutzen
Dazu benötigen wir zwei Dinge:
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
Da unser Bild keine schnelle Aktualisierung benötigt, habe ich die Bildwiederholfrequenz angegeben: 1 Bild pro Sekunde (Parameter -r 1
) und Komprimierungsqualität: 5 (Parameter -q:v 5
)
Versuchen wir nun, zu gehen
Kundenteil
Hier ist es noch einfacher, wie gesagt, wir werden den Raspberry Pi Model B+ verwenden.
Lassen Sie es uns zunächst installieren
Außerdem müssen wir unserem Videochip mehr Speicher zuweisen, dafür werden wir ihn bearbeiten /boot/config.txt
gpu_mem=128
Starten wir unser neues System und vergessen Sie nicht, den Pacman-Schlüsselbund zu initialisieren und zu installieren
pacman -Sy omxplayer
Bemerkenswerterweise kann OMXPlayer auch ohne x funktionieren, wir müssen also nur eine Unit-Datei dafür schreiben und Folgendes ausführen:
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
Als Parameter -b http://your-vm:8080/
Wir übergeben die URL von unserem Server.
Das ist alles, ein Bild von unserem Server sollte sofort auf dem angeschlossenen Bildschirm erscheinen. Bei Problemen wird der Stream automatisch neu gestartet und die Clients stellen erneut eine Verbindung her.
Als Bonus können Sie das resultierende Bild als Bildschirmschoner auf allen Computern im Büro installieren. Dafür benötigen Sie
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
Jetzt werden Ihre Kollegen sehr glücklich sein 🙂
Source: habr.com