Truyền phát màn hình đến nhiều thiết bị qua mạng

Truyền phát màn hình đến nhiều thiết bị qua mạng

Tôi có nhu cầu hiển thị bảng điều khiển có giám sát trên một số màn hình trong văn phòng. Có một số Raspberry Pi Model B + cũ và một trình ảo hóa với lượng tài nguyên gần như không giới hạn.

Rõ ràng Raspberry Pi Model B+ không có đủ tính ngẫu nhiên để giữ cho trình duyệt chạy liên tục và hiển thị nhiều đồ họa trong đó, do đó, trang này bị lỗi một phần và thường xuyên bị treo.

Có một giải pháp khá đơn giản và tao nhã mà tôi muốn chia sẻ với bạn.

Như bạn đã biết, tất cả các quả mâm xôi đều có bộ xử lý video khá mạnh, rất phù hợp để giải mã video phần cứng. Vì vậy, ý tưởng nảy ra là khởi chạy một trình duyệt có bảng điều khiển ở một nơi khác và chuyển một luồng tạo sẵn có hình ảnh kết xuất sang mâm xôi.

Ngoài ra, điều này sẽ đơn giản hóa việc quản lý, vì trong trường hợp này, tất cả cấu hình sẽ được thực hiện trên một máy ảo, dễ dàng cập nhật và sao lưu hơn.

Không sớm nói hơn làm.

Phần máy chủ

Chúng tôi sử dụng sẵn sàng Hình ảnh đám mây cho Ubuntu. Không yêu cầu cài đặt, nó chứa mọi thứ bạn cần để nhanh chóng triển khai một máy ảo và Hỗ trợ CloudInit giúp thiết lập mạng ngay lập tức, thêm khóa ssh và nhanh chóng đưa vào hoạt động.

Chúng tôi triển khai một máy ảo mới và trước hết hãy cài đặt nó trên đó Xorg, gật đầu и hộp thông lượng:

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

Chúng tôi cũng sẽ sử dụng cấu hình cho Xorg, vui lòng được cấp chúng tôi Diego Ongaro, chỉ thêm một giải pháp mới 1920 × 1080, vì tất cả các màn hình của chúng tôi sẽ sử dụng nó:

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

Bây giờ chúng tôi sẽ cài đặt Firefox, chúng tôi sẽ chạy nó như một dịch vụ hệ thống, vì vậy chúng tôi sẽ viết một tệp đơn vị cho nó:

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

Chúng tôi cần Xdotool để chạy firefox ngay lập tức ở chế độ toàn màn hình.
Sử dụng tham số -url bạn có thể chỉ định bất kỳ trang nào để nó tự động mở khi trình duyệt khởi động.

Ở giai đoạn này, ki-ốt của chúng tôi đã sẵn sàng, nhưng bây giờ chúng tôi cần xuất hình ảnh qua mạng sang các màn hình và thiết bị khác. Để làm điều này, chúng tôi sẽ sử dụng các khả năng JPEG chuyển động, một định dạng thường được sử dụng để truyền phát video từ hầu hết các webcam.

Đối với điều này, chúng ta cần hai điều: FFmpeg với mô-đun x11lấy, để chụp ảnh từ X và suốiEye, sẽ phân phối nó cho khách hàng của chúng tôi:

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

Vì hình ảnh của chúng tôi không yêu cầu cập nhật nhanh nên tôi đã chỉ định tốc độ làm mới: 1 khung hình mỗi giây (tham số -r 1) và chất lượng nén: 5 (tham số -q:v 5)

Bây giờ chúng ta hãy cố gắng đi đến http://your-vm:8080/, để đáp lại, bạn sẽ thấy một ảnh chụp màn hình được cập nhật liên tục của màn hình nền. Tuyệt vời! - những gì cần thiết.

Phía khách hàng

Ở đây vẫn dễ dàng hơn, như tôi đã nói, chúng tôi sẽ sử dụng Raspberry Pi Model B+.

Trước hết, hãy cài đặt trên nó ArchLinux ARM, vì điều này chúng tôi làm theo hướng dẫn trên trang web chính thức.

Chúng tôi cũng sẽ cần phân bổ thêm bộ nhớ cho chip video của mình, vì điều này chúng tôi sẽ chỉnh sửa trong /boot/config.txt

gpu_mem=128

Hãy khởi động hệ thống mới của chúng ta và đừng quên khởi tạo keyring pacman, cài đặt Người chơi OMX:

pacman -Sy omxplayer

Đáng chú ý, OMXPlayer có thể hoạt động mà không cần X, vì vậy tất cả những gì chúng ta cần là viết một tệp đơn vị cho nó và chạy:

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

Là một tham số -b http://your-vm:8080/ chúng tôi đang chuyển url từ máy chủ của chúng tôi.

Đó là tất cả, hình ảnh từ máy chủ của chúng tôi sẽ ngay lập tức xuất hiện trên màn hình được kết nối. Trong trường hợp có bất kỳ sự cố nào, luồng sẽ tự động khởi động lại và khách hàng sẽ kết nối lại với luồng đó.

Như một phần thưởng, bạn có thể cài đặt hình ảnh kết quả làm trình bảo vệ màn hình trên tất cả các máy tính trong văn phòng. Đối với điều này, bạn sẽ cần MPV и XSscreenSaver:

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

Bây giờ đồng nghiệp của bạn sẽ rất hạnh phúc 🙂

Nguồn: www.habr.com

Thêm một lời nhận xét