Тармак аркылуу бир нече түзмөктөргө экранды агым

Тармак аркылуу бир нече түзмөктөргө экранды агым

Мен кеңседеги бир нече экрандарда мониторинги бар башкаруу тактасын көрсөтүүгө муктаж болдум. Бир нече эски Raspberry Pi Model B + жана ресурстардын дээрлик чексиз көлөмү бар гипервизор бар.

Кыязы, Raspberry Pi Model B+ браузерди тынымсыз иштетүү жана андагы көптөгөн графикаларды көрсөтүү үчүн кокустукка ээ эмес, андыктан барак жарым-жартылай ката болуп, көп учурда бузулуп калат.

Мен сиз менен бөлүшкүм келген абдан жөнөкөй жана жарашыктуу чечим бар эле.

Белгилүү болгондой, бардык Raspberries бир кыйла күчтүү видео процессорго ээ, ал аппараттык видеону чечмелөө үчүн эң сонун. Ошентип, башка жерде башкаруу панели бар браузерди ишке киргизүү жана рендерленген сүрөтү бар даяр агымды малинага өткөрүү идеясы келди.

Мындан тышкары, бул жөнөкөйлөштүрүлгөн башкаруу болушу керек, анткени бул учурда бардык конфигурация бир виртуалдык машинада аткарылат, аны жаңыртуу жана резервдик көчүрүү оңой.

Жок эртеби кылганга караганда айтып коюу.

Сервер бөлүгү

Биз даяр колдонобуз Ubuntu үчүн Cloud Image. Эч кандай орнотууну талап кылбастан, анда виртуалдык машинаны тез жайгаштыруу үчүн керектүү нерселердин бардыгы камтылган жана CloudInit колдоосу тармакты дароо орнотууга, ssh баскычтарын кошууга жана аны тез ишке киргизүүгө жардам берет.

Биз жаңы виртуалдык машинаны орнотуп, биринчи кезекте аны орнотобуз Xorg, nodm и флюс куту:

apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm

Ошондой эле Xorg үчүн конфигурацияны колдонобуз берилген бизди Диего Онгаро, бир гана жаңы токтомду кошуп 1920 × 1080, анткени биздин бардык мониторлор аны колдонот:

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

Firefoxту дароо толук экран режиминде иштетүү үчүн бизге Xdotool керек.
Параметрди колдонуу -url браузер башталганда ал автоматтык түрдө ачыла тургандай каалаган баракты белгилей аласыз.

Бул этапта биздин киоск даяр, бирок азыр биз сүрөттү тармак аркылуу башка мониторлорго жана түзмөктөргө экспорттообуз керек. Бул үчүн биз мүмкүнчүлүктөрдү пайдаланабыз Motion JPEG, көпчүлүк веб-камералардан видеону агылтуу үчүн кеңири колдонулган формат.

Бул үчүн бизге эки нерсе керек: FFmpeg модулу менен x11grab, x жана сүрөттөрдөн сүрөттөрдү тартуу үчүн streamEye, аны биздин кардарларга таратат:

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)

Эми барууга аракет кылалы http://your-vm:8080/, жооп катары сиз иш тактасынын дайыма жаңыртылган скриншотун көрөсүз. Абдан жакшы! — эмне керек эле.

Кардар тарап

Бул жерде дагы деле оңой, мен айткандай, биз Raspberry Pi Model B + колдонобуз.

Биринчиден, аны орнотуп алалы ArchLinux ARM, бул үчүн биз ээрчип жатабыз көрсөтмөлөрү расмий сайтында.

Ошондой эле видео чипибизге көбүрөөк эстутум бөлүшүбүз керек, бул үчүн биз түзөтөбүз /boot/config.txt

gpu_mem=128

Келгиле, жаңы системабызды жүктөйбүз жана pacman ачкычын инициализациялоону, орнотууну унутпаңыз OMXPlayer:

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 өткөрүп жатабыз.

Болгону, биздин сервердин сүрөтү туташкан экранда дароо пайда болушу керек. Кандайдыр бир көйгөй жаралса, агым автоматтык түрдө кайра башталат жана кардарлар ага кайра туташат.

Бонус катары, сиз пайда болгон сүрөттү офистеги бардык компьютерлерге экран сактагыч катары орното аласыз. Бул үчүн сизге керек болот MPV и XScreenSaver:

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

Эми кесиптештериңиз абдан сүйүнүшөт 🙂

Source: www.habr.com

Комментарий кошуу