When running VBoxSDL fullscreen under X, if the X screen is not visible (IE, I've changed to VT1) and the Virtual Machine changes resolution, X will quit with a 'BadValue' error.

Long Description:

I've created a linux 'host' that is very small. Its whole purpose is to boot up as quick as possible, automagically configure any virtualbox images (and automagically create any virtual nics and bridges) it finds against my own configuration system, then run them fullscreen on separate X displays using VBoxSDL. For example, it will boot the host, then boot up XP full screen. The person using the computer doesn't realise they are running in a VM, and the boot time is just another 30 or so seconds (Update: Now 15 seconds). It works very well. I've disabled things like 'Ctrl-Backspace' and 'Ctrl-+/-' that X would normally trap.

When a virtual machine is booting, there are several screen resolution changes. For example with an XP guest, it goes from the 'laptop dude' screen, to the text 'starting to boot' screen, to the XP splash screen, to the desktop. All of them have resolution changes.
With a linux ubuntu guest, it goes from 'laptop dude' to 'Starting Grub' text, to 'Ubuntu splash screen' to 'desktop'.

If I boot up a single VM fullscreen using VBoxSDL, it works fine.

If I boot up a single VM fullscreen using VBoxSDL, but during the boot process I press 'Ctrl-Alt-F1' to switch to VT1, X will crash out as soon as the screen resolution changes. It gives the following error: -

I must state here that I am running X.org that comes with 8.04 Ubuntu. Internally it must use those variables names XFree86 etc... still.

I believe this is probably a bug upstream in SDL rather than in VirtualBox, but in case there is anything that can be done I thought I'd post here. Also a Google search shows that some other projects have been affected by this but have also managed to fix it (though I'm not too sure how).

Note also that I'm not using any window manager. I'm simply running X and a fullscreen VBoxSDL. The actual command I run is: -

If I drop the '-fullscreen' and '-nofstoggle', and run it, it will run in a small window at the top left of the screen and works fine, even if I change VT during boot. If I then press '<right ctrl>+f' to full screen it, and change VT, and whilst away the screen resolution changes, the same problem occurs.

Now you may tell me 'Just don't change VT during boot'. However, my host is capable of running more than one VM at the same time. It simply scans the image folder and auto-starts all the ones it can find. For servers, I'd like to run a Windows Guest and Linux Guest, with memory shared 70% and 30% respectively, and my host is capable of this (it works out memory sharing etc). However, the vm that is booting fullscreen on an X display thats not currently visible crashes as soon as a resolution change occurs. For example, say my host is going to run Windows 2003 Server and Ubuntu 8.04. It starts Windows 2003 Server on Display :0, then a few seconds later start Ubuntu on :1. The one thats not currently visible (probably :0 since it started first) will crash at a resolution change.

I've got around this by starting the FIRST VM using SDL, and the rest using VBoxHeadless, but ideally I'd like to keep all the displays and be able to switch between them a bit like a KVM.

Change History

Summary
changed from When running VBoxSDL fullscreen under X, if the X screen is not visible (IE, I've changed to VT1) and the Virtual Machine changes resolution, X will quit with a 'BadValue' error. to VBoxSDL terminaes with a 'BadValue' when switching to VT