Grub wait time 10 seconds after editing to "0" in /etc/default/grub?

9,253

Solution 1

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

Solution 2

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".

Solution 3

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.

Share:
9,253

Related videos on Youtube

RCF
Author by

RCF

Less is more.

Updated on September 18, 2022

Comments

  • RCF
    RCF over 1 year

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

    • Qasim
      Qasim almost 9 years
    • RCF
      RCF almost 9 years
      @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.
    • thomasrutter
      thomasrutter almost 9 years
      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?
    • RCF
      RCF almost 9 years
      @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.
    • Maxim Mazurok
      Maxim Mazurok over 4 years
  • RCF
    RCF almost 9 years
    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?
  • Daniel
    Daniel almost 9 years
    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?
  • RCF
    RCF almost 9 years
    you should be able to answer your Grub question here -> [help.ubuntu.com/community/Grub2]
  • Menasheh
    Menasheh over 7 years
    Didn't work for me.
  • Maxim Mazurok
    Maxim Mazurok over 4 years
    I've edited 30_os-prober on Ubuntu 19.10 and it worked like a charm, here are the exact steps: askubuntu.com/a/1189737/518931
  • David
    David about 2 years
    Your answer does not address what the OP asked.