在 KVM 来宾上运行 X11 应用程序,以便它显示在主机系统上

在 KVM 来宾上运行 X11 应用程序,以便它显示在主机系统上

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

我知道我可以使用 X11 转发 ssh 到来宾,但我想知道是否有原生 KVM/libvirt 方法或更简单的方法。

答案1

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,通常是通过使用例如在显示主机上提取它,然后使用任何方法获取传输到远程主机xauth nextract /some/file :0.0的内容,并使用那里将其添加到远程主机的文件。/some/filexauth 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 侦听器
  • 确保您的虚拟机可以解析主机的 IP 地址并连接到主机的端口 6000(= 对应于:0.0TCP 上的 DISPLAY)
  • 安排您的虚拟机将DISPLAY变量指向kvmhost:0.0
  • 采取必要的步骤将 X11 身份验证 cookie 传递到 VM

这将使 X11 能够以“经典方式”工作,同时将增加的技术复杂性降至最低。但要复杂得多实际设置不仅仅是使用ssh -X virtualmachine,并且可能会让您遭受各种古老的、众所周知的攻击。

答案2

你可以用一个简单的点击设备 tricj 来完成


-netdev tap,id=mynet0,ifname=qtap0,script=no,downscript=no -device e1000,netdev=mynet0,mac=fe:ed:be:ef:55:66

在 vm 中安装一些 x 兼容的二进制文件后,您可以通过 ssh 远程启动它们:

xhost +10.11.12.10 ;ssh -p 6666 [email protected] "LANG=de BROWSER=chromium-browser DISPLAY=10.11.12.11:0.0 dbus-run-session chromium-browser"

→小心,全高清youtube会吃掉1.2+Gbit带宽

相关内容