systemd-bootのデュアルブートで1回だけ次回起動OSを変更する(grub-reboot相当)

当然EFIデュアルブートしててsystemd-bootを使っている場合のお話です。

systemd-boot (gummiboot) がLoaderEntryOneShotというそれそのものの変数をEFI変数として公開してくれているので、efivars経由で書き込む。

例えば次回だけ自動検出のWindows 10で起動したいとする。
自動検出のWindowsはsystemd-bootではauto-windowsという名前になるので、

$ echo -en "auto-windows\0" | iconv -f ascii -t utf-16le | hexdump -C
00000000  61 00 75 00 74 00 6f 00  2d 00 77 00 69 00 6e 00  |a.u.t.o.-.w.i.n.|
00000010  64 00 6f 00 77 00 73 00  00 00                    |d.o.w.s...|
0000001a

で相当するバイナリ列を作って、頭に\x07\x00\x00\x00をつけて、rootで書き込む。

# printf "\x07\x00\x00\x00\x61\x00\x75\x00\x74\x00\x6f\x00\x2d\x00\x77\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00\x73\x00\x00\x00" > /sys/firmware/efi/efivars/LoaderEntryOneShot-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f