systemd-boot 跳过启动菜单并忽略 /loader/loader.conf 中的设置

systemd-boot 跳过启动菜单并忽略 /loader/loader.conf 中的设置

最近,在我对多重启动系统做了一些操作后,当我使用 启动 NixOS 时systemd-boot,启动菜单不再显示,即使超时仍然设置为 2 秒/loader/loader.conf(在 ESP 上):

# /loader/loader.conf on the ESP
timeout 2
default nixos-generation-380

这是我的/etc/nixos/configuration.nix

{ # ...
  boot.loader = {
    efi.canTouchEfiVariables = true;
    systemd-boot.enable = true;
    timeout = 2;
  };
}

事实证明,要看到启动菜单,我必须在启动过程中按下某个键,就好像超时已设置为 0(而不是 2)秒一样。

我尝试systemd-bootx64.efi从 ESP 中删除并nixos-install使用 USB 闪存驱动器重新安装 NixOS。这恢复了systemd-bootx64.efi但没有恢复启动菜单。

看来这个问题并不完全罕见:

据报道,这两个问题都已得到解决。但是,我不明白第一个解决方案:

编辑3:解决了!重新安装 UEFI 就可以了。

“重新安装 UEFI”是什么意思?

至于第二个,它建议使用启动菜单中的tShift+t键(如果在启动过程中按下某个键,则会显示)来设置不同的超时,但我不想要只是不同的超时,我想要systemd-boot尊重 中的设置/loader/loader.conf

所以,我的问题是:如何systemd-boot再次使用设置/loader/loader.conf

找到解决方案后,我正在编辑这个问题,现在我要发布我的答案。

答案1

看完之后评论#6“systemd-boot,无超时,无选择菜单 - LoaderEntryDefault”并看着“systemd-boot 设置 efivar LoaderEntryDefault,它会覆盖 /boot/loader/loader.conf 中的默认值” nixpkgsGitHub 上的问题,我发现该问题可能是由 EFI 变量引起的,这些变量以某种方式设置并覆盖了/loader/loader.conf.

事实上,这两个变量设置造成了麻烦:

§ cat /sys/firmware/efi/efivars/LoaderConfigTimeout-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
0

§ cat /sys/firmware/efi/efivars/LoaderEntryDefault-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
nixos-generation-374

(我在这里编造了值“ 374”:重要的是它与/loader/loader.conf我检查时的值不同。)

使用的 EFI 变量列表systemd-boot可以在末尾找到“systemd-boot UEFI 启动管理器”页上自由桌面维基:

LoaderEntryDefault      entry identifier to select as default at bootup                  non-volatile
LoaderConfigTimeout     timeout in seconds to show the menu                              non-volatile
LoaderEntryOneShot      entry identifier to select at the next and only the next bootup  non-volatile
LoaderDeviceIdentifier  list of identifiers of the volume the loader was started from    volatile
LoaderDevicePartUUID    partition GPT UUID of the ESP systemd-boot was executed from     volatile

要删除LoaderEntryDefault-[...]变量,只需在启动菜单中按两次键即可d:设置和取消设置新值。

要删除LoaderConfigTimeout-[...]变量,结果足以按Shift+t足够多次将超时设置为0,再加上一次。

这解决了我的问题。这里有一个相关的问题我在 Superuser.SE 上询问了有关安全修改 EFI 变量的一般问题。

相关内容