Public bug reported: # What is happening When `GRUB_TIMEOUT=1` is set in `/etc/default/grub` and `update-grub` is run, the desired grub boot menu timeout of 1 second is not acknowledged. This is on an EFI system.
The following is the relevant snippet of `/boot/grub/grub.cfg`: ``` if [ "${recordfail}" = 1 ] ; then set timeout=30 else if [ x$feature_timeout_style = xy ] ; then set timeout_style=hidden set timeout=1 # Fallback hidden-timeout code in case the timeout_style feature is # unavailable. elif sleep --interruptible 1 ; then set timeout=0 fi fi if [ $grub_platform = efi ]; then set timeout=30 if [ x$feature_timeout_style = xy ] ; then set timeout_style=menu fi fi ``` The issue here is that on an EFI system, the `timeout` is overridden by the later test to 30 seconds. # What is expected I expect that when I set `GRUB_TIMEOUT=1` in `/etc/default/grub` that the grub menu will timeout (continue to boot) in 1 second. # Workaround The EFI timeout is taken from `GRUB_HIDDEN_TIMEOUT_QUIET` in `/etc/grub.d/00_header`. Adding `GRUB_HIDDEN_TIMEOUT_QUIET=1` solves the problem, but is the wrong approach. # Possible solutions As a user I do not see why on an EFI system there should be a separate timeout, or indeed that the timeout should even depend on the system type. i.e As a user I don't care. Looking at the generated grub config I would expect that the generated output would be: ``` if [ "${recordfail}" = 1 ] ; then set timeout=30 else if [ x$feature_timeout_style = xy ] ; then set timeout_style=hidden set timeout=1 # Fallback hidden-timeout code in case the timeout_style feature is # unavailable. elif sleep --interruptible 1 ; then set timeout=0 fi fi if [ $grub_platform = efi ]; then set timeout=1 if [ x$feature_timeout_style = xy ] ; then set timeout_style=menu fi fi ``` but am confused as to why the EFI detection is in a separate `if...` Clearly the code in `/etc/grub.d/00_header` should be changed from: ``` 413 if [ \$grub_platform = efi ]; then 414 set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30} 415 if [ x\$feature_timeout_style = xy ] ; then 416 set timeout_style=menu 417 fi 418 fi ``` to ``` 413 if [ \$grub_platform = efi ]; then 414 set timeout=${GRUB_TIMEOUT:-30} 415 if [ x\$feature_timeout_style = xy ] ; then 416 set timeout_style=menu 417 fi 418 fi ``` # Additional information Ubunutu version: ``` lsb_release -r Release: 20.10 ``` Package version ``` dpkg -l grub2-common Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-==============-================-============-===================================================== ii grub2-common 2.04-1ubuntu35.4 amd64 GRand Unified Bootloader (common files for version 2) ``` ** Affects: grub2 (Ubuntu) Importance: Undecided Status: New -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1918736 Title: update-grub uses the wrong timout for efi system To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1918736/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs