It is a common way to set the resolution of a text consoles (that are usually available by Ctrl-Alt-F1 thru Ctrl-Alt-F6) by using a vga=... kernel parameter. I'm using Ubuntu 10.04 Lucid, output of uname -a is:

Linux  2.6.32-33-generic #70-Ubuntu SMP Thu Jul 7 21:13:52 UTC 2011 x86_64 GNU/Linux

To identify modes available i use the sudo hwinfo --framebuffer which reports:

02: None 00.0: 11001 VESA Framebuffer                            
  [Created at bios.464]  
  Unique ID: rdCR.R1b4duaxSqA  
  Hardware Class: framebuffer  
  Model: "NVIDIA G73 Board - p456h1  "  
  Vendor: "NVIDIA Corporation"  
  Device: "G73 Board - p456h1  "  
  SubVendor: "NVIDIA"  
  SubDevice:   
  Revision: "Chip Rev"  
  Memory Size: 256 MB  
  Memory Range: 0xc0000000-0xcfffffff (rw)  
  Mode 0x0300: 640x400 (+640), 8 bits  
  Mode 0x0301: 640x480 (+640), 8 bits  
  Mode 0x0303: 800x600 (+800), 8 bits  
  Mode 0x0305: 1024x768 (+1024), 8 bits  
  Mode 0x0307: 1280x1024 (+1280), 8 bits  
  Mode 0x030e: 320x200 (+640), 16 bits  
  Mode 0x030f: 320x200 (+1280), 24 bits  
  Mode 0x0311: 640x480 (+1280), 16 bits  
  Mode 0x0312: 640x480 (+2560), 24 bits  
  Mode 0x0314: 800x600 (+1600), 16 bits  
  Mode 0x0315: 800x600 (+3200), 24 bits  
  Mode 0x0317: 1024x768 (+2048), 16 bits  
  Mode 0x0318: 1024x768 (+4096), 24 bits  
  Mode 0x031a: 1280x1024 (+2560), 16 bits  
  Mode 0x031b: 1280x1024 (+5120), 24 bits  
  Mode 0x0330: 320x200 (+320), 8 bits  
  Mode 0x0331: 320x400 (+320), 8 bits  
  Mode 0x0332: 320x400 (+640), 16 bits  
  Mode 0x0333: 320x400 (+1280), 24 bits  
  Mode 0x0334: 320x240 (+320), 8 bits  
  Mode 0x0335: 320x240 (+640), 16 bits  
  Mode 0x0336: 320x240 (+1280), 24 bits  
  Mode 0x033d: 640x400 (+1280), 16 bits  
  Mode 0x033e: 640x400 (+2560), 24 bits  
  Config Status: cfg=new, avail=yes, need=no, active=unknown  

It looks like many hi-res modes are available, like 0x305, 0x307, 0x317, 0x318, 0x31a, 0x31b (by the way, what does the plus-number means in the list of modes?). However, setting any of these modes in kernel option string, line vga=0x305, results in either pitch black text console, or screen filled by blinking color/bw dots.

What is the 'modern', 'robust' way to set up high resolution in text consoles?

up vote 23 down vote accepted

Newer kernels use KMS by default, so you should move away from appending vga= to your grub line as it will conflict with the native resolution of KMS. However, it depends upon the video driver you are using: the proprietary Nvidia driver doesn't support KMS, but you can work around it.

You should be able to get full resolution in the framebuffer by editing your /etc/default/grub and making sure that the GFXMODE is set correctly, and then adding a GFXPAYLOAD entry like so:

GRUB_GFXMODE=1680x1050x24

# Hack to force higher framebuffer resolution
GRUB_GFXPAYLOAD_LINUX=1680x1050

Remember to run sudo update-grub afterwards.

  • I've got Driver "nvidia" in my xorg.conf, so it's probably a proprietary driver. I'll experiment with grub anyway. By the way, how to work-around the proprietary driver? – mbaitoff Jul 20 '11 at 8:34
  • I use the proprietary driver and the above method (on a 10.10 box) and it is fine. You could always try a nouveau driver if you wanted: nouveau.freedesktop.org/wiki/UbuntuPackages – jasonwryan Jul 20 '11 at 8:42
  • 1
    Looks like GFXPAYLOAD approach worked, but only with set gfxpayload=keep in grub2 configuration files. – mbaitoff Jul 20 '11 at 9:07
  • 2
    But I still have a suspicion that my video mode is not native. I provided GRUB_GFXPAYLOAD=1920x1080 with GRUB_GFXMODE=1920x1080x24, but I still see the blurred letters in console as if I were in non-native resolution. – mbaitoff Jul 20 '11 at 9:09
  • 1
    Stumbled across this trying to get a larger console for my VM and wanted to add to @mbaitoff's comment. To get the set gfxpayload=keep into the grub2 configuration, you need to add the line GRUB_GFXPAYLOAD_LINUX=keep to your /etc/default/grub. (This is on Debian, and I would assume Ubuntu - YMMV on others). Had to hunt this down in the grub docs, so figured I'd share. – Will Sep 8 '14 at 2:50

For newer Debian & Ubuntu distros using nvidia, I had to do the following:

First, edit /etc/default/grub. Change the following line:

#GRUB_GFXMODE=640x480 

to this:

GRUB_GFXMODE=1280x800 
GRUB_GFXPAYLOAD_LINUX=keep

replacing 1280x800 with the desired resolution.

Then:

echo "FRAMEBUFFER=y" | sudo tee /etc/initramfs-tools/conf.d/splash
sudo update-initramfs -u
sudo update-grub

To change the font size, you can do so using the following command:

sudo dpkg-reconfigure console-setup
  • 2
    +1 for dpkg-reconfigure console-setup – jinowolski Dec 8 '15 at 15:10
  • This worked for me on Kubuntu 16.04 with NVidia 390 driver. – Maxim Egorushkin Mar 20 at 13:31

Here's your best option:

Use sudo hwinfo --framebuffer as described, choose a video mode you would like to see during boot in console, then add the option vga=nnn to the kernel boot parameters.

The only trick is that nnn is the video mode you selected from the list produced by hwinfo - CONVERTED TO DECIMAL !!!

If you try vga=0xwhatever it's not going to work.

For instance I chose video mode 0x307 (1280x1024 (+1280), 8 bits), I converted 0x307 to decimal which is 775 and then I used vga=775 in the boot parameters of isolinux/extlinux.

You can use printf to convert hexadecimal to decimal: $ printf "%d\n" 0x307 775

And I got a nice fine text in all consoles from the start.

Success!

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.