Tiven a necesidade de mostrar un panel de control con monitorización en varias pantallas da oficina. Hai varios antigos Raspberry Pi Model B + e un hipervisor cunha cantidade case ilimitada de recursos.
Ao parecer, o Raspberry Pi Model B+ non ten suficiente aleatoriedade para manter o navegador funcionando constantemente e mostrando moitos gráficos nel, polo que ocorre que a páxina está parcialmente con erros e adoita fallar.
Houbo unha solución bastante sinxela e elegante, que quero compartir contigo.
Como sabes, todos os Raspberries teñen un procesador de vídeo bastante potente, que é excelente para a decodificación de vídeo de hardware. Entón, xurdiu a idea de lanzar un navegador cun panel noutro lugar e enviar un fluxo preparado cunha imaxe renderizada á framboesa.
Ademais, esta debería ter unha xestión simplificada, xa que neste caso toda a configuración realizarase nunha máquina virtual, que é máis fácil de actualizar e facer copias de seguridade.
Nada máis dicir que feito.
Parte do servidor
Usamos listo
Implementamos unha nova máquina virtual e, en primeiro lugar, instalamos nela
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Tamén usaremos a configuración de Xorg, por favor
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
Agora instalaremos Firefox, executarémolo como servizo do sistema, polo que, por unha banda, escribiremos un ficheiro unitario para el:
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
Necesitamos Xdotool para executar Firefox inmediatamente en modo de pantalla completa.
Usando o parámetro -url
pode especificar calquera páxina para que se abra automaticamente cando se inicie o navegador.
Nesta fase, o noso quiosco está listo, pero agora necesitamos exportar a imaxe pola rede a outros monitores e dispositivos. Para iso, utilizaremos as posibilidades
Para iso necesitamos dúas cousas:
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
Dado que a nosa imaxe non require unha actualización rápida, especifiquei a frecuencia de actualización: 1 fotograma por segundo (parámetro -r 1
) e calidade de compresión: 5 (parámetro -q:v 5
)
Agora imos tentar ir
Lado do cliente
Aínda é máis fácil aquí, como dixen, usaremos o Raspberry Pi Model B +.
Primeiro de todo, imos instalalo
Tamén teremos que asignar máis memoria para o noso chip de vídeo, para iso editarémolo /boot/config.txt
gpu_mem=128
Arranquemos o noso novo sistema e non esquezas inicializar o anel de chaves pacman, instalalo
pacman -Sy omxplayer
Sorprendentemente, OMXPlayer pode funcionar sen X, polo que todo o que necesitamos é escribir un ficheiro de unidade para el e 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
Como parámetro -b http://your-vm:8080/
estamos pasando o URL do noso servidor.
Iso é todo, unha imaxe do noso servidor debería aparecer inmediatamente na pantalla conectada. Se hai algún problema, o fluxo reiniciarase automaticamente e os clientes volverán conectarse a el.
Como extra, podes instalar a imaxe resultante como protector de pantalla en todos os ordenadores da oficina. Para iso necesitarás
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
Agora os teus compañeiros estarán moi contentos 🙂
Fonte: www.habr.com