
Ich hatte die Notwendigkeit, ein Dashboard zur Überwachung auf mehreren Bildschirmen im Büro anzuzeigen. Mir stehen einige ältere Raspberry Pi Model B+ und ein Hypervisor mit praktisch unbegrenzten Ressourcen zur Verfügung.
Offensichtlich hat der Raspberry Pi Model B+ nicht die nötige Leistungsfähigkeit, um einen Browser ständig laufen zu lassen und eine große Menge an Grafik zu rendern. Daher kommt es vor, dass die Seite teilweise hakt und häufig abstürzt.
Es fand sich eine einfache und elegante Lösung, die ich mit Ihnen teilen möchte.
Wie bekannt ist, haben alle Raspberry eine ausreichend leistungsstarke GPU, die sich hervorragend für die hardwareseitige Videodecodierung eignet. So entstand die Idee, den Browser mit dem Dashboard irgendwo anders zu starten und den gerenderten Bildstream an den Raspberry zu übertragen.
Das sollte zudem die Verwaltung erleichtern, da in diesem Fall die gesamte Konfiguration auf einer einzigen virtuellen Maschine durchgeführt wird, die einfacher zu aktualisieren und zu sichern ist.
Gesagt, getan.
Server-Seite
Wir werden ein fertiges . Ohne Installation enthält es alles, was für die schnelle Bereitstellung einer virtuellen Maschine erforderlich ist, und hilft dabei, das Netzwerk sofort einzurichten, SSH-Schlüssel hinzuzufügen und es schnell in Betrieb zu nehmen.
Wir rollen eine neue virtuelle Maschine aus und installieren zuerst , und :
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodmWir nutzen auch die Konfiguration für Xorg, die uns freundlicherweise Diego Ongaro zur Verfügung gestellt wurde, wobei wir nur die neue Auflösung hinzufügen 1920×1080, da alle unsere Monitore genau diese verwenden werden:
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 nodmJetzt installieren wir Firefox, wir werden ihn als Systemsservice ausführen, und dazu schreiben wir eine Unit-Datei für ihn:
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 firefoxXdotool ist erforderlich, um Firefox direkt im Vollbildmodus zu starten.
Mit dem Parameter -url kann jede beliebige Seite angegeben werden, die beim Start des Browsers automatisch geöffnet werden soll.
An diesem Punkt ist unser Kiosk bereits bereit, aber jetzt müssen wir das Bild über das Netzwerk auf andere Monitore und Geräte exportieren. Dazu nutzen wir die Möglichkeiten von , einem Format, das häufig für das Streaming von Videos von den meisten Webcams verwendet wird.
Dafür benötigen wir zwei Dinge: mit dem Modul , um das Bild von X aufzunehmen, und , das es an unsere Clients verteilt:
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 </dev/null | streameye'
[Install]
WantedBy=graphical.target
EOT
systemctl enable streameye
systemctl start streameyeDa unser Bild keine schnelle Aktualisierung benötigt, habe ich die Aktualisierungsfrequenz auf 1 Frame pro Sekunde festgelegt (Parameter -r 1) und die Kompressionsqualität auf 5 eingestellt (Parameter -q:v 5)
Jetzt versuchen wir, auf , und als Antwort sehen Sie einen ständig aktualisierten Screenshot des Desktops. Perfekt! – genau das, was benötigt wurde.
Client-Seite
Hier ist alles noch einfacher, wie ich bereits gesagt habe, verwenden wir Raspberry Pi Model B+.
Zuerst installieren wir darauf , dafür folgen wir der offiziellen Website.
Wir müssen auch mehr Speicher für unseren Grafikchip zuweisen, dafür bearbeiten wir in /boot/config.txt
gpu_mem=128Laden Sie unser neues System und vergessen Sie nicht, den pacman Keyring zu initialisieren, installieren wir :
pacman -Sy omxplayerBemerkenswert ist, dass OMXPlayer ohne X laufen kann, daher müssen wir lediglich eine Unit-Datei für ihn schreiben und starten:
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 omxplayerAls Parameter -b http://your-vm:8080/ übergeben wir die URL von unserem Server.
Damit ist alles erledigt, auf dem angeschlossenen Bildschirm sollte sofort ein Bild von unserem Server angezeigt werden. Bei Problemen wird der Stream automatisch neu gestartet und die Clients stellen die Verbindung wieder her.
Als Bonus können Sie das erhaltene Bild als Bildschirmschoner auf allen Computern im Büro einstellen. Dazu benötigen Sie und :
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 nJetzt werden Ihre Kollegen sehr zufrieden sein 🙂
Quelle: habr.com
