GRUB2 – How to Hide GRUB Menu and Show with Shift or Esc Key at Boot

grub2menu

I'm running Ubuntu 16.10, and I'm trying to hide my GRUB menu at power on/boot time, and wish the menu to appear only when I hit the Shift or Esc keys.

I change the appropriate options in /etc/default/grub and it still won't hide the menu.

In researching this, I found this post from 2013 GRUB hidden menu not working that indicates that the problem has been around for a while, and suggests a change to /etc/grub.d/30_os-prober which I'd rather not do. That code suggests that since its found multiple OS's, it's going to set the GRUB_TIMEOUT=10 anyway.

Here's a snippet of what I have now in /etc/default/grub… a menu with a 10 second countdown…

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
GRUB_HIDDEN_TIMEOUT_QUIET=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

If I uncomment #GRUB_HIDDEN_TIMEOUT=0, then sudo update-grub insists that I also set GRUB_TIMEOUT=10 to GRUB_TIMEOUT=0. I do that, and I still see the GRUB menu.

In terminal, typing info -f grub -n 'Simple configuration' describes the various options, and at the very end of the info, it shows that some of the current commands have been depreciated, and suggests that the newer replacements are better.

Does anybody know how I can get my GRUB menu to hide in 16.10 AND have it recognize Shift or Esc keys at boot time?

Best Answer

OK folks, here's the answer... to obtain a hidden GRUB menu in dual-boot configurations... two edits... and a sudo update-grub...

Edit #1

To obtain a hidden GRUB menu in a multi-boot configuration, we first need to edit /etc/default/grub. Open this file using the below command:

sudo editor /etc/default/grub

Once the file is open, replace these lines

GRUB_HIDDEN_TIMEOUT_QUIET=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=10

with these:

GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT_STYLE=countdown
#GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=3

This will cause GRUB to display a 3 second countdown timer on the screen. By doing this, a user can hit the Esc key to bring up the default menu. Otherwise, the default OS will boot.

If you wish that the default OS should be set to the last-booted OS, add the below two lines under the "GRUB_TIMEOUT=3" shown above:

GRUB_DEFAULT=saved    # change an existing line to this
GRUB_SAVEDEFAULT=true # add this line

Edit #2

Next, the OS prober needs to be updated to disable the quick_boot feature. To do this, open /etc/grub.d/30_os-prober in your favorite editor and change the below line (line 23 in 17.04) by replacing the 1 with a 0:

quick_boot="1"

When you're done, the line should read like:

quick_boot="0"

Save the files and then run the below command to reconfigure the bootloader and to apply your changes:

sudo update-grub
Related Question