Відповіді:
Ви можете використовувати VNC, дивіться це питання і відповіді: https://softwarerecs.stackexchange.com/questions/20417/same-content-on-several-different-computers-monitors-administered-remotely/20419#20419 .
Сервер VNC може бути спільним для декількох клієнтів у режимі "лише для читання" (тобто клієнти не можуть керувати сервером за допомогою клавіатури або миші) або "читання-запис" (клієнти можуть взяти під контроль сервер за допомогою клавіатури чи миші, але це може стати складним, коли кілька клієнтів одночасно контролюють запис, оскільки вони можуть заважати один одному).
У останніх дистрибутивах Linux підтримка VNC вбудована в сам сервер X11, але, можливо, його потрібно буде включити (див. Інструкції щодо вашої конкретної дистрибутивної документації). Можна також запустити сервер вручну, повністю незалежно від "основного" сервера X11, що працює на машині. Після запуску вручну сервер VNC може одночасно підтримувати клієнтів як "лише для читання", так і для "читання-запису", використовуючи різні паролі (не впевнений, чи це робить вбудована підтримка сервера X11).
VNC чудово працює над SSH, і клієнтам навіть не потрібні кореневі дозволи для виконання.
Мета полягала в тому, щоб розподілити будь-яке зображення / програму, вибрану для ~ 30 робочих столів Linux, незалежно від того, чи входив користувач чи ні, вміст повинен замінювати те, що переглядав користувач (думаю, PSA), а фактичні завдання робочого столу користувачів повинні залишатися непорушеними. Більше того, користувачеві не слід надавати можливість змінювати вміст. Я сподівався на основне рішення, використовуючи трансляції X та TCP. Це не розвивалося, я скоріше використовував VNC, як рекомендували інші.
На стороні клієнта я встановив сценарій очікування для запуску порожнього Xsession (наприклад X :1
), переключення на цей віртуальний термінал (тобто, chvt 1
за необхідності) та підключення до vncserver.
А саме:
for num in $(seq 0 30); do expect -f xremote$num.exp; done
де кожен сценарій xremote вказує віддалений хост:
set timeout -1
spawn ssh -o ConnectTimeout=10 root@somehost1
match_max 100000
expect "#"
send "X :1 & \r"
expect "#"
send "export DISPLAY=:1 \r"
expect "#"
send "vncviewer -passwd /root/.vnc/passwd -Shared -ViewOnly -FullScreen 192.168.1.1:1& \r"
expect "#"
send "exit\r"
expect eof
exit 0
і сервер створює вміст на: 1 після:
vncserver :1 -geometry 1024x768 -depth 16
Згодом стало трохи складніше закрити Xsesions для клієнтів. Тому я використав наступний сценарій очікування, щоб закрити всі Xsesions [X перезавантажується автоматично: 0]:
set timeout -1
spawn ssh -o ConnectTimeout=10 root@somehost1
match_max 100000
expect "#"
send "pkill X \r"
expect "#"
send "chvt 1 \r"
expect "#"
send "rm /tmp/.X*lock \r"
send "exit\r"
expect eof
exit 0