Potrzebowałem wyświetlić dashboard z monitoringiem na kilku ekranach w biurze. Jest kilka starych Raspberry Pi Model B+ i hypervisor z niemal nieograniczoną ilością zasobów.
Najwyraźniej Raspberry Pi Model B+ nie ma wystarczającej losowości, aby przeglądarka działała stale i renderowała w niej dużo grafiki, przez co zdarza się, że strona jest częściowo zabugowana i często się zawiesza.
Było dość proste i eleganckie rozwiązanie, którym chcę się z tobą podzielić.
Jak wiesz, wszystkie Maliny mają dość mocny procesor wideo, który doskonale nadaje się do sprzętowego dekodowania wideo. Pojawił się więc pomysł, aby uruchomić przeglądarkę z pulpitem nawigacyjnym gdzie indziej i przesłać gotowy strumień z wyrenderowanym obrazem do maliny.
Ponadto powinno to uprościć zarządzanie, ponieważ w tym przypadku cała konfiguracja zostanie przeprowadzona na jednej maszynie wirtualnej, co jest łatwiejsze do aktualizacji i tworzenia kopii zapasowych.
Nie prędzej powiedziane niż zrobione.
Część serwerowa
Używamy gotowych
Wdrażamy nową maszynę wirtualną i przede wszystkim instalujemy ją na niej
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Uprzejmie użyjemy również konfiguracji dla Xorg
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 zainstalujemy Firefoksa, uruchomimy go jako usługę systemową, więc po pierwsze napiszemy dla niego plik jednostkowy:
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
Potrzebujemy Xdotool, aby natychmiast uruchomić Firefoxa w trybie pełnoekranowym.
Korzystanie z parametru -url
możesz określić dowolną stronę, aby otwierała się automatycznie po uruchomieniu przeglądarki.
Na tym etapie nasz kiosk jest gotowy, ale teraz musimy wyeksportować obraz przez sieć na inne monitory i urządzenia. Aby to zrobić, wykorzystamy możliwości
Do tego potrzebujemy dwóch rzeczy:
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
Ponieważ nasze zdjęcie nie wymaga szybkiej aktualizacji, określiłem częstotliwość odświeżania: 1 klatka na sekundę (parametr -r 1
) i jakość kompresji: 5 (parametr -q:v 5
)
Teraz spróbujmy przejść do
Część klienta
Tutaj jest jeszcze łatwiej, tak jak mówiłem, użyjemy Raspberry Pi Model B+.
Przede wszystkim zainstalujmy go
Będziemy również musieli przydzielić więcej pamięci dla naszego układu wideo, w tym celu będziemy edytować /boot/config.txt
gpu_mem=128
Uruchommy nasz nowy system i nie zapomnijmy zainicjować pęku kluczy pacmana, zainstalować
pacman -Sy omxplayer
Co ciekawe, OMXPlayer może działać bez x, więc wszystko, czego potrzebujemy, to napisać dla niego plik jednostkowy i uruchomić:
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
Jako parametr -b http://your-vm:8080/
przekazujemy adres URL z naszego serwera.
To wszystko, obraz z naszego serwera powinien natychmiast pojawić się na podłączonym ekranie. W przypadku jakichkolwiek problemów strumień zostanie automatycznie uruchomiony ponownie, a klienci ponownie się z nim połączą.
Jako bonus możesz zainstalować powstały obraz jako wygaszacz ekranu na wszystkich komputerach w biurze. Do tego będziesz potrzebować
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 Twoi koledzy będą bardzo zadowoleni 🙂
Źródło: www.habr.com