[Tutorial] Add a systemd-boot loader Menu entry for a Windows installation using a separate ESP Partition

getting an issue where no new entries showing up in the systemd bootloader.

here’s my /boot/EFI directory tree:

.
├── BOOT
│   └── BOOTX64.EFI
├── Linux
├── shellx64.efi
└── systemd
    └── systemd-bootx64.efi

no secure boot or fast boot, any ideas?

Nevermind figured it out. Still cant get into windows though as bitlocker asks for a key but I cannot actually input my key. Booting through firmware interface into windows works but that has always been the case. @nihil21 you mentioned you had bitlocker, have you found a way to get it working?

I need a bit of assistance with this. I recently reinstalled Windows on my other nvme. Before i had a Windows 10 Entry which now doesn’t seem to work anymore. How do i proceed to get it back? Should i just delete the Microsoft folder before following this guide? This is how it looks currently… I also don’t know which folder i actually should use to put the shellx64.efi in this case /efi or /efi/EFI ?

/efi
 !w /efi  tree                                                                                                                                                                                                                                                                                               ok | 00:09:05 
.
├── 900a5e6bebe342318a6869b95d3667fe
│   └── 6.8.2-arch2-1
│       ├── initrd
│       ├── initrd-fallback
│       └── linux
├── EFI
│   ├── BOOT
│   │   └── BOOTX64.EFI
│   ├── Linux
│   ├── Microsoft
│   │   ├── Boot
│   │   │   ├── BCD
│   │   │   ├── BCD.LOG
│   │   │   ├── BCD.LOG1
│   │   │   ├── BCD.LOG2
│   │   │   ├── bg-BG
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── bootmgfw.efi
│   │   │   ├── bootmgr.efi
│   │   │   ├── BOOTSTAT.DAT
│   │   │   ├── boot.stl
│   │   │   ├── cs-CZ
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── da-DK
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── de-DE
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── el-GR
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── en-GB
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── en-US
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── es-ES
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── es-MX
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── et-EE
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── fi-FI
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── Fonts
│   │   │   │   ├── chs_boot.ttf
│   │   │   │   ├── cht_boot.ttf
│   │   │   │   ├── jpn_boot.ttf
│   │   │   │   ├── kor_boot.ttf
│   │   │   │   ├── malgun_boot.ttf
│   │   │   │   ├── malgunn_boot.ttf
│   │   │   │   ├── meiryo_boot.ttf
│   │   │   │   ├── meiryon_boot.ttf
│   │   │   │   ├── msjh_boot.ttf
│   │   │   │   ├── msjhn_boot.ttf
│   │   │   │   ├── msyh_boot.ttf
│   │   │   │   ├── msyhn_boot.ttf
│   │   │   │   ├── segmono_boot.ttf
│   │   │   │   ├── segoen_slboot.ttf
│   │   │   │   ├── segoe_slboot.ttf
│   │   │   │   └── wgl4_boot.ttf
│   │   │   ├── fr-CA
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── fr-FR
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── hr-HR
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── hu-HU
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── it-IT
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── ja-JP
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── kd_02_10df.dll
│   │   │   ├── kd_02_10ec.dll
│   │   │   ├── kd_02_1137.dll
│   │   │   ├── kd_02_14e4.dll
│   │   │   ├── kd_02_15b3.dll
│   │   │   ├── kd_02_1969.dll
│   │   │   ├── kd_02_19a2.dll
│   │   │   ├── kd_02_1af4.dll
│   │   │   ├── kd_02_8086.dll
│   │   │   ├── kd_07_1415.dll
│   │   │   ├── kd_0C_8086.dll
│   │   │   ├── kdnet_uart16550.dll
│   │   │   ├── kdstub.dll
│   │   │   ├── ko-KR
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── lt-LT
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── lv-LV
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── memtest.efi
│   │   │   ├── nb-NO
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── nl-NL
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── pl-PL
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── pt-BR
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── pt-PT
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── qps-ploc
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── Resources
│   │   │   │   ├── bootres.dll
│   │   │   │   └── de-DE
│   │   │   │       └── bootres.dll.mui
│   │   │   ├── ro-RO
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── ru-RU
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── sk-SK
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── sl-SI
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── sr-Latn-RS
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── sv-SE
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── tr-TR
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   ├── uk-UA
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   └── bootmgr.efi.mui
│   │   │   ├── winsipolicy.p7b
│   │   │   ├── zh-CN
│   │   │   │   ├── bootmgfw.efi.mui
│   │   │   │   ├── bootmgr.efi.mui
│   │   │   │   └── memtest.efi.mui
│   │   │   └── zh-TW
│   │   │       ├── bootmgfw.efi.mui
│   │   │       ├── bootmgr.efi.mui
│   │   │       └── memtest.efi.mui
│   │   └── Recovery
│   │       ├── BCD
│   │       ├── BCD.LOG
│   │       ├── BCD.LOG1
│   │       └── BCD.LOG2
│   └── systemd
│       └── systemd-bootx64.efi
├── loader
│   ├── entries
│   │   ├── 900a5e6bebe342318a6869b95d3667fe-6.8.2-arch2-1.conf
│   │   └── 900a5e6bebe342318a6869b95d3667fe-6.8.2-arch2-1-fallback.conf
│   ├── entries.srel
│   ├── loader.conf
│   └── random-seed
└── System Volume Information


