Ekranı ağ üzerinden birden fazla cihaza aktarın

Ekranı ağ üzerinden birden fazla cihaza aktarın

Ofiste birkaç ekranda izleme içeren bir pano görüntülemeye ihtiyacım vardı. Birkaç eski Raspberry Pi Model B + ve neredeyse sınırsız miktarda kaynağa sahip bir hipervizör var.

Görünüşe göre Raspberry Pi Model B+, tarayıcının sürekli çalışmasını ve içinde çok sayıda grafik oluşturmasını sağlayacak kadar rastgeleliğe sahip değil, bu nedenle sayfa kısmen hatalı ve sık sık çöküyor.

Sizinle paylaşmak istediğim oldukça basit ve zarif bir çözüm vardı.

Bildiğiniz gibi, tüm Ahududu oldukça güçlü bir video işlemciye sahiptir ve bu, donanım video kod çözme için harikadır. Bu nedenle, başka bir yerde bir gösterge panosuna sahip bir tarayıcı başlatmak ve işlenmiş bir resim içeren hazır bir akışı ahududuya aktarmak fikri ortaya çıktı.

Ayrıca, yönetimin basitleştirilmiş olması gerekir, çünkü bu durumda tüm yapılandırma güncellemesi ve yedeklemesi daha kolay olan tek bir sanal makinede gerçekleştirilecektir.

Daha erken olmaz dedi ve bitirdi.

Sunucu bölümü

hazır kullanıyoruz Ubuntu için Bulut Görüntüsü. Kurulum gerektirmez, bir sanal makineyi hızlı bir şekilde dağıtmak için ihtiyacınız olan her şeyi içerir ve CloudInit desteği anında bir ağ kurmanıza, ssh anahtarları eklemenize ve hızlı bir şekilde devreye almanıza yardımcı olur.

Yeni bir sanal makine dağıtıyoruz ve her şeyden önce üzerine kuruyoruz. xorg, başını sallamak и akış kutusu:

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

Xorg için yapılandırmayı da kullanacağız, lütfen imtiyazlı ABD Diego Ongaro, yalnızca yeni bir karar ekleyerek 1920 × 1080, çünkü tüm monitörlerimiz onu kullanacaktır:

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

Şimdi Firefox'u kuracağız, onu bir sistem servisi olarak çalıştıracağız, yani bir kere bunun için bir birim dosyası yazacağız:

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'u hemen tam ekran modunda çalıştırmak için Xdotool'a ihtiyacımız var.
parametreyi kullanma -url tarayıcı başladığında otomatik olarak açılması için herhangi bir sayfayı belirtebilirsiniz.

Bu aşamada kioskumuz hazır ama artık imajı ağ üzerinden diğer monitör ve cihazlara aktarmamız gerekiyor. Bunu yapmak için olasılıkları kullanacağız Hareket JPEG, çoğu web kamerasından video akışı için daha yaygın olarak kullanılan bir biçim.

Bunun için iki şeye ihtiyacımız var: FFmpeg modül ile x11 kapmak, x'lerden fotoğraf çekmek için ve akışEye, bunu müşterilerimize dağıtacak:

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

Resmimiz hızlı güncelleme gerektirmediği için yenileme hızını belirledim: 1 kare/saniye (parametre -r 1) ve sıkıştırma kalitesi: 5 (parametre -q:v 5)

Şimdi gitmeyi deneyelim http://your-vm:8080/, yanıt olarak masaüstünün sürekli güncellenen bir ekran görüntüsünü göreceksiniz. Harika! - ne gerekliydi.

İstemci tarafı

Burada yine daha kolay dediğim gibi biz Raspberry Pi Model B+ kullanacağız.

Öncelikle onu yükleyelim Arch Linux ARM'si, bunun için takip ediyoruz talimatlar resmi sitesinde.

Ayrıca video çipimiz için daha fazla bellek ayırmamız gerekecek, bunun için düzenleme yapacağız. /boot/config.txt

gpu_mem=128

Yeni sistemimizi başlatalım ve pacman anahtarlığını başlatmayı unutmayın, kurun OMXPlayer:

pacman -Sy omxplayer

Dikkat çekici bir şekilde, OMXPlayer x olmadan çalışabilir, bu nedenle tek ihtiyacımız olan onun için bir birim dosyası yazmak ve şunu çalıştırmak:

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

parametre olarak -b http://your-vm:8080/ url'yi sunucumuzdan geçiriyoruz.

Hepsi bu kadar, sunucumuzdan bir resim hemen bağlı ekranda görünmelidir. Herhangi bir sorun olması durumunda akış otomatik olarak yeniden başlatılacak ve istemciler akışa yeniden bağlanacaktır.

Bonus olarak, ortaya çıkan resmi ofisteki tüm bilgisayarlara ekran koruyucu olarak yükleyebilirsiniz. Bunun için ihtiyacınız olacak 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

Şimdi iş arkadaşlarınız çok mutlu olacak 🙂

Kaynak: habr.com

Yorum ekle