Straumējiet ekrānu uz vairākām ierīcēm tīklā

Straumējiet ekrānu uz vairākām ierīcēm tīklā

Man bija nepieciešams parādīt informācijas paneli ar uzraudzību vairākos biroja ekrānos. Ir vairāki veci Raspberry Pi Model B+ un hipervizors ar gandrīz neierobežotu resursu daudzumu.

Acīmredzot Raspberry Pi Model B+ nav pietiekami daudz nejaušības, lai pārlūkprogramma nepārtraukti darbotos un tajā tiktu renderēts daudz grafikas, kā dēļ gadās, ka lapa ir daļēji buggy un bieži avarē.

Bija diezgan vienkāršs un elegants risinājums, ar kuru es vēlos dalīties ar jums.

Kā zināms, visām Raspberries ir diezgan jaudīgs video procesors, kas lieliski noder aparatūras video dekodēšanai. Tā radās ideja palaist pārlūkprogrammu ar informācijas paneli kaut kur citur un nosūtīt gatavu straumi ar renderētu attēlu uz aveņu.

Turklāt tam vajadzētu būt vienkāršotai pārvaldībai, jo šajā gadījumā visa konfigurācija tiks veikta vienā virtuālajā mašīnā, kuru ir vieglāk atjaunināt un dublēt.

Ne ātrāk pateikts, kā izdarīts.

Servera daļa

Mēs izmantojam gatavu Mākoņa attēls Ubuntu. Nav nepieciešama instalēšana, tajā ir viss nepieciešamais, lai ātri izvietotu virtuālo mašīnu un CloudInit atbalsts palīdz uzreiz izveidot tīklu, pievienot ssh atslēgas un ātri nodot to ekspluatācijā.

Mēs izvietojam jaunu virtuālo mašīnu un vispirms instalējam to tajā Xorg, nodm и plūsmas kaste:

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

Mēs arī izmantosim Xorg konfigurāciju piešķirts mums Djego Ongaro, pievienojot tikai jaunu izšķirtspēju 1920 × 1080, jo visi mūsu monitori to izmantos:

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

Tagad mēs instalēsim Firefox, mēs to darbosim kā sistēmas pakalpojumu, tāpēc vienai lietai mēs tam uzrakstīsim vienības failu:

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

Mums ir nepieciešams Xdotool, lai nekavējoties palaistu Firefox pilnekrāna režīmā.
Izmantojot parametru -url varat norādīt jebkuru lapu, lai tā tiktu automātiski atvērta, startējot pārlūkprogrammu.

Šajā posmā mūsu kiosks ir gatavs, taču tagad mums ir jāeksportē attēls tīklā uz citiem monitoriem un ierīcēm. Lai to izdarītu, mēs izmantosim iespējas Kustīgs JPEG, formāts, ko biežāk izmanto video straumēšanai no vairuma tīmekļa kameru.

Šim nolūkam mums ir vajadzīgas divas lietas: FFmpeg ar moduli x11 grab, attēlu uzņemšanai no x un straumeEye, kas to izplatīs mūsu klientiem:

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

Tā kā mūsu attēlam nav nepieciešama ātra atjaunināšana, es norādīju atsvaidzes intensitāti: 1 kadrs sekundē (parametrs -r 1) un saspiešanas kvalitāte: 5 (parametrs -q:v 5)

Tagad mēģināsim doties uz http://your-vm:8080/, atbildot uz to, jūs redzēsit pastāvīgi atjauninātu darbvirsmas ekrānuzņēmumu. Lieliski! — kas bija vajadzīgs.

Klienta puse

Šeit joprojām ir vieglāk, kā jau teicu, mēs izmantosim Raspberry Pi Model B+.

Pirmkārt, instalēsim to ArchLinux ARM, šim mēs sekojam instrukcijas oficiālajā vietnē.

Mums būs arī jāpiešķir vairāk atmiņas mūsu video mikroshēmai, lai to rediģētu /boot/config.txt

gpu_mem=128

Sāknēsim savu jauno sistēmu un neaizmirsīsim inicializēt pacman atslēgu piekariņu, instalējiet OMXPlayer:

pacman -Sy omxplayer

Jāatzīmē, ka OMXPlayer var darboties bez x, tāpēc viss, kas mums nepieciešams, ir uzrakstīt tam vienības failu un palaist:

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

Kā parametrs -b http://your-vm:8080/ mēs nododam URL no sava servera.

Tas arī viss, pievienotajā ekrānā nekavējoties jāparādās attēlam no mūsu servera. Problēmu gadījumā straume tiks automātiski restartēta, un klienti ar to atkal izveidos savienojumu.

Kā bonusu jūs varat instalēt iegūto attēlu kā ekrānsaudzētāju visos biroja datoros. Šim nolūkam jums būs nepieciešams 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

Tagad jūsu kolēģi būs ļoti priecīgi 🙂

Avots: www.habr.com

Pievieno komentāru