必须通过efibootmgr在UEFI固件中直接注册GRUB启动项,路径为\EFI\ubuntu\grubx64.efi,指定ESP分区编号并设置启动顺序,重启后在UEFI启动菜单中即可选择GRUB。

要在UEFI固件中为已安装的GRUB添加一个可识别、可启动的Windows Boot Manager条目,必须绕过GRUB自身配置,直接向UEFI固件注册启动项——这一步是Windows系统能从UEFI菜单里“看到并选中GRUB”的前提,否则仅靠修改/etc/grub.d/40_custom无法让Windows侧感知GRUB存在。
确认GRUB EFI可执行文件位置
在Linux系统中打开终端,执行:
sudo find /boot/efi -name "grubx64.efi" -o -name "shimx64.efi" 2>/dev/null
典型路径为/boot/efi/EFI/ubuntu/grubx64.efi或/boot/efi/EFI/fedora/shimx64.efi。若返回空,请先确保GRUB已正确安装到ESP(EFI系统分区)且未被Windows覆盖;【未挂载/boot/efi或ESP被隐藏将导致找不到文件】。
获取ESP分区设备路径与UUID
运行:
sudo blkid | grep -i fat32
找到标记为TYPE="vfat"且含PARTLABEL="EFI System"或挂载点为/boot/efi的行,记下其设备名(如/dev/nvme0n1p1)和UUID(如44DF-51D1)。
验证是否已挂载:
mount | grep efi
若无输出,手动挂载:
sudo mkdir -p /mnt/esp && sudo mount /dev/nvme0n1p1 /mnt/esp
使用efibootmgr注册GRUB启动项
第一步:确认当前UEFI启动项列表
sudo efibootmgr -v
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
第二步:构造新启动项命令
sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L "GRUB Linux" -l '\EFI\ubuntu\grubx64.efi'
说明:
• -d /dev/nvme0n1 指定物理磁盘(不是分区)
• -p 1 表示第1个分区(即ESP所在分区编号,对应nvme0n1p1中的p1)
• -L "GRUB Linux" 是启动菜单显示名称,支持中文但建议用ASCII字符避免乱码
• -l '\EFI\ubuntu\grubx64.efi' 路径使用反斜杠、开头带反斜杠、区分大小写,且必须是ESP根目录下的相对路径
执行后将输出类似BootCurrent: 0001 BootOrder: 0001,0000 Boot0001* GRUB Linux,其中Boot0001为新分配的启动项编号。
设置默认启动项(可选)
若希望开机直接进入该GRUB项,运行:
sudo efibootmgr -o 0001,0000
此处0001为你上一步生成的新项编号,0000是原Windows Boot Manager编号(可用efibootmgr -v查得)。顺序决定优先级,排第一者默认启动。
重启并验证UEFI启动菜单
执行:
sudo reboot
开机时立即连按F10(惠普)、F12(戴尔/联想)、ESC(部分华硕)或DEL(技嘉),进入UEFI启动菜单(非BIOS设置界面)。在列表中应可见“GRUB Linux”条目,选择后即可加载GRUB主菜单。










