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 服务器。手动启动时,VNC 服务器可以同时支持使用不同密码的“只读”和“读写”客户端(不确定内置的 X11 服务器支持是否能做到这一点)。

VNC 通过 SSH 完美运行,客户端甚至不需要 root 权限即可执行。

答案2

目标是将所选的图像/程序分发到大约 30 个 Linux 桌面,无论用户是否登录,内容都应取代用户正在查看的内容(想想 PSA),并且用户的实际桌面任务应保持不受干扰。此外,不应赋予用户更改内容的能力。我曾希望使用 X 和 TCP 广播的基本解决方案。但这并没有实现,而是我按照其他人的建议使用了 VNC。

在客户端,我设置了一个 expect 脚本来启动一个空白的 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

相关内容