Tenía la necesidad de mostrar un tablero con monitoreo en varias pantallas en la oficina. Hay varias Raspberry Pi Model B+ antiguas y un hipervisor con una cantidad de recursos casi ilimitada.
Aparentemente, el Raspberry Pi Model B+ no tiene suficiente aleatoriedad para mantener el navegador funcionando constantemente y mostrando una gran cantidad de gráficos en él, por lo que sucede que la página tiene errores parciales y, a menudo, se bloquea.
Hubo una solución bastante simple y elegante, que quiero compartir con ustedes.
Como saben, todas las Raspberry tienen un procesador de video bastante potente, lo cual es excelente para la decodificación de video por hardware. Así que surgió la idea de lanzar un navegador con un tablero en otro lugar y transferir una transmisión ya preparada con una imagen renderizada a la frambuesa.
Además, esto debería haber simplificado la administración, ya que en este caso toda la configuración se realizará en una máquina virtual, que es más fácil de actualizar y respaldar.
Dicho y hecho.
parte del servidor
usamos listo
Implementamos una nueva máquina virtual y, en primer lugar, la instalamos en ella.
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
También usaremos la configuración para Xorg, amablemente
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
Ahora instalaremos Firefox, lo ejecutaremos como un servicio del sistema, por lo que, en primer lugar, escribiremos un archivo de unidad para él:
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 ejecutar firefox inmediatamente en modo de pantalla completa.
Usando el parámetro -url
puede especificar cualquier página para que se abra automáticamente cuando se inicia el navegador.
En esta etapa, nuestro quiosco está listo, pero ahora necesitamos exportar la imagen a través de la red a otros monitores y dispositivos. Para ello, utilizaremos las posibilidades
Para esto necesitamos dos cosas:
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 nuestra imagen no requiere una actualización rápida, especifiqué la frecuencia de actualización: 1 cuadro por segundo (parámetro -r 1
) y calidad de compresión: 5 (parámetro -q:v 5
)
Ahora intentemos ir a
Lado del cliente
Todavía es más fácil aquí, como dije, usaremos el Raspberry Pi Model B +.
En primer lugar, vamos a instalarlo.
También necesitaremos asignar más memoria para nuestro chip de video, para esto editaremos en /boot/config.txt
gpu_mem=128
Iniciemos nuestro nuevo sistema y no olvidemos inicializar el llavero de pacman, instalar
pacman -Sy omxplayer
Sorprendentemente, OMXPlayer puede funcionar sin x, por lo que todo lo que necesitamos es escribir un archivo de unidad para él y ejecutar:
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 la url desde nuestro servidor.
Eso es todo, una imagen de nuestro servidor debería aparecer inmediatamente en la pantalla conectada. En caso de problemas, la transmisión se reiniciará automáticamente y los clientes se volverán a conectar.
Como beneficio adicional, puede instalar la imagen resultante como protector de pantalla en todas las computadoras de la oficina. Para esto 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
Ahora tus compañeros estarán muy contentos 🙂
Fuente: habr.com