boot: add hotkeys for rebooting/powering off the system from the boot menu

In a an environment with a serial console it's just too useful to
directly reboot/power off the machine without any further tooling.
This commit is contained in:
Lennart Poettering
2023-08-21 22:59:53 +02:00
parent 90dab2b01e
commit f6531b11d2
2 changed files with 19 additions and 1 deletions

View File

@@ -192,6 +192,16 @@
may also be reached with <keycap>F2</keycap>, <keycap>F10</keycap>, <keycap>Del</keycap> and
<keycap>Esc</keycap>.</para></listitem>
</varlistentry>
<varlistentry>
<term><keycombo><keycap>Shift</keycap><keycap>o</keycap></keycombo></term>
<listitem><para>Power off the system.</para></listitem>
</varlistentry>
<varlistentry>
<term><keycombo><keycap>Shift</keycap><keycap>b</keycap></keycombo></term>
<listitem><para>Reboot the system.</para></listitem>
</varlistentry>
</variablelist>
<para>The following keys may be pressed during bootup or in the boot menu to directly boot a specific

View File

@@ -881,7 +881,7 @@ static bool menu_run(
case KEYPRESS(0, 0, 'H'):
case KEYPRESS(0, 0, '?'):
/* This must stay below 80 characters! Q/v/Ctrl+l/f deliberately not advertised. */
status = xstrdup16(u"(d)efault (t/T)timeout (e)dit (r/R)resolution (p)rint (h)elp");
status = xstrdup16(u"(d)efault (t/T)imeout (e)dit (r/R)esolution (p)rint (O)ff re(B)oot (h)elp");
break;
case KEYPRESS(0, 0, 'Q'):
@@ -1008,6 +1008,14 @@ static bool menu_run(
status = xstrdup16(u"Reboot into firmware interface not supported.");
break;
case KEYPRESS(0, 0, 'O'): /* Only uppercase, so that it can't be hit so easily fat-fingered, but still works safely over serial */
RT->ResetSystem(EfiResetShutdown, EFI_SUCCESS, 0, NULL);
break;
case KEYPRESS(0, 0, 'B'): /* ditto */
RT->ResetSystem(EfiResetCold, EFI_SUCCESS, 0, NULL);
break;
default:
/* jump with a hotkey directly to a matching entry */
idx = entry_lookup_key(config, idx_highlight+1, KEYCHAR(key));