Π‘Ρ‚Ρ€ΠΈΠΌΠΈΠΌ экран Π½Π° нСсколько устройств ΠΏΠΎ сСти

Π‘Ρ‚Ρ€ΠΈΠΌΠΈΠΌ экран Π½Π° нСсколько устройств ΠΏΠΎ сСти

Π’ΠΎΠ·Π½ΠΈΠΊΠ»Π° Ρƒ мСня Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°ΡˆΠ±ΠΎΡ€Π΄ с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ Π½Π° нСсколько экранов Π² офисС. Π’ распоряТСнии имССтся нСсколько ΡΡ‚Π°Ρ€Π΅Π½ΡŒΠΊΠΈΡ… Raspberry Pi Model B+ ΠΈ Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€ с практичСски Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ количСством рСсурсов.

По Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ Raspberry Pi Model B+ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ достаточной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ постоянно Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ большоС количСство Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π² Π½Π΅ΠΌ, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ страница частично Π³Π»ΡŽΡ‡ΠΈΡ‚ ΠΈ часто Π²Ρ‹Π»Π΅Ρ‚Π°Π΅Ρ‚.

Нашлось достаточно простоС ΠΈ элСгантноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я ΠΈ Ρ…ΠΎΡ‡Ρƒ с Π²Π°ΠΌΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ.

Как извСстно всС Raspberry ΠΈΠΌΠ΅ΡŽΡ‚ достаточно ΠΌΠΎΡ‰Π½Ρ‹ΠΉ видСопроцСссор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ дСкодирования Π²ΠΈΠ΄Π΅ΠΎ. Π’Π°ΠΊ появилась идСя Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ с Π΄Π°ΡˆΠ±ΠΎΡ€Π΄ΠΎΠΌ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Ρ‘, Π° Π½Π° ΠΌΠ°Π»ΠΈΠ½ΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ с ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ.

Плюс ΠΊΠΎ всСму это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС вся настройка Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈ Π±ΡΠΊΠ°ΠΏΠΈΡ‚ΡŒ.

Π‘ΠΊΠ°Π·Π°Π½ΠΎ – сдСлано.

БСрвСрная Ρ‡Π°ΡΡ‚ΡŒ

ΠœΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ Cloud Image для Ubuntu. НС трСбуя установки, ΠΎΠ½ содСрТит всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для быстрого развСртывания Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Cloud-Init ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ssh-ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ быстро ввСсти Π΅Π΅ Π² строй.

Π Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ установим Π½Π° Π½Π΅ΠΉ Xorg, nodm ΠΈ fluxbox:

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

Π’Π°ΠΊ ΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠΌ для Xorg, любСзно прСдоставлСнным Π½Π°ΠΌ Diego Ongaro, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ 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, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΌΡ‹ Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠ°ΠΊ system сСрвис, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π·Π° ΠΎΠ΄Π½ΠΎ ΠΈ напишСм unit-Ρ„Π°ΠΉΠ» для Π½Π΅Π³ΠΎ:

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 ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ страницу Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π»Π°ΡΡŒ автоматичСски ΠΏΡ€ΠΈ запускС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.

На этом этапС наш киоск ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ², Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΏΠΎ сСти Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹ ΠΈ устройства. Для этого ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ возмоТностями Motion JPEG, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для стриминга Π²ΠΈΠ΄Π΅ΠΎ с Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° web-ΠΊΠ°ΠΌΠ΅Ρ€.

Для этого Π½Π°ΠΌ понадобится Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ: FFmpeg с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ x11grab, для Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ с иксов ΠΈ 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+.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ установим Π½Π° Π½Π΅Π΅ Arch Linux ARM, для этого слСдуСм инструкции Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС.

Нам Ρ‚Π°ΠΊΠΆΠ΅ потрСбуСтся Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ большС памяти для нашСго Π²ΠΈΠ΄Π΅ΠΎΡ‡ΠΈΠΏΠ°, для этого ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π² /boot/config.txt

gpu_mem=128

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ Π½Π°ΡˆΡƒ Π½ΠΎΠ²ΡƒΡŽ систСму ΠΈ Π½Π΅ Π·Π°Π±Ρ‹Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ pacman keyring, установим OMXPlayer:

pacman -Sy omxplayer

Π§Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, OMXPlayer ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· иксов, ΠΏΠΎ этому всС Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ трСбуСтся β€” это Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ unit-Ρ„Π°ΠΉΠ» для Π½Π΅Π³ΠΎ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ:

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ваши ΠΊΠΎΠ»Π»Π΅Π³ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹ πŸ™‚

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com