如何从Ubuntu重启进入Windows?


35

我正在寻找一种在10.10 / Vista双启动系统上从Ubuntu重启进入Windows的方法。具体用例是,我希望能够通过ssh进入正在运行的Ubuntu实例,并发出将直接启动重新引导至Windows的命令。

我找到了一篇很有前途的博客文章,但是它建议的脚本不起作用:

#!/bin/bash

WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg  | grep --line-number Windows`
MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 ))
sudo grub-reboot $MENU_NUMBER
sudo reboot

man grub-reboot 并没有太大帮助,但似乎可以将我引向正确的方向:

设置GRUB的默认启动项,仅用于下一次启动

WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg  | grep --line-number Windows`
MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 ))
echo $MENU_NUMBER

这将返回预期值,但是在重新启动时,第一个菜单项仍突出显示。有什么想法为什么不起作用或其他解决方案的建议?


如果将Windows grub引导行复制到grub菜单中列表的顶部,则每个引导窗口将是默认负载。sudo reboot now应该将机器重新启动到grub列表中的第一项。
karthick87 2010年

可以,但是我很少启动该Windows分区。我不想将其设置为默认条目。
andrewsomething 2010年

Answers:


43
  • 您必须先编辑grub。

    sudo gedit /etc/default/grub
    
  • 搜索行GRUB_DEFAULT = 0并将其修改为GRUB_DEFAULT = saved 替代文字

  • 使用以下命令更新您的grub。

    sudo update-grub  
    
  • 现在创建一个脚本文件,

    sudo gedit switch-to-windows.sh
    
  • 然后添加这些行。

    #!/bin/bash
    WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg  | grep --line-number Windows`
    MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 ))
    sudo grub-reboot $MENU_NUMBER
    sudo reboot
    
  • 使脚本可执行。

    sudo chmod +x switch-to-windows.sh
    
  • 现在,您可以从终端运行此脚本以重新启动进入Windows。

    ./switch-to-windows.sh
    
  • 或者您可以在终端中执行以下命令

    sudo grub-reboot X  
    
  • X是要从GRUB菜单重新启动的操作系统的菜单项位置(第一个条目以0开头)

例如:

  • 如果这是您的grub菜单,并且要引导进入Windows,则应将X的值设置为5。
  • sudo grub-reboot 5

    替代文字

  • 您也可以为上述命令创建启动器,以便双击启动器将重新启动进入Windows。

我可以让它工作一次。之后,您必须输入密码。

7
您是如何使小rub看起来像这样的?
曼迪(Mandy)

跟进上述问题?你怎么能得到如此顽固的g虫?
迭戈

5
解决方案确实很棒,但是由于我有14个菜单条目,其中菜单条目之前带有制表符,因此标​​题标题为菜单条目编号的效果更好。因此,您可以使用#!/ bin / bash WINDOWS_TITLE = grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2sudo grub-reboot“ $ WINDOWS_TITLE” sudo reboot 更改代码
Philippe Gachoud 2014年

Philippe Gachoud,请给您答案!这是唯一可行的方法!
honi

12

有一个grub命令就是这样做的grub-reboot

它似乎仅在将grub配置为从最后保存的条目开始时才起作用。因此,如果您尚未这样做,请修改/etc/default/grub并设置

GRUB_DEFAULT=saved

然后更新grub配置文件:

sudo update-grub

从现在开始,在每次启动时,grub都会启动上一次使用的条目。

现在,如果要预先设置下次启动的系统,请使用

sudo grub-reboot ENTRY

其中ENTRY可能是相对于菜单项的数字(从0开始编号),或者确切的菜单项标题,例如

sudo grub-reboot "Microsoft Windows XP Professional (on /dev/sda1)"

该命令可以很容易地用作启动器

#!/usr/bin/env xdg-open
#
# save as ~/Desktop/reboot-into-windows.desktop
#

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=sh -c 'gksu "grub-reboot 2" && gnome-session-save --shutdown-dialog'
Name=Reboot into Windows
Icon=gnome-panel-launcher

但我不知道如何将其集成到系统菜单中。

您可以通过以下方式获得可用的菜单条目标题:

sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg 

没有理由进行设置GRUB_DEFAULT=saved,这会破坏您的配置。什么GRUB的重启确实是写next_entry=ENTRY/boot/grub/grubenv。不是saved_entry=ENTRY。grub读取,但下次重新启动会很好next_entry。如果没有saved-entry=ENTRY在grubenv中保存任何条目,则后续引导可能会失败。
mook765



2

所以对我来说,最好的办法是使用grub-reboot命令创建以下脚本

#!/bin/bash 
WINDOWS_TITLE=$(grep -i 'windows' /boot/grub/grub.cfg|grep "^[^#;]"|cut -d"'" -f2) 
sudo grub-reboot "$WINDOWS_TITLE" 
echo "Your computer will reboot on ${WINDOWS_TITLE} in 3 seconds, press Ctrl+C if you want to abord it"
sleep 3 && sudo reboot


-1

我不确定这是否100%也可以在ubuntu中工作,但是我曾经在centos机器上完成过这项工作

基本上,您必须告诉grub接下来应该在grub.conf中识别哪个ID#。可以通过以下方式找到ID#

echo `sudo grep ^title /boot/grub/grub.conf | grep -n Windows | cut -f 1 -d:`-1

因此在我的情况下,这将例如在我的grub.conf中的第四个条目中输出“ 4-1”,其中包含文本“ Windows”。(将其替换为您要使用的实际条目名称(也要部分替换)。然后,您可以将其输入grub,例如:

echo "savedefault --stage2=/boot/grub/stage2 --default=4-1 --once" | sudo /sbin/grub

并在下次重新启动时,它应该自动启动您告诉它的条目。

所有这些都可以放在如下脚本中:

#!/bin/sh
let NEWBOOT=`sudo grep ^title /boot/grub/grub.conf | grep -n Windows | cut -f 1 -d:`-1
echo Booting $NEWBOOT - `sudo grep ^title.\*Windows /boot/grub/grub.conf`
echo "savedefault --stage2=/boot/grub/stage2 --default=$NEWBOOT --once" | sudo /sbin/grub
sudo reboot

该脚本将自动确定grub.conf中的哪个条目对应于文本“ Windows”,并将其输入grub以告知下次启动时应加载的内容,并将重新启动PC。

对于gui,您可以例如在桌面上添加快捷方式图标以实现此目的。


1
grub-legacy的配置文件是menu.lst,而不是grub.conf。对于grub2,它是grub.cfg,但是第二个命令仅用于grub-legacy。
psusi 2011年

-4

只需编辑/boot/grub/grub.cfg并更改默认条目以指向您要引导的条目。该值可以是条目的序号(对于第一个条目,从零开始),也可以将所需条目的完整标题放在引号中。


2
不建议修改boot.cfg,它将在每次手动或自动恢复update-grub。用户应修改/etc/default/grub
enzotib

1
@enzotib,因为所做的更改仅与下一次引导有关,所以没有理由这样做。
psusi 2011年

2
您忘记了对该文件的错误编辑可能会导致系统无法启动
enzotib 2011年

1
@enzotib,不是真的;关于grub2的美丽之处之一是,您始终可以在提示符下手动进行恢复。同样,搞砸文件其他部分的危险是一个虚假的论点,如果默认行错误,则发生的最糟糕的情况是它默认为第一个条目。
psusi 2011年
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.