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?
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:Once the file is open, replace these lines
with these:
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:
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 the1
with a0
:When you're done, the line should read like:
Save the files and then run the below command to reconfigure the bootloader and to apply your changes:
I believe this issue may be due to multiple OS according to this excerpt from Grub2 wiki:
If no other operating system is detected GRUB 2 will boot straight into the default operating system and no menu will be displayed. If another operating system is detected the GRUB 2 menu will display.
AND
Saving an OS can be achieved by running sudo grub-set-default if GRUB_DEFAULT=saved is set in /etc/default/grub. It may also be saved if GRUB_SAVEDEFAULT=true is also set in /etc/default/grub. In this case, the default OS remains until a new OS is manually selected from the GRUB 2 menu or the grub-set-default command is executed.
The Grub2 Wiki also states: Note: There is a longstanding confirmed bug on the hidden menu feature in GRUB 1.97 to GRUB 1.99. The menu may not hide as specified in the description on this page. While editing the 30_os-prober script can fix this issue, it is beyond the scope of this page.
As a work around you can set the
GRUB_TIMEOUT="1"
and you will only see the menu for 1 second. If I need to switch to another OS I simply hit the arrow down key within that second and the menu will appear until I make a choice.There may be a potential syntax problem associated with the bug. I am not a Grub2 expert but in my grub file every command line ends with ="some quoted setting" I remember from my coding days that "quotes" were to pass a string where as non quotes were passing simple numeric values to the variables. I am not UP in new code techniques. e.g. Here is some of my grub output:
I'm looking into this Grubbug :) for more info as well as This Bug Both of these are Grub2 related 2yrs old. Some of this could be related to the MBR code before the handoff to Grub2
I guess you want to try 'everything' available via
/etc/default/grub
. Did you read this link,help.ubuntu.com/community/Grub2/Setup#Configuring_GRUB_2
I suggest that you try removing the following lines from
/boot/grub/grub.cfg
,Yes, I know, you would have to do it every time
update-grub
has run, but you can make a script for it.