是否有一种简单的方法可以在 KVM 来宾系统上运行 X11 应用程序,就像它在主机系统上的显示方式一样?
我知道我可以使用 X11 转发 ssh 到访客,但我想知道是否有本地 KVM/libvirt 方法或更简单的方法。
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 侦听器。
所以......是的,你可以:
:0.0TCP上的显示)DISPLAY变量指向kvmhost:0.0这将允许 X11 以“经典方式”工作,同时将增加的技术复杂性降至最低。但实际设置比仅使用复杂得多ssh -X virtualmachine,并且可能会为各种旧的、众所周知的攻击打开大门。