J'avais un besoin d'afficher un tableau de bord avec suivi sur plusieurs écrans au bureau. Il existe plusieurs anciens Raspberry Pi Model B+ et un hyperviseur avec une quantité quasi illimitée de ressources.
Apparemment, le Raspberry Pi Model B+ n'a pas assez d'aléatoire pour que le navigateur fonctionne constamment et affiche beaucoup de graphiques, à cause de quoi il arrive que la page soit partiellement boguée et se bloque souvent.
Il y avait une solution assez simple et élégante, que je veux partager avec vous.
Comme vous le savez, toutes les framboises ont un processeur vidéo assez puissant, ce qui est idéal pour le décodage vidéo matériel. L'idée est donc venue de lancer un navigateur avec un tableau de bord ailleurs et d'envoyer un flux prêt à l'emploi avec une image rendue à la framboise.
De plus, cela devrait avoir une gestion simplifiée, puisque dans ce cas, toute la configuration sera effectuée sur une seule machine virtuelle, ce qui est plus facile à mettre à jour et à sauvegarder.
À peine dit que c'était fait.
Partie serveur
Nous utilisons prêt
Nous déployons une nouvelle machine virtuelle et l'installons d'abord dessus
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Nous utiliserons également la configuration pour Xorg, veuillez
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
Maintenant, nous allons installer Firefox, nous allons l'exécuter en tant que service système, donc pour commencer, nous allons écrire un fichier unité pour lui :
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
Nous avons besoin de Xdotool pour exécuter firefox immédiatement en mode plein écran.
Utilisation du paramètre -url
vous pouvez spécifier n'importe quelle page pour qu'elle s'ouvre automatiquement au démarrage du navigateur.
À ce stade, notre kiosque est prêt, mais nous devons maintenant exporter l'image via le réseau vers d'autres moniteurs et appareils. Pour ce faire, nous utiliserons les possibilités
Pour cela, nous avons besoin de deux choses :
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
Comme notre image ne nécessite pas de mise à jour rapide, j'ai précisé le taux de rafraichissement : 1 image par seconde (paramètre -r 1
) et qualité de compression : 5 (paramètre -q:v 5
)
Essayons maintenant d'aller à
Côté client
C'est quand même plus simple ici, comme je l'ai dit, on va utiliser le Raspberry Pi Model B+.
Tout d'abord, installons-le
Nous devrons également allouer plus de mémoire pour notre puce vidéo, pour cela nous allons éditer en /boot/config.txt
gpu_mem=128
Démarrons notre nouveau système et n'oubliez pas d'initialiser le trousseau de clés pacman, installez
pacman -Sy omxplayer
Remarquablement, OMXPlayer peut fonctionner sans X, donc tout ce dont nous avons besoin est d'écrire un fichier d'unité pour lui et d'exécuter :
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
En tant que paramètre -b http://your-vm:8080/
nous transmettons l'URL de notre serveur.
C'est tout, une image de notre serveur devrait apparaître immédiatement sur l'écran connecté. En cas de problème, le flux sera automatiquement redémarré et les clients s'y reconnecteront.
En prime, vous pouvez installer l'image résultante comme économiseur d'écran sur tous les ordinateurs du bureau. Pour cela, vous aurez besoin
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
Maintenant, vos collègues seront très heureux 🙂
Source: habr.com