Переадресация X11: как предоставить общий доступ к рабочему столу нескольким клиентам одновременно?

Переадресация X11: как предоставить общий доступ к рабочему столу нескольким клиентам одновременно?

Как я могу поделиться видом рабочего стола (или видом из одной программы) на нескольких других машинах (при наличии прав root) одновременно? Я видел похожие вопросы (например,здесьиздесь), но я не уверен, как можно реализовать связь «один ко многим» одновременно.

решение1

Вы можете использовать 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, и клиентам даже не нужны права root для выполнения.

решение2

Целью было распространение любого выбранного образа/программы на ~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

После этого стало немного сложнее закрывать Xsessions на клиентах. Поэтому я использовал следующий сценарий ожидания, чтобы закрыть все Xsessions [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

Связанный контент