edit
Okay i just gave it a shot. It had to be /efi /efi/EFI wouldn’t work (the shell just wouldn’t show up then). And i deleted the old Microsoft folder (did a backup first) and it worked - though it didn’t get recreated. I have no clue why it was there on the first place. Only thing that is bothering me now is that the Oem logo isn’t centered when booting Windows 10. But i don’t care much about that tbh.
One more thing though does someone have a clue why i got a “UEFI OS” listed using efibootmgr. I have no clue where it comes from and if EOS is creating that entry by default?

Boot0004* Linux Boot Manager    HD(1,GPT,ec860ff3-9e40-41d5-b0c8-a329ffa2ce96,0x1000,0x1f4000)/\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI
Boot0005  UEFI OS       HD(1,GPT,ec860ff3-9e40-41d5-b0c8-a329ffa2ce96,0x1000,0x1f4000)/\EFI\BOOT\BOOTX64.EFI0000424f

my bootmgfw.efi is stored in “C:\Windows\Boot\EFI\bootmgfw.efi”, what should i put in windows.nsh after “:” as path? because “EFI\Microsoft\Boot\Bootmgfw.efi” just open the windows boot manager but can’t continue.

Look at the path on the linux side and use everything after /efi


I got to that screen then my PC just instantly freezes and I have to hold the power button to shut it off. Im using two seperate drives, one with Arch and the other with Windows. My bootmgr.efi is saved at /run/media/Daniel/96EC9495EC9470EB/Windows/Boot/EFI/bootmgr.efi What should I put in the windows.nsh file?

Similar issue with you as well - linux side file path shows tree starting at /run/user. Unsure of how to proceed

Perfect, thank you! I ran through this on cachyos and only had to change /efi/ to /boot/ and everything went smoothly.

Cheers!

C:\Windows\Boot\EFI\bootmgfw.efi is not the Windows boot manager in Windows’ EFI partition. You need to first mount the Windows’ EFI partition somewhere on your file system (in my case it was sudo mount /dev/nvme0n1p1 /mnt/microsoft) and there you shoud find it. (ex. /mnt/microsoft/EFI/Microsoft/Boot/bootmgfw.efi)

Anyway, I’m struggling to make it work. I have the Windows entry in the boot menu, but when I press on it it just blinks and nothing happens.

Here is my /esp directory:

[wojtekp@archlinux ~]$ tree /boot
/boot
├── EFI
│   ├── BOOT
│   │   └── BOOTX64.EFI
│   ├── Linux
│   └── systemd
│       └── systemd-bootx64.efi
├── initramfs-linux-fallback.img
├── initramfs-linux.img
├── loader
│   ├── entries
│   │   ├── default arch.conf
│   │   ├── windows.conf
│   │   └── windowsfull.conf
│   ├── entries.srel
│   ├── loader.conf
│   └── random-seed
├── shellx64.efi
├── vmlinuz-linux
└── windows.nsh

windows.nsh

[wojtekp@archlinux ~]$ cat /boot/windows.nsh 
HD1b:EFI/Microsoft/Boot/bootmgfw.efi

loader.conf

[wojtekp@archlinux ~]$ cat /boot/loader/loader.conf 
default arch.conf
timeout 3
console-mode max

windows.conf

[wojtekp@archlinux ~]$ cat /boot/loader/entries/windows.conf 
title Windows 10
efi /shellx64.efi
options -nointerrupt -noconsolein -noconsoleout /windows.nsh

Here’s my Microsoft EFI partition:

