Как я могу открыть представление рабочего стола (или представление из одной программы) одновременно нескольким другим компьютерам (с правами root-доступа)? Я видел похожие вопросы (например, здесь и здесь), но я не уверен, как можно было бы решить один-ко-многим одновременно.
2 ответа
Вы можете использовать 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 для выполнения.
Цель состояла в том, чтобы распространить любой выбранный образ / программу на ~ 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