Узнікла ў мяне неабходнасць выводзіць дашборд з маніторынгам на некалькі экранаў у офісе. У распараджэнні маецца некалькі старых Raspberry Pi Model B + і гіпервізар з амаль неабмежаваным колькасцю рэсурсаў.
Па бачным Raspberry Pi Model B+ не валодае дастатковай адвольнасцю каб трымаць стала запушчаным браўзэр і адмалёўваць вялікую колькасць графікі ў ім, з-за чаго бывае, што старонка часткова глючыць і часта вылятае.
Знайшлося дастаткова простае і элегантнае рашэнне, якім я і хачу з вамі падзяліцца.
Як вядома ўсе Raspberry маюць дастаткова магутны відэапрацэсар, які выдатна падыходзіць для апаратнага дэкадавання відэа. Так з'явілася ідэя запускаць браўзэр з дашбордам дзе-небудзь яшчэ, а на малінку перадаваць гатовы струмень з отрендеренной карцінкай.
Плюс да ўсяго гэта павінна было спрасціць кіраванне, бо ў дадзеным выпадку ўся настройка будзе выконвацца на адной віртуалцы, якую прасцей абнаўляць і бэкапіць.
Сказана - зроблена.
Серверная частка
Мы скарыстаемся гатовым
Разгортваем новую віртуалку і перш за ўсё ўсталюем на ёй
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, запускаць мы яго будзем як system сэрвіс, так што за адно і напішам unit-файл для яго:
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 keyring, усталюем
pacman -Sy omxplayer
Што характэрна, OMXPlayer можа працаваць без іксаў, таму ўсё што нам патрабуецца — гэта напісаць unit-файл для яго і запусціць:
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
Цяпер вашыя калегі будуць вельмі задаволены 🙂
Крыніца: habr.com