17

I was required to develop a Windows app UI for a fixed resolution - it doesn't matter if it makes sense or not, the customer requires it. I'm using a Windows Server 2003 VirtualBox VM as the development environment; my host machine has much higher resolution.

Is there any way to select and fix the OS resolution and stop VirtualBox changing it by any kind of scaling? I can't see the requested resolution when I open Display Properties on the guest OS.

Hennes
  • 64,768
  • 7
  • 111
  • 168
Random
  • 415
  • 2
  • 5
  • 9

7 Answers7

11

So I tried this, and might work for you. Under the Machine menu, there is an option to auto-resize the guest OS's resolution to fit the monitor you are using. I got the resolution you did by enabling this option, manually resizing the window to get the resolution I wanted, then DISABLING auto-resize. Then, it's "stuck" there and I can resize the window, move it around, resolution doesn't change. Only problem was the taskbar. While you are doing the resize, might help to minimize it to get the exact resolution

Camron B
  • 761
  • 6
  • 15
9

For my setup, neither CustomVideoMode1 nor setvideomodehint nor MaxGuestResolution worked. So, I looked up

vboxmanage getextradata $YOUR_VM_NAME enumerate

and changed

Key: GUI/LastGuestSizeHint, Value: 800,600

to

Key: GUI/LastGuestSizeHint, Value: 1920,1080

with

vboxmanage setextradata $YOUR_VM_NAME GUI/LastGuestSizeHint 1920,1080

Mika Feiler
  • 211
  • 2
  • 7
  • 2
    This was hugely helpful in letting me set the size of a VM in Vagrant + Virtualbox. I wanted to be able to resize the VM to any resolution after it was booted, but always have it start up and switch to a certain resolution, so I added `vb.customize ['setextradata', :id, 'GUI/LastGuestSizeHint','1280,800']` to my Vagrantfile and it is working great. – dragon788 Dec 05 '19 at 15:16
  • Same as the answer above, except I had to escape the forward slash within the key (or perhaps, it works as is as long as you are you using single quotes): vb.customize ["setextradata", :id, "GUI\/LastGuestSizeHint", "1920,1080"] – George Smith Oct 08 '22 at 06:21
  • 1
    @GeorgeSmith that is because you used double quotes which require escaping while allowing for variables and parameter expansion as well as other string interpolations. Single quoted string literals do not. – Mika Feiler Oct 10 '22 at 06:13
  • 1
    @MikaFeiler, Thank you so much for explaining. Just some context. I tried to use your examples as :after triggers in Vagrant and from within the Vagrantfile (Vagrant provides a way to call vobxmanage from within the file). It appears that after logging in, the resolution is as expected, but the initial login screen resolution is still 800x600. It works fine after logging in and logging back in. If you have any suggestions about the initial login screen, please, respond. Thanks in advance :) – George Smith Oct 11 '22 at 08:43
6

While the VM is running, define your custom resolution using this command:

vboxmanage setextradata "[VM NAME]" CustomVideoMode1 1600x900x32

While the VM is running, execute the following command to switch to your new resolution:

vboxmanage controlvm "[VM NAME]" setvideomodehint 1600 900 32

It should switch to the new resolution immediately.

For this to work you must have VirtualBox Guest Extensions installed in the VM.

Igor Levicki
  • 355
  • 3
  • 7
5

Try installing Guest Additions. It provides lots more features to the guest OS. From there, you can leverage the resolution you want and lock the screen in that position.

Camron B
  • 761
  • 6
  • 15
  • I have Guest Additions. Problem is the resolution I need is never allowed as in the resolution selection slider in guest OS. – Random Jun 24 '11 at 02:40
  • 2
    What is the resolution, exactly? – Camron B Jun 24 '11 at 12:56
  • 1
    You may need to install the guest additions when running in safe mode. I have seen several instances where the video driver did not completely install when not in safe mode - particularly for 3D acceleration. – Goyuix Jun 24 '11 at 19:03
  • Requested resolution is 1440x900 (HP LE1901w native) host resolution is 1920x1080 – Random Jun 25 '11 at 10:19
  • 3
    So I tried this, and might work for you. Under the Machine menu, there is an option to auto-resize the guest OS's resolution to fit the monitor you are using. I got the resolution you did by enabling this option, manually resizing the window to get the resolution I wanted, then DISABLING auto-resize. Then, it's "stuck" there and I can resize the window, move it around, resolution doesn't change. Only problem was the taskbar. While you are doing the resize, might help to minimize it to get the exact resolution – Camron B Jun 25 '11 at 15:57
4

Even with Guest Additions installed, my remote Windows is not able to give me my wished 1920x1080 so I used this solution

vboxmanage startvm "mymachine";vboxmanage controlvm "mymachine" setvideomodehint 1920 1080 32
Mokubai
  • 89,133
  • 25
  • 207
  • 233
krisofe
  • 41
  • 1
  • Does not work FOR ME on Windows 10. The VM does not boot anymore. How to revert this setting? – kiltek Apr 08 '20 at 06:08
3

I was having the same problem as described above nothing was working even the manual setting of screen resolution, I solved my problem with checking some things:

  1. In VirtualBox Manager GUI checked my OS version: I have chosen Windows 8.1 64 bit, but guest OS was 32 bit which, was the main problem
  2. Solution: new machine with win 8.1 32 bit OS and linked to an old virtual hard drive
  3. Setting machine custom resolution with VBoxManage command line

    VBoxManage.exe setextradata "[Virtual Machine Name]" CustomVideoMode1 1366x768x32
    
Jens Erat
  • 17,507
  • 14
  • 61
  • 74
Bastian
  • 31
  • 1
1

From with Vagrant file - see the last line with LastGuestSizeHint, I had to escape the slash after GUI in order for this to work:

Vagrant.configure("2") do |config|
    config.vm.box = "codeup/Ubuntu-20.04-GUI"
    config.vm.provider "virtualbox" do |vb|
        vb.gui = true
        vb.name = "Eclipse"
        vb.memory = 2048
        vb.cpus = 2
        vb.customize ["modifyvm", :id, "--vram", 256]
        vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
        vb.customize ["modifyvm", :id, "--draganddrop", "bidirectional"]
        vb.customize ["setextradata", :id, "GUI\/LastGuestSizeHint", "1920,1080"]
    end
George Smith
  • 231
  • 2
  • 7