Hi Vladimir, Thanks for the quick feedback! We'll take a look at the grub script option here.
-Mitchell Augustin -Mitchell Augustin On Tue, Jan 13, 2026 at 6:47 AM Vladimir 'phcoder' Serbinenko <[email protected]> wrote: > > I don't see any need for the change in menu module. You can do the same by > grub scripting. You just need a way to access EFI variables from grub shell > and there is already a patch for it > > Regards > > Le mar. 13 janv. 2026, 00:02, Mitchell Augustin via Grub-devel > <[email protected]> a écrit : >> >> Hi all! >> >> We're interested in implementing a small feature that would drop into >> the grub menu (same as when we press shift or f4) if some new EFI >> variable is set by the firmware. The motivation here is to enable >> firmware vendors to add menu entries that will set this new EFI >> variable before booting into the device with GRUB, enabling another >> method through which we can access the grub menu on systems where it >> is hidden / skipped by default. >> >> I have not previously done any upstream grub development, so I'm >> interested in hearing whether this is something the grub team would >> consider, or if there are any technical concerns. >> >> My thought is that this could be implemented within normal/menu.c if >> you'd be willing to add EFI-specific code there, perhaps along these >> lines (just an example, haven't been able to test yet since no >> firmware implements this feature): >> >> diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c >> index b946c834d..7f46d7514 100644 >> --- a/grub-core/normal/menu.c >> +++ b/grub-core/normal/menu.c >> @@ -33,6 +33,9 @@ >> #include <grub/gfxterm.h> >> #include <grub/dl.h> >> #include <grub/safemath.h> >> +#ifdef GRUB_MACHINE_EFI >> +#include <grub/efi/efi.h> >> +#endif >> >> /* Time to delay after displaying an error message about a default/fallback >> entry failing to boot. */ >> @@ -615,6 +618,14 @@ run_menu (grub_menu_t menu, int nested, int >> *auto_boot, int *notify_boot) >> /* Enter interruptible sleep until Escape or a menu hotkey is pressed, >> or the timeout expires. */ >> saved_time = grub_get_time_ms (); >> +#ifdef GRUB_MACHINE_EFI >> + static grub_guid_t efi_variable_guid = GRUB_EFI_GLOBAL_VARIABLE_GUID; >> + grub_size_t size = 0; >> + grub_efi_status_t status; >> + grub_uint8_t *enter_grub_menu = NULL; >> + status = grub_efi_get_variable ("EnterGrubMenu", &efi_variable_guid, >> + &size, (void **) &enter_grub_menu); >> +#endif >> while (1) >> { >> int key; >> @@ -632,6 +643,14 @@ run_menu (grub_menu_t menu, int nested, int >> *auto_boot, int *notify_boot) >> break; >> } >> >> +#ifdef GRUB_MACHINE_EFI >> + if (enter_grub_menu) >> + { >> + timeout = -1; >> + break; >> + } >> +#endif >> + >> if (timeout > 0 && has_second_elapsed (&saved_time)) >> { >> timeout--; >> -- >> 2.43.0 >> >> Thanks in advance for your comments, >> -- >> Mitchell Augustin >> Software Engineer - Ubuntu Partner Engineering >> >> _______________________________________________ >> Grub-devel mailing list >> [email protected] >> https://lists.gnu.org/mailman/listinfo/grub-devel -- Mitchell Augustin Software Engineer - Ubuntu Partner Engineering Email:[email protected] Location:United States of America (Central Time) canonical.com ubuntu.com _______________________________________________ Grub-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/grub-devel
