Jag hade ett behov av att visa en instrumentpanel med övervakning på flera skärmar på kontoret. Det finns flera gamla Raspberry Pi Model B+ och en hypervisor med en nästan obegränsad mängd resurser.
Tydligen har Raspberry Pi Model B+ inte tillräckligt med slumpmässighet för att hålla webbläsaren ständigt igång och rendera mycket grafik i den, på grund av vilket det händer att sidan är delvis buggig och ofta kraschar.
Det fanns en ganska enkel och elegant lösning, som jag vill dela med mig av.
Som ni vet har alla hallon en ganska kraftfull videoprocessor, vilket är utmärkt för hårdvaruvideoavkodning. Så idén kom upp att lansera en webbläsare med en instrumentpanel någon annanstans, och skicka en färdig stream med en renderad bild till hallonet.
Dessutom borde detta ha förenklat hanteringen, eftersom i detta fall all konfiguration kommer att utföras på en virtuell maskin, vilket är lättare att uppdatera och säkerhetskopiera.
Inte tidigare sagt än gjort.
Server del
Vi använder redo
Vi distribuerar en ny virtuell maskin och installerar den först och främst på den
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Vi kommer också att använda konfigurationen för Xorg, vänligen
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
Nu ska vi installera Firefox, vi kommer att köra den som en systemtjänst, så för en sak kommer vi att skriva en enhetsfil för den:
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
Vi behöver Xdotool för att kunna köra firefox omedelbart i helskärmsläge.
Använder parameter -url
du kan ange vilken sida som helst så att den öppnas automatiskt när webbläsaren startar.
I det här skedet är vår kiosk klar, men nu behöver vi exportera bilden över nätverket till andra bildskärmar och enheter. För att göra detta kommer vi att använda möjligheterna
För detta behöver vi två saker:
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
Eftersom vår bild inte kräver en snabb uppdatering, angav jag uppdateringsfrekvensen: 1 bildruta per sekund (parameter -r 1
) och komprimeringskvalitet: 5 (parameter -q:v 5
)
Nu ska vi försöka gå till
Klientsidan
Det är fortfarande enklare här, som sagt, vi kommer att använda Raspberry Pi Model B+.
Först och främst, låt oss installera det
Vi kommer också att behöva allokera mer minne för vårt videochip, för detta kommer vi att redigera in /boot/config.txt
gpu_mem=128
Låt oss starta upp vårt nya system och glöm inte att initialisera pacman-nyckelringen, installera
pacman -Sy omxplayer
Anmärkningsvärt nog kan OMXPlayer fungera utan X, så allt vi behöver är att skriva en enhetsfil för det och köra:
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
Som en parameter -b http://your-vm:8080/
vi skickar url från vår server.
Det är allt, en bild från vår server bör omedelbart visas på den anslutna skärmen. Vid eventuella problem kommer streamen att startas om automatiskt och klienter kommer att återansluta till den.
Som en bonus kan du installera den resulterande bilden som en skärmsläckare på alla datorer på kontoret. För detta behöver du
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
Nu kommer dina kollegor att bli väldigt glada 🙂
Källa: will.com