为什么 ssh 会将 virgl OpenGL 渲染器改回 llvmpipe 软件渲染器?我可以在 ssh 会话中保留 virgl 吗?

为什么 ssh 会将 virgl OpenGL 渲染器改回 llvmpipe 软件渲染器?我可以在 ssh 会话中保留 virgl 吗?

我创建了一个 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 一样通过网络使用)控制它们。

相关内容