Имах нужда да изведа табло с мониторинг на няколко екрана в офиса. Има няколко стари Raspberry Pi Model B + и хипервайзор с почти неограничено количество ресурси.
Явно Raspberry Pi Model B+ няма достатъчно произволност, за да поддържа браузъра постоянно работещ и рендиране на много графики в него, поради което се случва страницата да е частично бъги и често да се срива.
Имаше едно доста просто и елегантно решение, което искам да споделя с вас.
Както знаете, всички Raspberries имат доста мощен видео процесор, който е чудесен за хардуерно видео декодиране. Така се появи идеята да стартирам браузър с табло на друго място и да прехвърля готов поток с рендирана картина в малината.
Плюс това, това трябва да има опростено управление, тъй като в този случай цялата конфигурация ще се извършва на една виртуална машина, която е по-лесна за актуализиране и архивиране.
Не по-рано казано, отколкото направено.
Сървърна част
Използваме готови
Разполагаме нова виртуална машина и първо я инсталираме на нея
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Ще използваме и конфигурацията за Xorg, любезно
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
Сега ще инсталираме Firefox, ще го стартираме като системна услуга, така че от една страна ще напишем единичен файл за него:
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, за да стартираме firefox веднага в режим на цял екран.
Използване на параметъра -url
можете да посочите всяка страница, така че да се отваря автоматично при стартиране на браузъра.
На този етап нашият киоск е готов, но сега трябва да експортираме изображението през мрежата към други монитори и устройства. За целта ще използваме възможностите
За това имаме нужда от две неща:
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
Тъй като нашата картина не изисква бърза актуализация, посочих честотата на опресняване: 1 кадър в секунда (параметър -r 1
) и качество на компресия: 5 (параметър -q:v 5
)
Сега нека се опитаме да отидем на
Клиентска страна
Тук все още е по-лесно, както казах, ще използваме Raspberry Pi Model B +.
Първо, нека го инсталираме
Също така ще трябва да отделим повече памет за нашия видео чип, за това ще редактираме /boot/config.txt
gpu_mem=128
Нека стартираме нашата нова система и не забравяйте да инициализирате ключодържателя на pacman, инсталирайте
pacman -Sy omxplayer
Забележително е, че OMXPlayer може да работи без x, така че всичко, от което се нуждаем, е да напишем единичен файл за него и да изпълним:
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
Като параметър -b http://your-vm:8080/
ние предаваме URL адреса от нашия сървър.
Това е всичко, картина от нашия сървър трябва веднага да се появи на свързания екран. В случай на проблеми, потокът автоматично ще се рестартира и клиентите ще се свържат отново с него.
Като бонус можете да инсталирате получената картина като скрийнсейвър на всички компютри в офиса. За това ще ви трябва
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
Сега вашите колеги ще бъдат много щастливи 🙂
Източник: www.habr.com