Jeg havde et behov for at vise et dashboard med overvågning på flere skærme på kontoret. Der er flere gamle Raspberry Pi Model B+ og en hypervisor med en næsten ubegrænset mængde ressourcer.
Tilsyneladende har Raspberry Pi Model B+ ikke nok tilfældighed til at holde browseren konstant kørende og gengive en masse grafik i den, hvorfor det sker, at siden er delvis buggy og ofte går ned.
Der var en ret simpel og elegant løsning, som jeg vil dele med jer.
Som du ved, har alle hindbær en ret kraftig videoprocessor, som er fantastisk til hardware videoafkodning. Så ideen kom op til at starte en browser med et dashboard et andet sted og overføre en færdig stream med et gengivet billede til hindbæret.
Plus, dette burde have forenklet administrationen, da al konfiguration i dette tilfælde vil blive udført på én virtuel maskine, som er lettere at opdatere og sikkerhedskopiere.
Ikke før sagt end gjort.
Server del
Vi bruger klar
Vi installerer en ny virtuel maskine og installerer den først og fremmest 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å bruge konfigurationen til Xorg, venligst
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 vil vi installere Firefox, vi vil køre det som en systemtjeneste, så for en ting vil vi skrive en enhedsfil til det:
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
Xdotool er nødvendigt for os for at køre firefox med det samme i fuldskærmstilstand.
Brug af parameteren -url
du kan angive en hvilken som helst side, så den åbner automatisk, når browseren starter.
På dette tidspunkt er vores kiosk klar, men nu skal vi eksportere billedet over netværket til andre skærme og enheder. For at gøre dette vil vi bruge mulighederne
Til dette har vi brug for 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
Da vores billede ikke kræver en hurtig opdatering, specificerede jeg opdateringshastigheden: 1 frame per sekund (parameter -r 1
) og kompressionskvalitet: 5 (parameter -q:v 5
)
Lad os nu prøve at gå til
Kundedel
Det er stadig nemmere her, som sagt vil vi bruge Raspberry Pi Model B+.
Først og fremmest, lad os installere det
Vi bliver også nødt til at allokere mere hukommelse til vores videochip, til dette vil vi redigere /boot/config.txt
gpu_mem=128
Lad os starte vores nye system og glem ikke at initialisere pacman nøgleringen, installer
pacman -Sy omxplayer
Bemærkelsesværdigt nok kan OMXPlayer fungere uden x, så alt hvad vi behøver er at skrive en enhedsfil til det og kø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 parameter -b http://your-vm:8080/
vi sender url'en fra vores server.
Det er alt, et billede fra vores server skulle straks vises på den tilsluttede skærm. I tilfælde af problemer, genstartes streamen automatisk, og klienter vil genoprette forbindelse til den.
Som en bonus kan du installere det resulterende billede som en pauseskærm på alle computere på kontoret. Til dette skal du bruge
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 bliver dine kolleger meget glade 🙂
Kilde: www.habr.com