[FIX] qemu 3D : le module virtio-vga-gl manquait au relevé des pièces

Les deux devices accélérés sont des modules séparés, empaquetés à part
sur les distributions qui découpent QEMU. Le relevé ne cherchait que
« virtio-gpu-gl » ; c'est « virtio-vga-gl » que libvirt exige pour un
écran principal compatible VGA, soit le cas d'une VM graphique. Le
rapport ressortait donc tout en vert à côté de la pièce absente.

Sans ce module, QEMU n'annonce pas le device, libvirt le remplace en
silence par « virtio-vga » nu et la VM démarre sans 3D — l'egl-headless
demandé restant en place, rien dans la définition ne trahit le repli.

--- EN ---

The two accelerated devices are separate modules, packaged apart on
distributions that split QEMU. The survey looked only for
« virtio-gpu-gl »; libvirt needs « virtio-vga-gl » for a VGA-compatible
primary display, which is what a graphical VM gets. The report therefore
came back all green next to the missing piece.

Without that module QEMU does not advertise the device, libvirt quietly
falls back to plain « virtio-vga » and the VM boots with no 3D — the
requested egl-headless still in place, nothing in the definition telling.

Assisted-by: Claude Opus 5
This commit is contained in:
Mathieu Benoit 2026-09-03 03:22:49 -04:00
parent 9370bff319
commit 94090d5280
2 changed files with 29 additions and 0 deletions

View file

@ -385,8 +385,17 @@ class QemuManageMixin:
# #
# Les fichiers plutôt que les paquets : leurs noms changent d'une # Les fichiers plutôt que les paquets : leurs noms changent d'une
# distribution à l'autre, leur emplacement beaucoup moins. # distribution à l'autre, leur emplacement beaucoup moins.
# Les deux devices 3D sont des modules SÉPARÉS, empaquetés à part sur
# les distributions qui découpent QEMU. Lequel sert dépend du type de
# vidéo : « virtio-vga-gl » pour l'écran principal compatible VGA,
# « virtio-gpu-gl » pour un affichage sans VGA. Ne chercher que le
# second laisse le rapport tout en vert alors que le premier manque.
# QEMU n'annonce pas un device dont le module est absent, libvirt le
# remplace alors par « virtio-vga » nu, et rien ne le signale : la VM
# démarre sans 3D, avec l'egl-headless demandé toujours en place.
_GPU_3D_PIECES = ( _GPU_3D_PIECES = (
("qemu ui-egl-headless", "qemu/ui-egl-headless.so"), ("qemu ui-egl-headless", "qemu/ui-egl-headless.so"),
("qemu virtio-vga-gl", "qemu/hw-display-virtio-vga-gl.so"),
("qemu virtio-gpu-gl", "qemu/hw-display-virtio-gpu-gl.so"), ("qemu virtio-gpu-gl", "qemu/hw-display-virtio-gpu-gl.so"),
("virglrenderer", "libvirglrenderer.so"), ("virglrenderer", "libvirglrenderer.so"),
("mesa libgbm", "libgbm.so"), ("mesa libgbm", "libgbm.so"),

View file

@ -597,3 +597,23 @@ class LaSondeVideo(unittest.TestCase):
sondes = dict(QemuManageMixin._DIAG_PROBES) sondes = dict(QemuManageMixin._DIAG_PROBES)
self.assertIn("video du qemu en cours", sondes) self.assertIn("video du qemu en cours", sondes)
class LesPieces3D(unittest.TestCase):
"""Le rapport 3D cherche les DEUX devices accélérés, non un seul.
« virtio-vga-gl » et « virtio-gpu-gl » sont des modules distincts, et
les distributions qui découpent QEMU les empaquettent séparément.
Celui qui sert dépend du type de vidéo demandé ; n'en chercher qu'un
rend un rapport tout vert à côté de la pièce absente.
"""
def test_both_accelerated_devices_are_looked_for(self):
from script.todo.qemu_manage import QemuManageMixin
motifs = [m for _, m in QemuManageMixin._GPU_3D_PIECES]
for module in (
"qemu/hw-display-virtio-vga-gl.so",
"qemu/hw-display-virtio-gpu-gl.so",
):
self.assertIn(module, motifs)