Vaig tenir la necessitat de mostrar un tauler de control amb monitoratge a diverses pantalles de l'oficina. Hi ha diversos antics Raspberry Pi Model B + i un hipervisor amb una quantitat gairebé il·limitada de recursos.
Aparentment, el Raspberry Pi Model B+ no té prou aleatorietat per mantenir el navegador en execució constant i representar-hi molts gràfics, per la qual cosa passa que la pàgina té errors parcials i sovint es bloqueja.
Hi havia una solució bastant senzilla i elegant, que vull compartir amb vosaltres.
Com sabeu, tots els Raspberries tenen un processador de vídeo força potent, ideal per a la descodificació de vídeo de maquinari. Així que va sorgir la idea de llançar un navegador amb un tauler en un altre lloc i transferir un flux ja fet amb una imatge renderitzada al gerd.
A més, això hauria de tenir una gestió simplificada, ja que en aquest cas tota la configuració es realitzarà en una màquina virtual, que és més fàcil d'actualitzar i de còpia de seguretat.
No més aviat dir que fet.
Part del servidor
Utilitzem llestos
Despleguem una nova màquina virtual i primer de tot l'instal·lem en ella
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
També utilitzarem la configuració de Xorg, amablement
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
Ara instal·larem Firefox, l'executarem com a servei del sistema, així que, d'una banda, escriurem un fitxer d'unitat:
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
Necessitem Xdotool per executar Firefox immediatament en mode de pantalla completa.
Utilitzant el paràmetre -url
podeu especificar qualsevol pàgina perquè s'obri automàticament quan s'iniciï el navegador.
En aquesta fase, el nostre quiosc està preparat, però ara hem d'exportar la imatge a través de la xarxa a altres monitors i dispositius. Per fer-ho, utilitzarem les possibilitats
Per a això necessitem dues coses:
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
Com que la nostra imatge no requereix una actualització ràpida, he especificat la freqüència de refresc: 1 fotograma per segon (paràmetre -r 1
) i qualitat de compressió: 5 (paràmetre -q:v 5
)
Ara intentem anar a
costat del client
Aquí encara és més fàcil, com he dit, utilitzarem el Raspberry Pi Model B +.
En primer lloc, instal·lem-lo
També haurem d'assignar més memòria per al nostre xip de vídeo, per això editarem /boot/config.txt
gpu_mem=128
Arrenquem el nostre nou sistema i no oblideu inicialitzar l'anell de claus pacman, instal·lar-lo
pacman -Sy omxplayer
Sorprenentment, OMXPlayer pot funcionar sense x, de manera que tot el que necessitem és escriure un fitxer d'unitat i executar:
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
Com a paràmetre -b http://your-vm:8080/
estem passant l'URL del nostre servidor.
Això és tot, una imatge del nostre servidor hauria d'aparèixer immediatament a la pantalla connectada. En cas de problemes, el flux es reiniciarà automàticament i els clients es tornaran a connectar.
Com a avantatge, podeu instal·lar la imatge resultant com a salvapantalles a tots els ordinadors de l'oficina. Per això necessitareu
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
Ara els teus companys estaran molt contents 🙂
Font: www.habr.com