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