Հեռարձակեք էկրանը մի քանի սարքերի ցանցի միջոցով

Հեռարձակեք էկրանը մի քանի սարքերի ցանցի միջոցով

Ես կարիք ունեի գրասենյակի մի քանի էկրանների վրա մոնիտորինգով վահանակ ցուցադրելու: Կան մի քանի հին Raspberry Pi Model B + և հիպերվիզոր՝ գրեթե անսահմանափակ քանակությամբ ռեսուրսներով:

Ըստ երևույթին, Raspberry Pi Model B+-ը չունի բավականաչափ պատահականություն, որպեսզի բրաուզերը անընդհատ աշխատի և դրանում շատ գրաֆիկա ներկայացնի, ինչի պատճառով էջը մասամբ խելագարված է և հաճախ խափանում է:

Բավականին պարզ և էլեգանտ լուծում կար, որով ուզում եմ կիսվել ձեզ հետ։

Ինչպես գիտեք, բոլոր Raspberries-ն ունեն բավականին հզոր վիդեո պրոցեսոր, որը հիանալի է ապարատային տեսանյութերի վերծանման համար: Այսպիսով, միտք ծագեց գործարկել բրաուզեր՝ վահանակով մեկ այլ տեղ, և պատրաստի հոսք փոխանցել ազնվամորիին:

Բացի այդ, սա պետք է ունենա պարզեցված կառավարում, քանի որ այս դեպքում բոլոր կոնֆիգուրացիան կկատարվի մեկ վիրտուալ մեքենայի վրա, որն ավելի հեշտ է թարմացնել և կրկնօրինակել:

Ոչ շուտ ասել, քան արվել:

Սերվերի մաս

Մենք օգտագործում ենք պատրաստ Ամպային պատկեր Ubuntu-ի համար. Չպահանջելով տեղադրում, այն պարունակում է այն ամենը, ինչ ձեզ անհրաժեշտ է վիրտուալ մեքենան արագ տեղակայելու համար և CloudInit աջակցություն օգնում է ակնթարթորեն ստեղծել ցանց, ավելացնել ssh ստեղներ և արագ գործարկել այն:

Մենք տեղադրում ենք նոր վիրտուալ մեքենա և առաջին հերթին տեղադրում դրա վրա Xorg, նոդմ и հոսքի տուփ:

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

Մեզ պետք է Xdotool, որպեսզի անմիջապես գործարկենք firefox-ը ամբողջ էկրանով ռեժիմում:
Օգտագործելով պարամետրը -url Դուք կարող եք նշել ցանկացած էջ, որպեսզի այն ավտոմատ կերպով բացվի, երբ բրաուզերը գործարկվի:

Այս փուլում մեր կրպակը պատրաստ է, բայց այժմ մենք պետք է պատկերը ցանցով արտահանենք այլ մոնիտորներ և սարքեր: Դա անելու համար մենք կօգտագործենք հնարավորությունները Շարժում JPEG, ձևաչափ, որն ավելի հաճախ օգտագործվում է վեբ-տեսախցիկների մեծ մասից տեսանյութերի հոսքի համար:

Դրա համար մեզ անհրաժեշտ է երկու բան. FFmpeg մոդուլով x11 գրավ, 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

Добавить комментарий