答案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