5

Using all of the solutions described on this site, setting the Grub menu wait time to zero does not work.

I did the following:

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

Uncommented this line, per instruction.

GRUB_HIDDEN_TIMEOUT="0"

Set this line, per instruction.

GRUB_TIMEOUT="0"

/etc/default/grub now looks like this:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg. 
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

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

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL="console"

# 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 if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID="true"

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

Having edited the /etc/default/grub file -->

sudo update-grub

After restarting, Grub wait-time is still set to 10 seconds.

I was able to get the wait time to 1 second with just one simple change. Edited these two lines in /etc/default/grub

#GRUB_HIDDEN_TIMEOUT="0"

GRUB_TIMEOUT="1"  

Commented the first back to the default value, and set GRUB_TIMEOUT to "1".

After,

sudo update-grub

This solution works, but my question is:

Where is the trap that resets the TIMEOUT value to 10 seconds when GRUB-TIMEOUT is set to "0".

Maybe one of the "IF" tests in grub.cfg??

  • May be this will help you unix.stackexchange.com/questions/119865/… – Qasim Jun 9 '15 at 1:39
  • @Qasim I had read that, but there is no explanation as to why Grub defaults to 10 seconds when values are set to "0" and yet if you set 'GRUB-TIMEOUT="1"' Grub functions exactly like it should, boot sequence starts in 1 second. – RCF Jun 9 '15 at 2:28
  • Just for troubleshooting purposes, does it still do this if you comment out the GRUB_HIDDEN_TIMEOUT and GRUB_HIDDEN_TIMEOUT_QUIET lines and only have the GRUB_TIMEOUT line set to 0? – thomasrutter Jun 9 '15 at 4:33
  • @thomasrutter yes, I have tried this in every possible combination using the zero value. There is something that does not allow a 0 value if you are dual booting OS's. There are a couple of accepted answers on this site stating that it will work, but that simply is not the case with Grub2 and 15.04. – RCF Jun 9 '15 at 12:46
5
+50

This is a bug. The problem is in the file /etc/grub.d/30_os-prober.

As presented here, a workaround is to add the files /etc/grub.d/25_pre-os-prober and /etc/grub.d/35_post-os-prober.

The two files must also be marked as executable to work.

After adding this two files, your modifications to the variable GRUB_TIMEOUT in /etc/default/grub should work as expected.

If you are not dual booting, another workaround is to uninstall os-prober.

25_pre-os-prober:

#! /bin/sh
# file: /etc/grub.d/25_pre-os-prober
set -e

# Save the $timeout and $timeout_style values set by /etc/grub.d/00_header
# before /etc/grub.d/30_os-prober messes them up.

cat << EOF
set timeout_bak=\${timeout}
set timeout_style_bak=\${timeout_style}
EOF

35_post-os-prober

#! /bin/sh
# file: /etc/grub.d/35_post-os-prober
set -e

# Reset $timeout and $timeout_style to their original values
# set by /etc/grub.d/00_header before /etc/grub.d/30_os-prober messed them up.

cat << EOF
set timeout=\${timeout_bak}
set timeout_style=\${timeout_style_bak}
EOF
  • 1
    Didn't work for me. – Menasheh Dec 30 '16 at 17:08
2

If you read the documentation at info -f grub -n 'Simple configuration', it is said that GRUB_HIDDEN_TIMEOUT_* is deprecated.

Could you try using instead in /etc/default/grub:

GRUB_TIMEOUT=0
GRUB_TIMEOUT_STYLE=hidden
#GRUB_HIDDEN_TIMEOUT="0"
#GRUB_HIDDEN_TIMEOUT_QUIET="true"
# rest of file unchanged

Run

sudo update-grub

and see if it works or not.

You could double-check in /boot/grub/grub.cfg looking for timeout that the update has correctly been done.

0

I've always been able to get a 0 second time, although a 1 second time isn't much more wasted time. Try changing this line

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash profile"

to this:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

I don't see anything in this config file that seems out of whack, but you might try this if you're desperate to save 1 second during boot time.

  • I'm really not desperate at all, 1 second is totally acceptable. What I am seeking is where is the trap which disallows the "0" wait time and resets to 10 seconds. Wouldn't it be reasonable to expect a warning that the "0" value is not accepted, please reset to any non-zero number? – RCF Jun 10 '15 at 20:56
  • It would be reasonable to expect that, but it's also reasonable for the devs to expect users to not need to change it. Is update-grub a binary file? or is it just a script? – Daniel Jun 11 '15 at 16:43
  • you should be able to answer your Grub question here -> [help.ubuntu.com/community/Grub2] – RCF Jun 11 '15 at 17:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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