使用 systemd-boot 进行三重启动:如何在没有 Windows 启动管理器的情况下直接启动 Windows 10 和 11?

使用 systemd-boot 进行三重启动:如何在没有 Windows 启动管理器的情况下直接启动 Windows 10 和 11?

除了 Arch Linux 之外,我最近还在家用 PC 上安装了 Windows 11,但我的妻子直到考试结束后才准备好切换,所以我们暂时保留 Windows 10,导致启动情况非常复杂:

  1. 启动时,如果未手动选择任何内容,systemd 启动管理器将等待 3 秒(默认为 Windows 10)。当选择 Arch Linux 时,一切都很好并且它将启动它,但是当选择 Windows 时:
  2. 它将启动 Windows 11,然后显示 Windows 启动管理器,它将显示 Windows 10 和 11,但不显示 Arch Linux(否则可以直接使用),并等待 30 秒,然后启动最后启动的任何内容。如果选择 Windows 11,它将启动它,但是如果选择 Windows 10:
  3. 它将再次重新启动,并再次显示 systemd 启动管理器。现在如果选择Windows 10,它终于会启动它。

我的目标是在我的 systemd 启动菜单中只包含以下 3 个条目,我怎样才能实现这一目标?

  1. 架构Linux
  2. Windows 10(默认)
  3. 视窗11

选择任一 Windows 选项都会直接启动。我环顾/boot/efi/Microsoft/Boot文件夹,但唯一的.efi文件是bootmgfw.efibootmgr.efi

$ bootctl 列表

Boot Loader Entries:
        title: Arch Linux
           id: arch.conf
       source: /boot/loader/entries/arch.conf
        linux: /vmlinuz-linux-ck-skylake
       initrd: /intel-ucode.img
               /initramfs-linux-ck-skylake.img
      options: root=/dev/nvme0n1p5 rw nvidia-drm.modeset=1 systemd.unified_cgroup_hierarchy=false

        title: MemTest86
           id: memtest86-efi.conf
       source: /boot/loader/entries/memtest86-efi.conf

        title: Windows 10 (default)
           id: windows.conf
       source: /boot/loader/entries/windows.conf

        title: Windows Boot Manager
           id: auto-windows
       source: /sys/firmware/efi/efivars/LoaderEntries-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f

        title: Reboot Into Firmware Interface
           id: auto-reboot-to-firmware-setup
       source: /sys/firmware/efi/efivars/LoaderEntries-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f

/boot/loader/loader.conf

timeout 3
console-mode max
default windows.conf

/boot/loader/entries/windows.conf

title   Windows 10
efi /EFI/Microsoft/Boot/bootmgfw.efi 

答案1

编辑:一个想法 - 隐藏 grub 并仅在按下特定键时激活它

我建议使用grub2而不是systemd-bootwhich 应该给你更多的选择。此解决方案不会显示“linux”启动管理器 ( grub2),直到ESC按下F4SHIFT按住(您必须尝试哪个适合您)。

在 处进行以下配置/etc/default/grub

GRUB_TIMEOUT=3(选择默认选项之前的秒数)

GRUB_TIMEOUT_STYLE=hidden

'GRUB_TIMEOUT_STYLE'

如果此选项未设置或设置为“menu”,则 GRUB 将显示菜单,然后等待“GRUB_TIMEOUT”设置的超时到期,然后再启动默认条目。按某个键会中断超时。

如果此选项设置为“倒计时”或“隐藏”,则在显示菜单之前,GRUB 将等待“GRUB_TIMEOUT”设置的超时到期。如果在此期间按下ESC或F4,或者按住SHIFT,则会显示菜单并等待输入。如果按下与菜单项关联的热键,它将立即启动关联的菜单项。如果超时在这两种情况发生之前到期,它将启动默认条目。在“倒计时”情况下,它将显示一行剩余时间指示。

我发现有时您需要编辑 /etc/grub.d/30_os_prober并更改选项quick_boot="1"才能quick_boot="0"使其正常工作。

最后你必须运行update-grub来更新你的配置。

相关内容