[syslinux] RFC: Feature: MENU HIDDEN behaviour on ANY key
dany.ephemeral.2014 at icloud.com
Wed Apr 10 18:59:05 PDT 2019
Here's a small enhancement feature for menu.c32. Looking for feedback before starting any coding (not sure when I'll have time for implementation)
When MENU HIDDEN is used on an headless server, any noise on the serial console can interrupt the boot; it would be preferable if there only specific keys were allowed to interrupt, reducing the probability of unwanted interruption. Even with TOTALTIMEOUT present, there's a delay present as TOTALTIMEOUT has to be large enough to make it useable during intentional boot interruption.
*Basic behaviour change*
Provide a way to assign "reveal menu" to specific key(s)
Provide a default behaviour for unassigned keys (other than current "reveal menu")
*Possible user interface change*
MENU HIDDENMENUKEY key[,key]
MENU HIDDDENKEY key[,key] [command...]
Add ANY as an acceptable value for key
Make command optional, defaulting to boot default.
If pressed key is defined by HIDDENKEY, that action is always taken.
no HIDDENMENUKEY, no HIDDENKEY ANY: all keys bring the menu (current behaviour)
HIDDENMENUKEY ANY: all keys bring the menu (current behaviour)
HIDDENMENUKEY Esc, HIDDENKEY ANY (without commands): Esc brings the menu, all keys autoboot
HIDDENMENUKEY Esc, no HIDDENKEY ANY: Esc brings the menu, all keys trigger nothing.
No similar support for boot prompt.
No code/behaviour analysis made for cmenu.c32
*Affected code* (outside config parsing)
Extra comparison when handling mygetkey(),ignoring unbound key if ANY not assigned (or defaulted). Return NULL, if hide_key[key] matches HIDDENMENUKEY. A few extra globals likely required to track/reference pseudo-commands "reveal menu" and "boot default" inside hide_key table. Need to use/steal an unused entry of hide_key as the ANY key.
*Rejected/discarded interface option*
MENU HIDDENSECUREKEY key[,key] [STRICT]
MENU HIDDENDEFAULTKEY 0|1
MENU HIDDENANYKEY MENU|IGNORE|BOOT
MENU HIDDENKEY ANY|key[,key] MENU|IGNORE|BOOT|command...
Last one is rejected to avoid collision with exiting configuration which might be using label matching the keywords.
More information about the Syslinux