Menu_auto_hide does not work on fedora silverblue 43 installation

Setting menu_auto_hide=1 does not work on my silverblue 43 installation. I have only one OS installed.

sudo grub2-editenv - list shows:

boot_success=1
menu_auto_hide=1

sudo grep -n menu_auto_hide /boot/grub2/grub.cfg shows nothing, but /etc/grub.d/12_menu_auto_hide exists.

The first line of /boot/grub2/grub.cfg says: Generated by bootupd / do not edit.

Is this caused by bootupd ignoring /etc/grub.d?

How should I resolve this problem?

Do you by chance have a dual boot system?

On my system with Workstation and dual booting with windows I see this in /boot/grub2/grub.cfg (excess trimmed out)

$ sudo grep -B10 -A10 menu_auto_hide /boot/grub2/grub.cfg
 
### BEGIN /etc/grub.d/12_menu_auto_hide ###
if [ x$feature_timeout_style = xy ] ; then
  if [ "${menu_show_once}" ]; then
    unset menu_show_once
    save_env menu_show_once
    set timeout_style=menu
    set timeout=60
  elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then
    set orig_timeout_style=${timeout_style}
    set orig_timeout=${timeout}
    if [ "${fastboot}" = "1" ]; then
      # timeout_style=menu + timeout=0 avoids the countdown code keypress check
      set timeout_style=menu
      set timeout=0
    else
      set timeout_style=hidden
      set timeout=1
    fi
  fi
fi
### END /etc/grub.d/12_menu_auto_hide ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/nvme0n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-42F8-BF3E' {
	insmod part_gpt
	insmod fat
	search --no-floppy --fs-uuid --set=root 42F8-BF3E
	chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
# Other OS found, undo autohiding of menu unless menu_auto_hide=2
if [ "${orig_timeout_style}" -a "${menu_auto_hide}" != "2" ]; then
  set timeout_style=${orig_timeout_style}
  set timeout=${orig_timeout}
fi
### END /etc/grub.d/30_os-prober ###

The section from the 30_os-prober script disables menu_auto_hide when dual booting.

Your command for me gives this

$ sudo grep -n menu_auto_hide /boot/grub2/grub.cfg
158:### BEGIN /etc/grub.d/12_menu_auto_hide ###
165:  elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then
178:### END /etc/grub.d/12_menu_auto_hide ###
213:# Other OS found, undo autohiding of menu unless menu_auto_hide=2
214:if [ "${orig_timeout_style}" -a "${menu_auto_hide}" != "2" ]; then

The first 3 lines are from the 12_menu_auto_hide script and the last 2 are from the 30_os-prober script.
On my other systems that do not dual boot I see the same exact first 3 lines and nothing from the os-prober script.

I don’t use silverblue so cannot give first hand comparison but this is what Workstation provides.

I have only installed silverblue on my current computer.

sudo ls -l /boot/efi/EFI/ shows:

total 8
drwx------. 2 root root 4096 Jan  1  1980 BOOT
drwx------. 2 root root 4096 Jan  5 11:48 fedora

There are no other boot entries left by previous installation.

I searched this website and found a related post, which says grub.cfg is static config since fedora 41:

But I am not sure how to fix /etc/grub.d/12_menu_auto_hide being ignored.

You can do this on a Fedora atomic desktop:

echo "set timeout=0" | sudo tee -a /boot/grub2/user.cfg > /dev/null

See this post for further details.

I tested it in a VM and it is working, however, the keys to bring up the GRUB menu at boot (Esc, Shift etc) are not working. Hopefully this is only a virtual machine issue, and it’s working on a bare-metal installation, because otherwise one wouldn’t be able to select a previous deployment if something went wrong with the new deployment.

So better test it right away if choosing this route.

Thank you. But this disables menu unconditionally. I wonder how to enable menu_auto_hide?