6

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??

Verax
  • 91
RCF
  • 2,097
  • 4
  • 19
  • 25
  • May be this will help you http://unix.stackexchange.com/questions/119865/grub-doesnt-have-the-timeout-anymore – Qasim Jun 09 '15 at 01: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 09 '15 at 02: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 09 '15 at 04: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 09 '15 at 12:46

5 Answers5

8

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
Verax
  • 91
edwin
  • 3,799
  • 20
  • 33
6

There is an override in grub for when the timeout is 0 seconds to replace it with 10 seconds. Rather than editing grub scripts as other answers recommend you can simply use:

GRUB_HIDDEN_TIMEOUT="0.0"
GRUB_TIMEOUT="0.0"

This will work because the grub overrides will not find "0" to be equal to "0.0".

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.

solsTiCe
  • 9,231
0

Editing /etc/default/grub is insufficient.

The following modifications are also required:

Disable grub timeout using one of these methods:

sudoedit /boot/grub/grub.cfg  

comment out these lines (by placing a # at the start of the lines)

#if [ "${timeout}" = 0 ]; then  
#set timeout=10  
#fi  

save the file and exit.

OR (better, as the above would need to be re-done each time the file is generated, which happens whenever update-grub is called):

sudoedit /etc/grub.d/30_os-prober

comment out these lines

#if [ "\${timeout}" = 0 ]; then
#set timeout=10
#fi

save, exit and then run sudo update-grub.

Zanna
  • 70,465
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.

Daniel
  • 3,446
  • 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 -> [https://help.ubuntu.com/community/Grub2] – RCF Jun 11 '15 at 17:44