我创建了一个 Qemu VM,主机和客户机都是 Ubuntu 20.04。然后我使用命令启动 Qemu VM
qemu-system-x86_64 ubuntu-desktop.qcow2 -m 2G -smp 2 -device virtio-vga-gl -display gtk,gl=on -nic user,hostfwd=tcp::5555-:22
如果我可以打开客户机 Ubuntu 的桌面并在其终端中输入
glxinfo -B
输出显示 OpenGL 渲染器是“virgl”。但如果我使用-X
选项并键入ssh 进入客户机 Ubuntu glxinfo -B
,输出显示 OpenGL 渲染器是“llvmpipe (LLVM 13.0.0, 128 位)”,这是一个软件 OpenGL 渲染器。
那么,为什么 ssh 会将 virgl OpenGL 渲染器改回 llvmpipe 软件渲染器?有没有办法在 ssh 会话中保留我在 Qemu 窗口中看到的原始“virgl”OpenGL 渲染器?
答案1
输出显示 OpenGL 渲染器是“virgl”。但如果我使用 -X 选项 ssh 进入客户机 Ubuntu 并输入 glxinfo -B,输出显示 OpenGL 渲染器是“llvmpipe (LLVM 13.0.0, 128 位)”,这是一个软件 OpenGL 渲染器。
那么,为什么 ssh 会将 virgl OpenGL 渲染器改回 llvmpipe 软件渲染器?有没有办法在 ssh 会话中保留我在 Qemu 窗口中看到的原始“virgl”OpenGL 渲染器?
因为该-X
选项使 glxinfo 与主人的X 服务器,而不是客户机的。由于 GLX 是“GL over X11”,这意味着 glxinfo 将显示主机 Xorg 可用的功能——受其正在通信的事实限制通过网络,因此没有直接的 SHM 或 DRI 访问。(例如,现代 X11 程序很大程度上依赖于能够通过 MIT-SHM 直接与 X 服务器交换位图。)
如果你想使用客户的 X 服务器,请勿使用-X
或-Y
而是定义DISPLAY
(也可能是XAUTHORITY
)指向已经在客户机内部运行的 X 服务器。
(大多数情况下是显示:0,但 Xauth 路径可能会发生变化,因此您确实应该通过客户机中的“本地”终端检查 DISPLAY 和 XAUTHORITY 值。在最近的版本中,您可能还会在其中找到此信息systemctl --user show-environment
- 这是一个可靠的来源。)
但是如果您想使用客户的虚拟 GPU,同时仍通过 SSH 在主机上显示 X 窗口,我怀疑您可能无法使用 GLX,但可能需要基于 EGL 的软件(查看是否eglinfo
能够访问 virgl GPU)。
或者在客户机上运行应用程序,但通过 VNC(x0vncserver)或 Qemu 的 SPICE 远程协议(可以像 VNC/RDP 一样通过网络使用)控制它们。