如何在Linux上实现MS远程桌面的效果?

如何在Linux上实现MS远程桌面的效果?

在 Windows 计算机上,如果一台计算机 A 运行远程桌面服务,而另一台计算机 B(实际上不必是 Windows)运行远程桌面客户端 - 那么 B 上的用户可以“窃取”对A,查看在那里打开的应用程序窗口并与它们交互。请注意,如果没有现有会话,RDP 还允许您打开一个新会话,但这不是问题所在。

我的问题:如果 A 是一台 Linux 机器,运行一个 X 服务器并正在进行 X 会话,我怎样才能实现同样的效果。

笔记:

  • 解决方案不必基于 MSRDP 本身,它可以是 NX、VNC 或您喜欢的任何其他解决方案。
  • 我愿意在 A 和 B 上安装软件,包括以 root 用户身份安装。
  • 商业解决方案是相关的,但我宁愿不诉诸它们。
  • 解决方案可能涉及在 A 上打开其他端口(例如,除了用于 SSH 的端口 22)。
  • 假设发行版是基于 Debian 的并且是相当新的。
  • 这个问题类似于这个,但它不一样,因为: 1.我愿意运行 X 和 2 之外的服务。在这个问题中,OP 似乎对获取特定窗口更感兴趣,而对我来说,看到整个事情很重要。
  • A 和 B 上的用户都可以与同一会话进行交互的解决方案也是相关的。

答案1

要控制正在运行的 X 会话,您需要将 VNC 服务器配置为连接到与 X 相同的显示器。通常,X 将连接到第一个显示器 - :0

您还需要该 X 会话的 X 权限。这可以通过访问远程显示管理器正在使用的 X Authority 文件来找到。这取决于您的显示管理器,可以使用ps aux和找到grep。例如:psaux | grep Xorg给你类似的东西:

/usr/libexec/Xorg -background none :0 -seat seat0 -auth /var/run/lightdm/root/:0 -listen tcp vt1 -noswitch

请记下该-auth选项,因为您需要使用 VNC 来使用它。root安装后,您需要在远程计算机上运行如下所示的命令x11vnc

/usr/bin/x11vnc -norc -forever -shared -bg -autoport 5900 -auth /var/run/lightdm/root/:0

最简单的方法是创建一个在启动时为您运行此服务的服务。在使用 的发行版上,创建一个类似于以下内容的systemd文件:/etc/systemd/system/x11vnc.service

[Unit]
Description=VNC Server for X11
Requires=display-manager.service
After=display-manager.service

[Service]
Type=forking
ExecStart=/usr/bin/x11vnc -norc -forever -shared -bg \
        -autoport 5900 \
        -rfbauth /etc/x11vnc.pass \
        -o /var/log/x11vnc.log \
        -auth /var/run/lightdm/root/:0

[Install]
WantedBy=graphical.target

请注意该-rfbauth选项。您需要事先使用以下命令创建密码文件:

$ sudo x11vnc -storepasswd /etc/x11vnc.pass

或者,如果您认为不需要密码保护的 VNC 会话,则只需删除该-rfbauth行即可。

在启动时启用:

$ sudo systemctl enable x11vnc.service

手动启动它:

$ sudo systemctl start x11vnc.service

您现在可以使用 VNC 客户端连接到远程计算机并接管会话。

相关内容