Avevo la necessità di visualizzare una dashboard con monitoraggio su più schermi in ufficio. Esistono diversi vecchi Raspberry Pi Model B + e un hypervisor con una quantità quasi illimitata di risorse.
Apparentemente il Raspberry Pi Model B+ non ha abbastanza casualità per mantenere il browser costantemente in esecuzione e renderizzare molta grafica al suo interno, per cui capita che la pagina sia parzialmente buggata e spesso si blocchi.
C'era una soluzione abbastanza semplice ed elegante, che voglio condividere con voi.
Come sai, tutti i lamponi hanno un processore video abbastanza potente, ottimo per la decodifica video hardware. Quindi è nata l'idea di avviare un browser con una dashboard da qualche altra parte e trasferire un flusso già pronto con un'immagine renderizzata al lampone.
Inoltre, ciò dovrebbe avere una gestione semplificata, poiché in questo caso tutta la configurazione verrà eseguita su una macchina virtuale, che è più facile da aggiornare e fare il backup.
Detto fatto.
Parte server
Usiamo pronto
Distribuiamo una nuova macchina virtuale e prima di tutto la installiamo su di essa
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Useremo anche la configurazione per Xorg, gentilmente
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
Ora installeremo Firefox, lo eseguiremo come servizio di sistema, quindi per prima cosa scriveremo un file unit per esso:
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 è necessario per noi per eseguire immediatamente Firefox in modalità a schermo intero.
Usando il parametro -url
puoi specificare qualsiasi pagina in modo che si apra automaticamente all'avvio del browser.
A questo punto il nostro chiosco è pronto, ma ora dobbiamo esportare l'immagine attraverso la rete su altri monitor e dispositivi. Per fare questo, useremo le possibilità
Per questo abbiamo bisogno di due cose:
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
Poiché la nostra immagine non richiede un aggiornamento rapido, ho specificato la frequenza di aggiornamento: 1 fotogramma al secondo (parametro -r 1
) e qualità di compressione: 5 (parametro -q:v 5
)
Ora proviamo ad andare a
Dalla parte del cliente
È ancora più facile qui, come ho detto, useremo il Raspberry Pi Model B +.
Prima di tutto, installiamolo
Avremo anche bisogno di allocare più memoria per il nostro chip video, per questo lo modificheremo /boot/config.txt
gpu_mem=128
Avviamo il nostro nuovo sistema e non dimenticate di inizializzare il keyring di pacman, install
pacman -Sy omxplayer
Sorprendentemente, OMXPlayer può funzionare senza x, quindi tutto ciò di cui abbiamo bisogno è scrivere un file unit per esso ed eseguire:
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
Come parametro -b http://your-vm:8080/
stiamo passando l'URL dal nostro server.
Questo è tutto, un'immagine dal nostro server dovrebbe apparire immediatamente sullo schermo connesso. In caso di problemi, lo stream verrà riavviato automaticamente e i client si riconnetteranno ad esso.
Come bonus, puoi installare l'immagine risultante come salvaschermo su tutti i computer dell'ufficio. Per questo avrai bisogno
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
Ora i tuoi colleghi saranno molto felici 🙂
Fonte: habr.com