在 KVM 来宾上运行 X11 应用程序,使其显示在主机系统上

Mik*_*ike 8 kvm x11 libvirt

是否有一种简单的方法可以在 KVM 来宾系统上运行 X11 应用程序,就像它在主机系统上的显示方式一样?

我知道我可以使用 X11 转发 ssh 到访客,但我想知道是否有本地 KVM/libvirt 方法或更简单的方法。

tel*_*coM 5

SSH 的 X11 转发不仅仅是通用端口转发,它可能是实现您想要的最简单的方法,至少从用户的角度来看是这样。

如果您想在技术上更简单,则需要了解 X11 最初的使用方式。

在拥有多台支持 X11 的计算机的环境中,用户信息可以通过 NIS 和主目录集中管理,从专用磁盘服务器共享到所有其他具有 NFS 的计算机(加入一些自动挂载程序)。所有计算机还必须能够解析彼此的主机名。在受信任的内部网络中,您(假设)不会禁用 X11 服务器的 TCP 侦听端口。

在这样的环境中,您可以从一台主机连接到另一台主机,只需要确保DISPLAY正确设置环境变量即可让任何远程 X11 客户端程序直接连接到您的本地 X11 服务器,从而直接连接到您的本地显示器. 由于主目录与 NFS 共享,~/.Xauthority因此远程主机和本地主机都可以看到相同的目录。

如果没有NIS?这对 X11 来说不是问题:它并不真正关心身份。只要连接到 X11 服务器的任何客户端都可以从~/.Xauthority文件(或XAUTHORITY环境变量指向的非默认文件)中提供正确的 X11 身份验证 cookie ,X11 就可以工作。但是,如果没有共享 UID/GID 编号分配,则可能无法共享主目录。

没有共享主目录?在这种情况下,您还需要传递 X11 身份验证 cookie,通常通过在您的显示主机上使用 eg 提取它xauth nextract /some/file :0.0,然后/some/file使用任何方法获取传输到远程主机的内容,并使用xauth nmerge那里将其添加到远程主机的~/.Xauthority文件。

(或者您可以使用xhost +完全或仅针对特定远程主机禁用安全检查。但结果证明这是一个非常糟糕的主意:如果远程主机有其他用户,那么这样做会让您进入xsnow,或者对于xroach感染,或者更糟糕的事情,例如监控整个 X11 会话的所有键盘和鼠标事件。)

但未加密的 X11 协议被发现是一个相当大的安全漏洞。由于当时美国的加密货币出口法,世界决定使用 SSH 和 X11 转发并禁用 X11 服务器的 TCP 端口。看到 X 服务器以Xorg -nolisten tcp <other options...>.

最近,X.org 意识到了这一点,并翻转了 TCP 侦听逻辑:如果您的 Linux 发行版-nolisten tcp默认启动 X11 服务器而没有该选项,那可能是因为您的 X11 服务器版本实际上需要一个显式-listen tcp选项来启用经典且不安全的 X11 TCP 侦听器。

所以......是的,你可以:

  • 在主机的 X11 服务器上启用 TCP 侦听器
  • 确保您的 VM 可以解析主机的 IP 地址并连接到主机的端口 6000(= 对应于:0.0TCP上的显示)
  • 安排您的 VM 将DISPLAY变量指向kvmhost:0.0
  • 采取必要的步骤将 X11 身份验证 cookie 传递给 VM

这将允许 X11 以“经典方式”工作,同时将增加的技术复杂性降至最低。但实际设置比仅使用复杂得多ssh -X virtualmachine,并且可能会为各种旧的、众所周知的攻击打开大门。