在重新启动之前,如何告诉 GRUB 我想要重新启动到 Windows?

在重新启动之前,如何告诉 GRUB 我想要重新启动到 Windows?

我设置了双启动 Linux/Windows 系统,并且经常从一种系统切换到另一种系统。我在想是否可以在其中一个菜单中添加一个菜单项,以便直接重新启动进入 Windows,而无需在 GRUB 提示符处停止。

我看见这个问题在论坛上,这正是我想要的,但它正在处理 lilo,这不是我的情况。

我想到了一个解决方案,修改 GRUB 菜单中的默认条目,然后重新启动,但有一些缺点,我想知道是否有更干净的替代方案。

(另外,我对从 Windows 直接启动到 Linux 的解决方案感兴趣,但这可能更难,并且不属于这里。无论如何,只要我以一种方式拥有它,另一种方式可以设置为默认值。

更新好像有人问类似的问题,如果这些是建议的答案,我不妨编辑/boot/grub/grubenvgrub-reboot做。 )grub-set-defaultgrub-editenv

预先感谢您的任何提示。

更新:

这是我的 GRUB 版本:(GRUB) 1.99-12ubuntu5-1linuxmint1

我尝试运行grubonce,找不到该命令。在存储库中搜索它却一无所获。我使用的是 Linux Mint,所以可能就是这样......

看起来man grub-reboot,它似乎满足了我的要求,也是grubonce如此。它也随处可用(至少对我来说是这样,我认为它是 grub 包的一部分)。我看到两个相关的命令:grub-editenvgrub-set-default

我发现运行后sudo grub-set-default 4,运行时grub-editenv list你会得到类似的内容:

saved_entry=4

当运行时grub-reboot 4,你会得到类似的东西:

prev_saved_entry=0
saved_entry=4

这意味着两者都做同样的事情(一个是临时的,一个不是)。

令人惊讶的是,当我尝试时:

sudo grub-reboot 4
sudo reboot now

它不起作用,好像我什么也没做,它只是像往常一样向我显示菜单,并选择第一个条目,说它将在 10 秒内启动该条目。

我又试了一次,我想我可能写错了(它是从零开始的,对吧?)。那一次,它只是挂在菜单屏幕上,我必须硬重置电脑才能启动。

如果有人可以尝试一下,看看是否只有我这样,我将不胜感激。 (薄荷一直让我很难过,这将是一个改变的好机会:P)。

阅读 中的代码/boot/grub/grub.cfg,似乎这是要走的路,但根据我的观察,它只是忽略了这些设置......

答案1

  1. 编辑 /etc/default/grub 并替换GRUB_DEFAULT=0GRUB_DEFAULT=saved
  2. sudo update-grub
  3. 您的命令将是:

    sudo grub-reboot "$(grep -i windows /boot/grub/grub.cfg|cut -d"'" -f2)" && sudo reboot
    

    A漂亮的~/.bashrc您的or的函数.bash_aliases可能如下所示:

    # Reboot directly to Windows
    # Inspired by http://askubuntu.com/questions/18170/how-to-reboot-into-windows-from-ubuntu
    reboot_to_windows ()
    {
        windows_title=$(grep -i windows /boot/grub/grub.cfg | cut -d "'" -f 2)
        sudo grub-reboot "$windows_title" && sudo reboot
    }
    alias reboot-to-windows='reboot_to_windows'
    

    编者注:

    • 我已经更换了已弃用的反引号( ``)$(...)构造。

    • 一般来说,我重写了它以遵循当前的POSIX(维基百科)标准,并在此过程中做了一些其他的小改动。

    • 为了完整起见,我保留以下函数不变以进行比较。


如果您的 grub.conf 包含适用于 Windows 的多行,则以下函数将仅关注以第一行开头的行menuentry,并仅选择第一行(参考 Windows):

function my_reboot_to_windows {
    WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
    sudo grub-reboot "$WINDOWS_TITLE"
    sudo reboot
}

答案2

为了使该grub-reboot命令正常工作,必须进行一些必要的配置更改:

  • grub 的默认条目必须设置为saved。一个可能的位置是GRUB_DEFAULT=以下行:/etc/default/grub
  • 用于grub-set-default将默认条目设置为您通常使用的条目。
  • 更新您的 grub 配置(例如update-grub)。

这应该可以完成初始设置。以后只要做grub-reboot <entry>一次一次性启动就可以了<entry>

答案3

我为 Ubuntu 20.04/22.04 编写了一个工具来执行此操作: https://github.com/mendhak/grub-reboot-picker

在此输入图像描述

它可能适用于以前的 Ubuntu,但我从未测试过。

答案4

同意@jw013。您还可以将菜单图块赋予 grub-reboot(包括父菜单的标题)。例如:

$ sudo grub-reboot "Advanced options for Ubuntu>Ubuntu, with Linux 4.13.0-26-generic"
$ sudo reboot

其中“Ubuntu 的高级选项”是父菜单,“Ubuntu, with Linux 4.13.0-26-generic”是子菜单。

相关内容