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

Ale*_*xey 7 boot uefi nixos systemd-boot

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

# /loader/loader.conf on the ESP
timeout 2
default nixos-generation-380
Run Code Online (Sandbox Code Playgroud)

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

{ # ...
  boot.loader = {
    efi.canTouchEfiVariables = true;
    systemd-boot.enable = true;
    timeout = 2;
  };
}
Run Code Online (Sandbox Code Playgroud)

事实证明,要查看启动菜单,我必须在启动过程中按下某个键,就好像超时已设置为 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

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

Ale*_*xey 4

阅读关于“systemd-boot,无超时,无选择菜单 - LoaderEntryDefault”的评论 #6并查看GitHub 上的“systemd-boot 设置 efivar LoaderEntryDefault,它覆盖 /boot/loader/loader.conf 中的默认值”问题后,我\已经发现问题可能是由 EFI 变量引起的,这些变量以某种方式设置并覆盖了. nixpkgs/loader/loader.conf

\n\n

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

\n\n
\xc2\xa7 cat /sys/firmware/efi/efivars/LoaderConfigTimeout-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f\n0\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
\xc2\xa7 cat /sys/firmware/efi/efivars/LoaderEntryDefault-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f\nnixos-generation-374\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

使用的 EFI 变量列表可以在Freedesktop Wiki上的“systemd-boot UEFI Boot Manager”页面systemd-boot的末尾找到:

\n\n
LoaderEntryDefault      entry identifier to select as default at bootup                  non-volatile\nLoaderConfigTimeout     timeout in seconds to show the menu                              non-volatile\nLoaderEntryOneShot      entry identifier to select at the next and only the next bootup  non-volatile\nLoaderDeviceIdentifier  list of identifiers of the volume the loader was started from    volatile\nLoaderDevicePartUUID    partition GPT UUID of the ESP systemd-boot was executed from     volatile\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

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

\n