Jeg hadde et behov for å vise et dashbord med overvåking på flere skjermer på kontoret. Det er flere gamle Raspberry Pi Model B+ og en hypervisor med en nesten ubegrenset mengde ressurser.
Tilsynelatende har Raspberry Pi Model B+ ikke nok tilfeldighet til å holde nettleseren konstant i gang og gjengi mye grafikk i den, på grunn av dette skjer det at siden er delvis buggy og ofte krasjer.
Det var en ganske enkel og elegant løsning, som jeg vil dele med dere.
Som du vet, har alle bringebær en ganske kraftig videoprosessor, som er flott for maskinvarevideodekoding. Så ideen kom opp om å lansere en nettleser med dashbord et annet sted, og overføre en ferdig strøm med et gjengitt bilde til bringebæret.
I tillegg burde dette ha forenklet administrasjonen, siden i dette tilfellet vil all konfigurasjon utføres på én virtuell maskin, som er enklere å oppdatere og sikkerhetskopiere.
Ikke før sagt enn gjort.
Server del
Vi bruker klar
Vi distribuerer en ny virtuell maskin og først og fremst installerer den 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 vil også bruke konfigurasjonen for Xorg, vennligst
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
Nå skal vi installere Firefox, vi vil kjøre den som en systemtjeneste, så for en ting vil vi skrive en enhetsfil for 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 trenger Xdotool for å kjøre firefox umiddelbart i fullskjermmodus.
Bruker parameter -url
du kan spesifisere hvilken som helst side slik at den åpnes automatisk når nettleseren starter.
På dette stadiet er kiosken vår klar, men nå må vi eksportere bildet over nettverket til andre skjermer og enheter. For å gjøre dette vil vi bruke mulighetene
Til dette trenger vi to ting:
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
Siden bildet vårt ikke krever en rask oppdatering, spesifiserte jeg oppdateringsfrekvensen: 1 bilde per sekund (parameter -r 1
) og komprimeringskvalitet: 5 (parameter -q:v 5
)
La oss nå prøve å gå til
Klient side
Det er fortsatt enklere her, som jeg sa, vi vil bruke Raspberry Pi Model B+.
Først av alt, la oss installere det
Vi må også tildele mer minne til videobrikken vår, for dette vil vi redigere inn /boot/config.txt
gpu_mem=128
La oss starte opp vårt nye system og ikke glem å initialisere pacman-nøkkelringen, installer
pacman -Sy omxplayer
Bemerkelsesverdig nok kan OMXPlayer fungere uten X, så alt vi trenger er å skrive en enhetsfil for den og kjøre:
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 sender url fra serveren vår.
Det er alt, et bilde fra serveren vår skal umiddelbart vises på den tilkoblede skjermen. Hvis det oppstår problemer, vil strømmen automatisk startes på nytt og klienter kobler seg til den igjen.
Som en bonus kan du installere det resulterende bildet som en skjermsparer på alle datamaskiner på kontoret. For dette trenger 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
Nå blir kollegene dine veldig glade 🙂
Kilde: www.habr.com