![在重新启动之前,如何告诉 GRUB 我想要重新启动到 Windows?](https://linux22.com/image/23989/%E5%9C%A8%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E4%B9%8B%E5%89%8D%EF%BC%8C%E5%A6%82%E4%BD%95%E5%91%8A%E8%AF%89%20GRUB%20%E6%88%91%E6%83%B3%E8%A6%81%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E5%88%B0%20Windows%EF%BC%9F.png)
我设置了双启动 Linux/Windows 系统,并且经常从一种系统切换到另一种系统。我在想是否可以在其中一个菜单中添加一个菜单项,以便直接重新启动进入 Windows,而无需在 GRUB 提示符处停止。
我看见这个问题在论坛上,这正是我想要的,但它正在处理 lilo,这不是我的情况。
我想到了一个解决方案,修改 GRUB 菜单中的默认条目,然后重新启动,但有一些缺点,我想知道是否有更干净的替代方案。
(另外,我对从 Windows 直接启动到 Linux 的解决方案感兴趣,但这可能更难,并且不属于这里。无论如何,只要我以一种方式拥有它,另一种方式可以设置为默认值。
更新好像有人问类似的问题,如果这些是建议的答案,我不妨编辑/boot/grub/grubenv
和grub-reboot
做。 )grub-set-default
grub-editenv
预先感谢您的任何提示。
更新:
这是我的 GRUB 版本:(GRUB) 1.99-12ubuntu5-1linuxmint1
我尝试运行grubonce
,找不到该命令。在存储库中搜索它却一无所获。我使用的是 Linux Mint,所以可能就是这样......
看起来man grub-reboot
,它似乎满足了我的要求,也是grubonce
如此。它也随处可用(至少对我来说是这样,我认为它是 grub 包的一部分)。我看到两个相关的命令:grub-editenv
和grub-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
- 编辑 /etc/default/grub 并替换
GRUB_DEFAULT=0
为GRUB_DEFAULT=saved
sudo update-grub
您的命令将是:
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”是子菜单。