我需要在辦公室的多個屏幕上顯示一個帶有監控功能的儀表板。 有幾個舊的 Raspberry Pi Model B+ 和一個擁有幾乎無限量資源的管理程序。
顯然,Raspberry Pi Model B+ 沒有足夠的隨機性來保持瀏覽器持續運行並在其中渲染大量圖形,因此頁面出現部分錯誤並經常崩潰。
有一個相當簡單而優雅的解決方案,我想與您分享。
如您所知,所有 Raspberries 都有一個相當強大的視頻處理器,非常適合硬件視頻解碼。 因此,出現了在其他地方啟動帶有儀表板的瀏覽器的想法,並將帶有渲染圖片的現成流傳輸到樹莓派。
另外,這應該簡化了管理,因為在這種情況下,所有配置都將在一台虛擬機上執行,這更容易更新和備份。
說到做到。
服務器部分
我們使用現成的
我們部署一個新的虛擬機,首先在上面安裝它
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
我們還將使用 Xorg 的配置,請
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
您可以指定任何頁面,以便它在瀏覽器啟動時自動打開。
在此階段,我們的信息亭已準備就緒,但現在我們需要通過網絡將圖像導出到其他監視器和設備。 為此,我們將使用可能性
為此,我們需要兩件事:
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
)
現在讓我們試著去
客戶端
這裡還是比較容易的,正如我所說,我們將使用Raspberry Pi Model B+。
首先,讓我們安裝它
我們還需要為視頻芯片分配更多內存,為此我們將在 /boot/config.txt
gpu_mem=128
讓我們啟動我們的新系統,不要忘記初始化 pacman 密鑰環,安裝
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。
就是這樣,來自我們服務器的圖片應該立即出現在連接的屏幕上。 如果出現任何問題,流將自動重新啟動,客戶端將重新連接到它。
作為獎勵,您可以將生成的圖片作為屏幕保護程序安裝在辦公室的所有計算機上。 為此你需要
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
現在你的同事會很高興🙂
來源: www.habr.com