![在 KVM 来宾上运行 X11 应用程序,以便它显示在主机系统上](https://linux22.com/image/150568/%E5%9C%A8%20KVM%20%E6%9D%A5%E5%AE%BE%E4%B8%8A%E8%BF%90%E8%A1%8C%20X11%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%8C%E4%BB%A5%E4%BE%BF%E5%AE%83%E6%98%BE%E7%A4%BA%E5%9C%A8%E4%B8%BB%E6%9C%BA%E7%B3%BB%E7%BB%9F%E4%B8%8A.png)
是否有一种简单的方法可以在 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/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 侦听器
- 确保您的虚拟机可以解析主机的 IP 地址并连接到主机的端口 6000(= 对应于
:0.0
TCP 上的 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带宽