# GRUB2: Use maximum detected resolution?

How do I tell GRUB2 to set its resolution (and also the one passed to the kernel) to the maximum one it can detect at time of boot?

-
@severin: No, it doesn't. That only tells me how to set it to a specific resolution that I can find, not to the maximum one it detects at boot time. –  Mehrdad Feb 12 '12 at 10:54
´vbeinfo´ will tell you the maximum supported resolution. Then you can edit /etc/default/grub to use that resolution. –  severin Feb 12 '12 at 15:43
@severin: You're still not understanding the question!! :( I want automatic detection, not manual detection. –  Mehrdad Feb 12 '12 at 19:51
@AmithKK: Uh, yes? I have variable resolutions... –  Mehrdad May 26 '12 at 5:14

I presume the reason you are asking about this is that you use different monitors on the same Ubuntu machine and you want GRUB2 to look good on all of them. However, if you are concerned about the resolution used once Ubuntu boots, this does not address that. GRUB2 does not "pass on to the kernel" the resolution it selects for the boot menu.

Edit /etc/default/grub as root. You may want to back it up first:

sudo cp /etc/default/grub /etc/default/grub.old


(You would run that in the Terminal, which you can open by pressing Ctrl+Alt+T.)

To edit it with Gedit as root run:

gksu gedit /etc/default/grub


(Or if you're using Kubuntu, run kdesudo kate /etc/default/grub instead.)

You'll get a lot of messages in the Terminal, if you run that command in the Terminal rather than with Alt+F2. You'll notice they don't say they pertain to the file you're editing, so that's fine.

You'll find that part of the file says something like this:

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command vbeinfo'
#GRUB_GFXMODE=640x480


Uncomment (i.e., remove the leading # from) the line that says GRUB_GFXMODE, and change the resolution from 640x480 to auto. The line should now read:

GRUB_GFXMODE=auto


Save the file and quit the editor. In the Terminal, run:

sudo update-grub


(This must be run after every modification to /etc/default/grub, to apply the changes.)

Now reboot, and see if that does what you want.

It might not (as it uses the "platform default" which might not be the highest possible). If that is the case, edit /etc/default/grub again, and this time change the line so it says something like:

GRUB_GFXMODE=1600x1200,1280x1024,1024x768,800x600,640x480


You will not necessarily want to use exactly that line. You should list all the resolutions you want to be tried, in the order you want them to be tried. The resolutions I have listed are the most standard resolutions for monitors with a 4:3 aspect ratio, but widescreen monitors (including most laptop screens these days) have different form factors and use different resolutions. Wikipedia has a list of common resolutions which may help you. If you know the specific resolutions you want for each device, you can just list them (highest first). You should probably include 640x480 or auto at the end . I recommend this because I don't know if GRUB2 will always try a safe low resolution, if you don't include that.

Then save the file again, run sudo update-grub again, reboot again, and see if that does what you need.

If it doesn't, you may be out of luck. GRUB2 doesn't display video the same way as Ubuntu does once it's booted. GRUB2 uses VESA BIOS Extensions to display the boot menu with enhanced resolution (and color depth), and a machine's maximum resolution through VBE is not always as high as the maximum resolution supported by the video card and monitor.

Source: The official GRUB2 documentation. (You'll notice the version number is 1.99. It's still GRUB2. A bit confusing, but true.)

[Finally, thanks to TechZilla for pointing out a serious error in the original version of this answer.]

-
+1 definitely a viable solution, even though it's not perfect. Thanks for the detailed answer, it's very well-written! –  Mehrdad May 26 '12 at 4:42
Also just an FYI, GRUB_GFXMODE=auto nearly always gets the best resolution possible via VESA. The VESA widescreen resolutions are not standardized, and I have never once been able to get one working from Grub2. I have heard it's possible, if using an Intel GFX chip and some semi-complicated VESA soft-patching. AFAIK this is not possible with non-Intel GFX chips. ... also you should add a +1 to my comment if it was on target. :P –  TechZilla May 26 '12 at 4:53
@Mehrdad Give the bounty to this answer. This is as close as your going to get AFAIK :D –  Amith KK May 26 '12 at 5:46
@AmithKK: I most likely will, though I think I'll just wait a little and let other people get a chance to at least read the question before I award it haha. :) –  Mehrdad May 26 '12 at 5:50

There's also a GUI option available.

Grub Customizer:

Grub Customizer allows to edit, rename, re-order or freeze Grub entries. It also allows to change the background colors of Grub menu or add a custom picture and supports BURG customization also. You can also use Grub Customizer from a Live CD/USB environment to fix your boot issues.

Installation:

Hit Alt+Ctrl+T to open terminal and run following commands:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer


How to use:

Once installed, hit Alt+F2, type grub-customizer and hit Enter.

Once open, click on Preferences in toolbar.

Under Appearance tab enable custom resolution, and type auto in the text box.

Alternatively under Advanced tab enable GRUB_GFXMODE and type auto in the text field in front of it. You can also specify resolution as a sequence of one or more modes, separated by commas (‘,’) or semicolons (‘;’); each will be tried in turn until one is found. For example:

1440x900,1680x1050,1920x1200,2560x1600

Or specified with depth (8, 16 or 24):

1440x900x16,1680x1050x16,1920x1200x16,2560x1600x16

Close the Preferences dialog box and click save on the toolbar of main window. That's it!

To remove Grub Customizer run following commands in terminal:

sudo apt-get autoremove --purge grub-customizer
`