
Ich habe eine Qemu-VM erstellt, wobei sowohl Host als auch Gast Ubuntu 20.04 sind. Dann starte ich die Qemu-VM mit dem Befehl
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
Wenn ich den Desktop des Gast-Ubuntu öffnen und in sein Terminal eingeben kann
glxinfo -B
-X
Die Ausgabe zeigt mir, dass der OpenGL-Renderer „virgl“ ist. Wenn ich mich jedoch per SSH mit Option und Typ in das Gast-Ubuntu einlogge glxinfo -B
, sagt die Ausgabe, dass der OpenGL-Renderer „llvmpipe (LLVM 13.0.0, 128 Bit)“ ist, was ein Software-OpenGL-Renderer ist.
Warum ändert SSH den Virgl OpenGL-Renderer zurück zum llvmpipe-Software-Renderer? Gibt es eine Möglichkeit, den ursprünglichen „Virgl“-OpenGL-Renderer in der SSH-Sitzung beizubehalten, wie ich ihn im Qemu-Fenster sehe?
Antwort1
Die Ausgabe zeigt mir, dass der OpenGL-Renderer „virgl“ ist. Wenn ich mich jedoch mit der Option -X per SSH in das Gast-Ubuntu einlogge und glxinfo -B eingebe, sagt die Ausgabe, dass der OpenGL-Renderer „llvmpipe (LLVM 13.0.0, 128 Bit)“ ist, was ein Software-OpenGL-Renderer ist.
Warum ändert SSH den Virgl OpenGL-Renderer zurück zum llvmpipe-Software-Renderer? Gibt es eine Möglichkeit, den ursprünglichen „Virgl“-OpenGL-Renderer in der SSH-Sitzung beizubehalten, wie ich ihn im Qemu-Fenster sehe?
Denn die -X
Option veranlasst glxinfo zur Kommunikation mit demGastgeberX-Server, nicht der des Gastes. Da GLX „GL über X11“ ist, bedeutet dies, dass glxinfo die verfügbaren Funktionen des Xorg des Hosts anzeigt – eingeschränkt durch die Tatsache, dass es kommuniziertüber das Netzwerk,daher kein direkter SHM- oder DRI-Zugriff. (Moderne X11-Programme sind beispielsweise stark darauf angewiesen, Bitmaps über MIT-SHM direkt mit dem X-Server austauschen zu können.)
Wenn Sie den X-Server des Gastes verwenden möchten,nicht verwenden -X
noch-Y
sondern definieren Sie DISPLAY
(und möglicherweise auch XAUTHORITY
), dass auf den X-Server verwiesen wird, der bereits im Gast ausgeführt wird.
(Meistens ist es display :0, aber der Xauth-Pfad kann sich ändern, daher sollten Sie die DISPLAY- und XAUTHORITY-Werte wirklich über ein „lokales“ Terminal im Gast überprüfen. Bei neueren Versionen finden Sie diese Informationen möglicherweise auch in systemctl --user show-environment
– das ist eine zuverlässige Quelle.)
Wenn Sie jedoch die virtuelle GPU des Gasts verwenden und gleichzeitig weiterhin X Windows über SSH auf dem Host anzeigen möchten, können Sie vermutlich kein GLX verwenden, sondern benötigen EGL-basierte Software (prüfen Sie, ob auf eglinfo
die virtuelle GPU zugegriffen werden kann).
Alternativ können Sie die Anwendungen auf dem Gast ausführen, sie aber über VNC (x0vncserver) oder über das SPICE-Remoteprotokoll von Qemu steuern (das genau wie VNC/RDP über das Netzwerk verwendet werden kann).