Transmetoni ekranin në pajisje të shumta përmes rrjetit

Transmetoni ekranin në pajisje të shumta përmes rrjetit

Kisha nevojë të shfaqja një panel me monitorim në disa ekrane në zyrë. Ka disa të vjetra Raspberry Pi Model B + dhe një hipervizor me një sasi pothuajse të pakufizuar burimesh.

Me sa duket, Raspberry Pi Model B+ nuk ka rastësi të mjaftueshme për ta mbajtur shfletuesin të funksionojë vazhdimisht dhe të shfaqë shumë grafikë në të, për shkak të së cilës ndodh që faqja të jetë pjesërisht me gabime dhe shpesh rrëzohet.

Kishte një zgjidhje mjaft të thjeshtë dhe elegante, të cilën dua ta ndaj me ju.

Siç e dini, të gjitha Raspberries kanë një procesor video mjaft të fuqishëm, i cili është i shkëlqyeshëm për dekodimin e videos harduerike. Kështu lindi ideja për të nisur një shfletues me një panel kontrolli diku tjetër, dhe për të transferuar një transmetim të gatshëm me një foto të dhënë në raspberry.

Plus, kjo duhet të ketë menaxhim të thjeshtuar, pasi në këtë rast i gjithë konfigurimi do të kryhet në një makinë virtuale, e cila është më e lehtë për tu përditësuar dhe rezervuar.

E thënë më shpejt se sa bëhet.

Pjesa e serverit

Ne përdorim gati Imazhi në renë kompjuterike për Ubuntu. Nuk kërkon instalim, ai përmban gjithçka që ju nevojitet për të vendosur shpejt një makinë virtuale dhe Mbështetje CloudInit ndihmon për të vendosur menjëherë një rrjet, për të shtuar çelësat ssh dhe për ta vënë atë shpejt në funksion.

Ne vendosim një makinë të re virtuale dhe para së gjithash e instalojmë në të xorg, nodm и fluksbox:

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

Ne gjithashtu do të përdorim konfigurimin për Xorg, me mirësi dhënë us Diego Ongaro, duke shtuar vetëm një rezolutë të re 1920 × 1080, pasi të gjithë monitorët tanë do ta përdorin atë:

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

Tani do të instalojmë Firefox-in, do ta ekzekutojmë si një shërbim sistemi, kështu që për një gjë do të shkruajmë një skedar njësi për të:

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

Ne kemi nevojë për Xdotool në mënyrë që të ekzekutojmë firefox menjëherë në modalitetin e ekranit të plotë.
Duke përdorur parametrin -url ju mund të specifikoni çdo faqe në mënyrë që ajo të hapet automatikisht kur shfletuesi fillon.

Në këtë fazë, kioska jonë është gati, por tani duhet të eksportojmë imazhin përmes rrjetit në monitorë dhe pajisje të tjera. Për ta bërë këtë, ne do të përdorim mundësitë Lëvizja JPEG, një format që përdoret më shpesh për transmetimin e videove nga shumica e kamerave të internetit.

Për këtë na duhen dy gjëra: ffmpeg me modul x11 kap, për kapjen e fotografive nga x dhe streamEye, e cila do ta shpërndajë atë tek klientët tanë:

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

Meqenëse fotografia jonë nuk kërkon një përditësim të shpejtë, unë specifikova shpejtësinë e rifreskimit: 1 kornizë për sekondë (parametër -r 1) dhe cilësia e kompresimit: 5 (parametri -q:v 5)

Tani le të përpiqemi të shkojmë në http://your-vm:8080/, si përgjigje do të shihni një pamje të ekranit të desktopit të përditësuar vazhdimisht. E shkëlqyeshme! - çfarë duhej.

Nga ana e klientit

Është akoma më e lehtë këtu, siç thashë, ne do të përdorim Raspberry Pi Model B +.

Para së gjithash, le ta instalojmë ArchLinux ARM, për këtë ndjekim udhëzime në faqen zyrtare.

Do të na duhet gjithashtu të ndajmë më shumë memorie për çipin tonë video, për këtë do ta modifikojmë /boot/config.txt

gpu_mem=128

Le të nisim sistemin tonë të ri dhe të mos harrojmë të inicializojmë tastierën pacman, instalojmë OMXPlayer:

pacman -Sy omxplayer

Çuditërisht, OMXPlayer mund të funksionojë pa x, kështu që gjithçka që na nevojitet është të shkruajmë një skedar njësi për të dhe të ekzekutojmë:

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

Si parametër -b http://your-vm:8080/ ne po kalojmë url-në nga serveri ynë.

Kjo është e gjitha, një fotografi nga serveri ynë duhet të shfaqet menjëherë në ekranin e lidhur. Në rast të ndonjë problemi, transmetimi do të riniset automatikisht dhe klientët do të rilidhen me të.

Si një bonus, ju mund të instaloni foton që rezulton si një mbrojtës ekrani në të gjithë kompjuterët në zyrë. Për këtë do t'ju duhet 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

Tani kolegët tuaj do të jenë shumë të lumtur 🙂

Burimi: www.habr.com

Shto një koment