37

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?

1

4 Answers 4

35

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.

13
  • 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, 2011 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, 2011 at 8:42
  • 2
    Looks like GFXPAYLOAD approach worked, but only with set gfxpayload=keep in grub2 configuration files.
    – mbaitoff
    Jul 20, 2011 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, 2011 at 9:09
  • 3
    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, 2014 at 2:50
19

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 "echo FRAMEBUFFER=y" | sudo tee /etc/initramfs-tools/conf.d/splash
sudo update-initramfs -u
sudo update-grub

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

sudo dpkg-reconfigure console-setup
5
  • 4
    +1 for dpkg-reconfigure console-setup
    – jinowolski
    Dec 8, 2015 at 15:10
  • This worked for me on Kubuntu 16.04 with NVidia 390 driver. Mar 20, 2018 at 13:31
  • This is NOT A TYPO, echo "echo FRAMEBUFFER=y" is correct. I have checked and verified this and this will not work without the subsequent echo command written to the file. Thanks!
    – mchid
    Oct 17, 2018 at 6:13
  • i run debian 10 in qemu. window is too big, if i "zoom out", font is to small. i tried 640x480, then 320x240, the ...gfxpayload... as keep and 320x240, etc, do not work. intel integrated graphic card on host.
    – qdinar
    Jun 6, 2021 at 9:59
  • i had grub-legacy installed by mistake. after i fixed it, i have not tried this.
    – qdinar
    Jun 6, 2021 at 16:56
12

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!

1
1

Updated: (a possible solution to some of us who have done changes to config files and couldn't get the success):

I have been trying to achieve this since about six months and found zero success. All of the methods that I kept finding since then didn't work at all with my system. Then somehow I found out that you need to.. disable the CSM (Compatibility Support Module) in System BIOS's Boot section for the methods shown in above answers to actually work.

When you have enabled the CSM in BIOS's boot section, the "EFI GOP Drive" will only show up to 1280x1024 or something (videoinfo / vbeinfo or whatever you tell to the GRUB command line), and as soon as you disable the CSM, you get the full display resolution supported by your monitor. And then you need to write all that config as shown in above answers.

Again, I am repeating, you will not get the support for full resolution if you don't disable CSM in BIOS.


Original(frustrated mindset): Pardon me. This is a non conventional answer. I am only here to tell that none of the above answers are working for Debian 10.6 (Bullseye), Kernel 5.10.13. UEFI BIOS with EFI boot, HDMI-0 via Nvdia GTX 1060 with proprietary driver, i7-5775C on Z97 motherboard.

3
  • it is better to comment those answers and mention they don't work
    – FargolK
    Mar 10, 2021 at 12:32
  • @FargolK you are right! I should have done that Actually, a couple of hours ago, I think I may have found the right answer for me and alike. I am going to update this.
    – falero80s
    Mar 10, 2021 at 21:31
  • i run debian 10 in qemu. when i try to run vbeinfo or videoinfo in grub command line, they hang.
    – qdinar
    Jun 6, 2021 at 10:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .