src/vbox/vbox_common.c | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-)
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@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
On Mon, Jan 23, 2023 at 02:59:28PM +0100, Michal Privoznik wrote: >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@redhat.com> Reviewed-by: Martin Kletzander <mkletzan@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 >
© 2016 - 2024 Red Hat, Inc.