[PATCH v2] vbox: Fix starting domains

Michal Privoznik mprivozn at redhat.com
Mon Jan 23 13:59:28 UTC 2023


When starting a VirtualBox domain, we try to guess which frontend
to use. While the whole algorithm looks a bit outdated, it may
happen that we tell VirtualBox to use "gui" frontend, but not
which DISPLAY= to use.

I haven't found any documentation on the algorithm we use, but if
I make us fallback onto DISPLAY=:0 when no other configuration is
found then I'm able to start my guests just fine.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---

I've experimented with introducing an enum for frontend since it can be
one of gui, sdl, vrdp. But it turned out to be a huge mess and not worth
the fix I'm trying to get in. If anybody else wants to do it, please.

 src/vbox/vbox_common.c | 41 +++++++++++++++++++++--------------------
 1 file changed, 21 insertions(+), 20 deletions(-)

diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index bd77641d39..30a85ce8b2 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -2120,32 +2120,33 @@ vboxStartMachine(virDomainPtr dom, int maxDomID, IMachine *machine, vboxIID *iid
     }
     VBOX_UTF8_FREE(valueDisplayUtf8);
 
-    if (guiPresent) {
-        if (guiDisplay) {
-            char *displayutf8;
-            displayutf8 = g_strdup_printf("DISPLAY=%s", guiDisplay);
-            VBOX_UTF8_TO_UTF16(displayutf8, &env);
-            VIR_FREE(displayutf8);
-            VIR_FREE(guiDisplay);
-        }
+    if (guiPresent || sdlPresent) {
+        const char *display = NULL;
+        const char *sessType = NULL;
+        char *displayutf8;
 
-        VBOX_UTF8_TO_UTF16("gui", &sessionType);
-    }
+        if (guiPresent) {
+            sessType = "gui";
+            display = guiDisplay;
+        } else {
+            sessType = "sdl";
+            display = sdlDisplay;
+        }
 
-    if (sdlPresent) {
-        if (sdlDisplay) {
-            char *displayutf8;
-            displayutf8 = g_strdup_printf("DISPLAY=%s", sdlDisplay);
-            VBOX_UTF8_TO_UTF16(displayutf8, &env);
-            VIR_FREE(displayutf8);
-            VIR_FREE(sdlDisplay);
+        if (!display) {
+            /* Provide some sane default */
+            display = ":0";
         }
 
-        VBOX_UTF8_TO_UTF16("sdl", &sessionType);
-    }
+        displayutf8 = g_strdup_printf("DISPLAY=%s", display);
+        VBOX_UTF8_TO_UTF16(displayutf8, &env);
+        VIR_FREE(displayutf8);
+        VIR_FREE(guiDisplay);
 
-    if (vrdpPresent)
+        VBOX_UTF8_TO_UTF16(sessType, &sessionType);
+    } else if (vrdpPresent) {
         VBOX_UTF8_TO_UTF16("vrdp", &sessionType);
+    }
 
     rc = gVBoxAPI.UIMachine.LaunchVMProcess(data, machine, iid,
                                             sessionType, env,
-- 
2.39.1



More information about the libvir-list mailing list