Man teko rodyti prietaisų skydelį su stebėjimu keliuose biuro ekranuose. Yra keletas senų Raspberry Pi Model B + ir hipervizorius su beveik neribotu išteklių kiekiu.
Matyt, Raspberry Pi Model B+ neužtenka atsitiktinumo, kad naršyklė nuolat veiktų ir joje atvaizduotų daug grafikos, dėl to nutinka taip, kad puslapis iš dalies būna bugiškas ir dažnai sugenda.
Buvo gana paprastas ir elegantiškas sprendimas, kuriuo noriu su jumis pasidalinti.
Kaip žinote, visos Raspberry turi gana galingą vaizdo procesorių, kuris puikiai tinka aparatinei vaizdo dekodavimui. Taigi kilo mintis kur nors kitur paleisti naršyklę su prietaisų skydeliu, o paruoštą srautą su atvaizduotu paveikslėliu perkelti į avietę.
Be to, tai turėtų supaprastinti valdymą, nes tokiu atveju visa konfigūracija bus atliekama vienoje virtualioje mašinoje, kurią lengviau atnaujinti ir sukurti atsarginę kopiją.
Ne anksčiau pasakyta, nei padaryta.
Serverio dalis
Mes naudojame paruoštą
Diegiame naują virtualią mašiną ir pirmiausia ją įdiegiame joje
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Taip pat maloniai naudosime Xorg konfigūraciją
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
Dabar įdiegsime „Firefox“, paleisime kaip sisteminę paslaugą, todėl viena vertus, parašysime jai vienetinį failą:
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 reikia „Xdotool“, kad „Firefox“ būtų paleista iš karto viso ekrano režimu.
Naudojant parametrą -url
galite nurodyti bet kurį puslapį, kad jis būtų atidarytas automatiškai, kai paleidžiama naršyklė.
Šiame etape mūsų kioskas yra paruoštas, bet dabar turime eksportuoti vaizdą per tinklą į kitus monitorius ir įrenginius. Norėdami tai padaryti, pasinaudosime galimybėmis
Tam mums reikia dviejų dalykų:
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
Kadangi mūsų nuotraukai nereikia greito atnaujinimo, nurodžiau atnaujinimo dažnį: 1 kadras per sekundę (parametras -r 1
) ir suspaudimo kokybė: 5 (parametras -q:v 5
)
Dabar pabandykime eiti į
Kliento pusė
Čia vis tiek lengviau, kaip sakiau, naudosime Raspberry Pi Model B+.
Visų pirma, įdiegkime
Taip pat turėsime skirti daugiau atminties savo vaizdo lustui, tam mes redaguosime /boot/config.txt
gpu_mem=128
Įkelkime naują sistemą ir nepamirškime inicijuoti pacman raktų žiedo, įdiegti
pacman -Sy omxplayer
Pažymėtina, kad OMXPlayer gali veikti be X, todėl mums tereikia parašyti vienetinį failą ir paleisti:
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
Kaip parametras -b http://your-vm:8080/
mes perduodame URL iš savo serverio.
Tai viskas, mūsų serverio nuotrauka iš karto turėtų pasirodyti prijungtame ekrane. Kilus problemoms, srautas bus automatiškai paleistas iš naujo ir klientai vėl prie jo prisijungs.
Kaip premiją galite įdiegti gautą paveikslėlį kaip ekrano užsklandą visuose biuro kompiuteriuose. Tam jums reikės
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
Dabar jūsų kolegos bus labai laimingi 🙂
Šaltinis: www.habr.com