[wojtekp@archlinux ~]$ sudo mount /dev/nvme0n1p1 /mnt/microsoft
[wojtekp@archlinux ~]$ tree /mnt/microsoft/
/mnt/microsoft/
└── EFI
    ├── Boot
    │   └── bootx64.efi
    └── Microsoft
        ├── Boot
        │   ├── BCD
        │   ├── BCD.LOG
        │   ├── BCD.LOG1
        │   ├── BCD.LOG2
        │   ├── bg-BG
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── bootmgfw.efi
        │   ├── bootmgr.efi
        │   ├── BOOTSTAT.DAT
        │   ├── boot.stl
        │   ├── cs-CZ
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── da-DK
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── de-DE
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── el-GR
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── en-GB
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── en-US
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── es-ES
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── es-MX
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── et-EE
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── fi-FI
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── Fonts
        │   │   ├── chs_boot.ttf
        │   │   ├── cht_boot.ttf
        │   │   ├── jpn_boot.ttf
        │   │   ├── kor_boot.ttf
        │   │   ├── malgun_boot.ttf
        │   │   ├── malgunn_boot.ttf
        │   │   ├── meiryo_boot.ttf
        │   │   ├── meiryon_boot.ttf
        │   │   ├── msjh_boot.ttf
        │   │   ├── msjhn_boot.ttf
        │   │   ├── msyh_boot.ttf
        │   │   ├── msyhn_boot.ttf
        │   │   ├── segmono_boot.ttf
        │   │   ├── segoen_slboot.ttf
        │   │   ├── segoe_slboot.ttf
        │   │   └── wgl4_boot.ttf
        │   ├── fr-CA
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── fr-FR
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── hr-HR
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── hu-HU
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── it-IT
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── ja-JP
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── kd_02_10df.dll
        │   ├── kd_02_10ec.dll
        │   ├── kd_02_1137.dll
        │   ├── kd_02_14e4.dll
        │   ├── kd_02_15b3.dll
        │   ├── kd_02_1969.dll
        │   ├── kd_02_19a2.dll
        │   ├── kd_02_1af4.dll
        │   ├── kd_02_8086.dll
        │   ├── kd_07_1415.dll
        │   ├── kd_0C_8086.dll
        │   ├── kdnet_uart16550.dll
        │   ├── kdstub.dll
        │   ├── ko-KR
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── lt-LT
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── lv-LV
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── memtest.efi
        │   ├── nb-NO
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── nl-NL
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── pl-PL
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── pt-BR
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── pt-PT
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── qps-ploc
        │   │   └── memtest.efi.mui
        │   ├── Resources
        │   │   ├── bootres.dll
        │   │   └── pl-PL
        │   │       └── bootres.dll.mui
        │   ├── ro-RO
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── ru-RU
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── sk-SK
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── sl-SI
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── sr-Latn-RS
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── sv-SE
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── tr-TR
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   ├── uk-UA
        │   │   ├── bootmgfw.efi.mui
        │   │   └── bootmgr.efi.mui
        │   ├── winsipolicy.p7b
        │   ├── zh-CN
        │   │   ├── bootmgfw.efi.mui
        │   │   ├── bootmgr.efi.mui
        │   │   └── memtest.efi.mui
        │   └── zh-TW
        │       ├── bootmgfw.efi.mui
        │       ├── bootmgr.efi.mui
        │       └── memtest.efi.mui
        └── Recovery
            ├── BCD
            ├── BCD.LOG
            ├── BCD.LOG1
            └── BCD.LOG2

Any help would be great! :slight_smile:

Btw. are there any logs for the systemd-boot? Maybe I could get some info on why nothing happens on entering Windows entry?

I am getting a rather strange bug. All the steps went fine and the entry loads windows, but on the bitlocker lockscreen it automatically types in the password box (seemingly non-stop), without being able to remove it or use any keys.

The funny thing is that I don’t really need to fix it because step 1 and 2 is enough for me. It turns out that when I try to access shellx64.efi without being signed by sbctl my bios sends me to the second entry, which is windows ¯⁠\⁠_⁠(⁠ツ⁠)⁠_⁠/⁠¯

I don’t have any weird issues. I just use grub. :laughing:

I’m just happy I don’t need to worry about adding an entry for Windows. I haven’t used Windows in more than a decade. :crazy_face:

2 Likes

I have Windows on some devices but usually i don’t have these issues. I say usually! I do remember the grub fiasco some time ago. :wink:

2 Likes