如何隐藏我的GRUB菜单,并在启动时让Shift或ESC键显示隐藏的GRUB菜单


10

我正在运行Ubuntu 16.10,并且试图在开机/启动时隐藏GRUB菜单,并希望仅在按ShiftEsc键时菜单才会显示。

我更改了相应的选项/etc/default/grub,但仍不会隐藏菜单。

在研究此问题时,我发现2013 GRUB隐藏菜单中的该帖子无法正常工作,这表明问题已经存在了一段时间,并提出了/etc/grub.d/30_os-prober我不愿意进行的更改。该代码表明,由于找到了多个操作系统,因此GRUB_TIMEOUT=10无论如何都要进行设置。

这是我现在所拥有的代码片段/etc/default/grub...倒数10秒的菜单...

GRUB_DEFAULT =已保存
GRUB_SAVEDEFAULT = true
GRUB_HIDDEN_TIMEOUT_QUIET = true
#GRUB_HIDDEN_TIMEOUT = 0
GRUB_TIMEOUT = 10
GRUB_DISTRIBUTOR =`lsb_release -i -s 2> / dev / null || 回声Debian`
GRUB_CMDLINE_LINUX_DEFAULT =“安静的飞溅”

如果我没有评论#GRUB_HIDDEN_TIMEOUT=0,那么sudo update-grub坚持要我也GRUB_TIMEOUT=10GRUB_TIMEOUT=0。我这样做了,我仍然看到GRUB菜单。

在中terminal,键入info -f grub -n 'Simple configuration'描述了各种选项,并且在信息结尾处,它表明已折旧了一些当前命令,并建议使用较新的替代方法更好。

没有任何人知道我怎样才能让我的GRUB菜单隐藏在16.10 有它承认ShiftEsc键在开机的时候?


很高兴你问这个。我也无法使我工作,这证实了这是因为该盒子是双引导程序。
有机大理石

1
@OrganicMarble问题确实与多个操作系统有关。为了进行测试,我确实修改了/etc/grub.d/30_os-prober中的那部分代码,尽管我没有菜单,但在引导时无法强制使用shift或esc菜单。仍在努力。
heynnema

我在答案中添加了一些与您的错误有关的更多信息,它们可能有助于您更彻底地了解问题的本质。我也在看Grub2代码-试图帮助:)
xtrchessreal

如果尚未尝试使用Grub Customizer,请按以下顺序使用“常规设置”选项卡-1取消选中“查找其他操作系统”框,2取消选中“显示菜单”,然后保存。测试一下,看看“ Shift”是否会弹出菜单,然后再按一下什么都不会发生。
xtrchessreal

我可以理解,您宁愿不进行修改,/etc/grub.d/30_os-prober但实际上看不到危害。您可以保留副本或#Comment您的更改,以便在需要时可以撤消更改。您发现的解决方法似乎是目前最合理的解决方案。
年长者怪胎

Answers:


7

好的,这就是答案...在双引导配置中获取隐藏的GRUB菜单...进行两次编辑...和sudo update-grub...

编辑#1

要在多启动配置中获取隐藏的GRUB菜单,我们首先需要进行编辑/etc/default/grub。使用以下命令打开此文件:

sudo editor /etc/default/grub

打开文件后,替换这些行

GRUB_HIDDEN_TIMEOUT_QUIET=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=10

用这些:

GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT_STYLE=countdown
#GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=3

这将导致GRUB在屏幕上显示3秒钟的倒数计时器。这样,用户可以按该Esc键以调出默认菜单。否则,默认操作系统将启动。

如果希望将默认操作系统设置为上次启动的操作系统,请在上面显示的“ GRUB_TIMEOUT = 3”下添加以下两行:

GRUB_DEFAULT=saved    # change an existing line to this
GRUB_SAVEDEFAULT=true # add this line

编辑#2

接下来,需要更新操作系统探测器以禁用quick_boot功能。为此,请/etc/grub.d/30_os-prober在您喜欢的编辑器中打开,然后将替换为1,更改下面的行(17.04中的第23行)0

quick_boot="1"

完成后,该行应显示为:

quick_boot="0"

保存文件,然后运行以下命令以重新配置引导加载程序并应用更改:

sudo update-grub

做到了!+1。
有机大理石

看起来是一个很好的解决方案:)现在,我有一个简单的问题。如果将GRUB_TIMEOUT从“ 3”更改为“ 1”,则启动速度会更快吗?您是否可以提供链接(如果有的话)来阅读此代码的工作原理。我想了解这段代码在做什么以及它的函数调用顺序等。非常感谢。当您可以解决自己的问题时,这是很好的-在这方面做得很好。
xtrchessreal

@xtrchessreal是的,将3更改为1会使它缩短2秒。我认为,如果需要的话,三秒钟足以让我移交给Esc键。您可以查看info -f grub -n 'Simple configuration'更多信息。
heynnema '17

Q表示+ 1,A表示+1。最近两个晚上,我一直在搜索各种修改了30_os-proper的头发,修改了31_blah_blah并修改了40_custom。这是在AU,ArchLinux,Fedora和其他许多地方。如果您想获得更多投票,我建议在AU(有很多)中追踪所有错误的答案,并投票关闭它们作为与此副本的重复,然后ping我( @我)在AU一般聊天室中,并带有指向重复项的链接,我也将对其投票。感谢您的出色研究和工作解决方案!:)
WinEunuuchs2Unix

