mirror of
https://git.proxmox.com/git/grub2
synced 2025-07-22 23:25:30 +00:00
192 lines
5.0 KiB
Diff
192 lines
5.0 KiB
Diff
Description: Add configure option to bypass boot menu if possible
|
|
If other operating systems are installed, then automatically unhide the
|
|
menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus if
|
|
available to check whether Shift is pressed. If it is, show the menu,
|
|
otherwise boot immediately. If keystatus is not available, then fall back
|
|
to a short delay interruptible with Escape.
|
|
.
|
|
This may or may not remain Ubuntu-specific, although it's not obviously
|
|
wanted upstream. It implements a requirement of
|
|
https://wiki.ubuntu.com/DesktopExperienceTeam/KarmicBootExperienceDesignSpec#Bootloader.
|
|
Author: Colin Watson <cjwatson@ubuntu.com>
|
|
Forwarded: no
|
|
Last-Update: 2013-11-12
|
|
|
|
Index: b/configure.ac
|
|
===================================================================
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -1087,6 +1087,17 @@
|
|
fi
|
|
AC_SUBST([QUIET_BOOT])
|
|
|
|
+AC_ARG_ENABLE([quick-boot],
|
|
+ [AS_HELP_STRING([--enable-quick-boot],
|
|
+ [bypass boot menu if possible (default=no)])],
|
|
+ [], [enable_quick_boot=no])
|
|
+if test x"$enable_quick_boot" = xyes ; then
|
|
+ QUICK_BOOT=1
|
|
+else
|
|
+ QUICK_BOOT=0
|
|
+fi
|
|
+AC_SUBST([QUICK_BOOT])
|
|
+
|
|
LIBS=""
|
|
|
|
AC_SUBST([FONT_SOURCE])
|
|
Index: b/util/grub.d/00_header.in
|
|
===================================================================
|
|
--- a/util/grub.d/00_header.in
|
|
+++ b/util/grub.d/00_header.in
|
|
@@ -23,6 +23,7 @@
|
|
exec_prefix="@exec_prefix@"
|
|
datarootdir="@datarootdir@"
|
|
grub_lang=`echo $LANG | cut -d . -f 1`
|
|
+quick_boot="@QUICK_BOOT@"
|
|
|
|
export TEXTDOMAIN=@PACKAGE@
|
|
export TEXTDOMAINDIR="@localedir@"
|
|
@@ -272,7 +273,7 @@
|
|
|
|
make_timeout ()
|
|
{
|
|
- if [ "x${1}" != "x" ] ; then
|
|
+ if [ "$quick_boot" = 0 ] && [ "x${1}" != "x" ] ; then
|
|
if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
|
|
verbose=
|
|
else
|
|
Index: b/util/grub.d/30_os-prober.in
|
|
===================================================================
|
|
--- a/util/grub.d/30_os-prober.in
|
|
+++ b/util/grub.d/30_os-prober.in
|
|
@@ -20,18 +20,78 @@
|
|
prefix="@prefix@"
|
|
exec_prefix="@exec_prefix@"
|
|
datarootdir="@datarootdir@"
|
|
+quick_boot="@QUICK_BOOT@"
|
|
|
|
export TEXTDOMAIN=@PACKAGE@
|
|
export TEXTDOMAINDIR="@localedir@"
|
|
|
|
. "@datadir@/@PACKAGE@/grub-mkconfig_lib"
|
|
|
|
+found_other_os=
|
|
+
|
|
+make_timeout () {
|
|
+ if [ "x${found_other_os}" = "x" ] ; then
|
|
+ if [ "x${1}" != "x" ] ; then
|
|
+ if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
|
|
+ verbose=
|
|
+ else
|
|
+ verbose=" --verbose"
|
|
+ fi
|
|
+
|
|
+ if [ "x${1}" = "x0" ] ; then
|
|
+ cat <<EOF
|
|
+if [ "x\${timeout}" != "x-1" ]; then
|
|
+ if keystatus; then
|
|
+ if keystatus --shift; then
|
|
+ set timeout=-1
|
|
+ else
|
|
+ set timeout=0
|
|
+ fi
|
|
+ else
|
|
+ if sleep$verbose --interruptible 3 ; then
|
|
+ set timeout=0
|
|
+ fi
|
|
+ fi
|
|
+fi
|
|
+EOF
|
|
+ else
|
|
+ cat << EOF
|
|
+if [ "x\${timeout}" != "x-1" ]; then
|
|
+ if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
|
|
+ set timeout=0
|
|
+ fi
|
|
+fi
|
|
+EOF
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+}
|
|
+
|
|
+adjust_timeout () {
|
|
+ if [ "$quick_boot" = 0 ]; then
|
|
+ return
|
|
+ fi
|
|
+ if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
|
|
+ cat <<EOF
|
|
+if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
|
|
+EOF
|
|
+ make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}"
|
|
+ echo else
|
|
+ make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
|
|
+ echo fi
|
|
+ else
|
|
+ make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
|
|
+ fi
|
|
+}
|
|
+
|
|
if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
|
|
+ adjust_timeout
|
|
exit 0
|
|
fi
|
|
|
|
if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then
|
|
# missing os-prober and/or linux-boot-prober
|
|
+ adjust_timeout
|
|
exit 0
|
|
fi
|
|
|
|
@@ -43,10 +103,12 @@
|
|
OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
|
|
if [ -z "${OSPROBED}" ] ; then
|
|
# empty os-prober output, nothing doing
|
|
+ adjust_timeout
|
|
exit 0
|
|
fi
|
|
|
|
osx_entry() {
|
|
+ found_other_os=1
|
|
if [ x$2 = x32 ]; then
|
|
# TRANSLATORS: it refers to kernel architecture (32-bit)
|
|
bitstr="$(gettext "(32-bit)")"
|
|
@@ -146,6 +208,7 @@
|
|
;;
|
|
esac
|
|
|
|
+ found_other_os=1
|
|
onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
|
|
cat << EOF
|
|
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class windows --class os \$menuentry_id_option 'osprober-chain-$(grub_get_device_id "${DEVICE}")' {
|
|
@@ -169,6 +232,7 @@
|
|
EOF
|
|
;;
|
|
efi)
|
|
+ found_other_os=1
|
|
EFIPATH=${DEVICE#*@}
|
|
DEVICE=${DEVICE%@*}
|
|
cat << EOF
|
|
@@ -211,6 +275,7 @@
|
|
[ "${prepare_boot_cache}" ] || continue
|
|
fi
|
|
|
|
+ found_other_os=1
|
|
onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
|
|
recovery_params="$(echo "${LPARAMS}" | grep 'single\|recovery')" || true
|
|
counter=1
|
|
@@ -277,6 +342,7 @@
|
|
osx_entry xnu_kernel64 64
|
|
;;
|
|
hurd)
|
|
+ found_other_os=1
|
|
onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
|
|
cat << EOF
|
|
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class hurd --class gnu --class os \$menuentry_id_option 'osprober-gnuhurd-/boot/gnumach.gz-false-$(grub_get_device_id "${DEVICE}")' {
|
|
@@ -309,3 +375,5 @@
|
|
;;
|
|
esac
|
|
done
|
|
+
|
|
+adjust_timeout
|