在重新啟動之前,如何告訴 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」是子選單。

相關內容