@ WinEunuuchs2Unix感谢您的评论和投票!我本人做了很多研究,然后才发现没有人能找到一个优雅的解决方案,或者根本没有任何解决方案……但是我下定决心:-)
heynnema

3

根据Grub2 wiki的摘录,我相信这个问题可能是由于多个操作系统 引起的

如果未检测到其他操作系统,则GRUB 2将直接引导至默认操作系统,并且不会显示菜单。如果检测到其他操作系统,显示GRUB 2菜单。

如果在/ etc / default / grub中设置了GRUB_DEFAULT = saved,则可以通过运行sudo grub-set-default来保存操作系统。如果还在/ etc / default / grub中设置了GRUB_SAVEDEFAULT = true,则也可以保存它。在这种情况下,默认操作系统将一直保留,直到从GRUB 2菜单中手动选择新的操作系统或执行grub-set-default命令为止。

Grub2 Wiki还指出: 注意:GRUB 1.97到GRUB 1.99的隐藏菜单功能中存在一个已确认的长期错误。菜单可能不会按照此页面上的说明隐藏。虽然编辑30_os-prober脚本可以解决此问题,但这不在此页面范围内。

解决方法是,您可以设置,GRUB_TIMEOUT="1"并且您只会看到菜单1秒钟。如果需要切换到其他操作系统,只需在第二秒钟内按向下箭头键,菜单就会出现,直到我做出选择为止。

该错误可能存在潜在的语法问题。我不是Grub2专家,但是在我的grub文件中,每个命令行都以=“ some quoted setting”结尾。我记得在编码时代,“ quotes”是传递字符串,而非引号是将简单数字值传递给变量。我不熟悉新的代码技术。例如,这是我的一些grub输出:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT="Ubuntu"
#GRUB_HIDDEN_TIMEOUT="0"
GRUB_HIDDEN_TIMEOUT_QUIET="true"
GRUB_TIMEOUT="1"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

我正在研究此Grubbug :)了解更多信息以及此Bug这两个都是与Grub2相关的2岁。其中一些可能与移交给Grub2之前的MBR代码有关


感谢您的答复。我已经在使用SAVEDEFAULT方法。TIMEOUT = 1当然可以缩短菜单显示时间。该问题确实与多个操作系统有关。为了进行测试,我确实修改了中的那部分代码/etc/grub.d/30_os-prober,尽管我没有菜单,但是在启动时我无法强制使用shift或esc菜单。
heynnema '17

您链接的那些bug似乎无关紧要,或者我错过了一些东西?
年长者极客

@ElderGeek关于错误#1401318,将错误分配给TJ的人解释了从MBR到Grub的行为,因为他声明“ sleep --interruptable $ timeout”等。如果您在错误注释中阅读了他的所有声明,我认为您将至少看到问题的一部分。他还被分配了错误#425979,这在问题上是相似的。当设置为隐藏时,这两个与按住Shift键带来Grub菜单有关的bug均不起作用。这也是OP试图解决的问题。我希望这可以弄清楚为什么链接在我发布的答案中。
xtrchessreal,

请原谅我的困惑。我读到这个问题时说的是“如何隐藏GRUB菜单”,谢谢。我一定错过了那条评论。
年长者怪胎

@ElderGeek实际上,问题是,“我怎样才能让我的GRUB菜单被隐藏,有移位或ESC键显示出在开机时隐藏GRUB菜单”。我把它藏起来了。我还没有使用shift键或esc键工作。显然,此问题可以追溯到2013年或更早,并且仅影响多重启动配置。
heynnema '17

3
  1. 我想您想尝试通过进行的“所有操作” /etc/default/grub。您是否阅读过此链接,

    help.ubuntu.com/community/Grub2/Setup#Configuring_GRUB_2

  2. 我建议您尝试从中删除以下行/boot/grub/grub.cfg

    ...
    set timeout_style=menu
    if [ "${timeout}" = 0 ]; then
      set timeout=10
    fi
    ### END /etc/grub.d/30_os-prober ###
    

    是的,我知道,您每次update-grub运行时都必须这样做,但是您可以为其编写脚本。


感谢您的答复。我将看一下该链接。我还找到了一种修改/etc/grub.d/30_os-prober的方法,这样就不必每次都编辑grub.cfg。
heynnema

这对我来说很有意义,因为在多启动系统中,这段代码看起来像是将超时从0更改回10,这似乎使HIDDEN_TIMEOUT失败了。–
Elder Geek

@heynnema您可以将您的更改发布到os-prober吗?当我查看您问题中的链接并将其与os-prober中的代码进行比较时,行号没有意义,因此我认为os-prober从那时起就发生了变化,因此我害怕弄乱它。
Organic Marble

1
@OrganicMarble看到我的问题的更新。也许您可以尝试一些/所有我的mod,然后看看您的想法。
heynnema '17

@sudodus,请参阅我的答案
heynnema,2017年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.