How to reboot into Windows from Ubuntu?
Solution 1
-
You have to edit your grub first.
sudo gedit /etc/default/grub
Search for the line GRUB_DEFAULT=0 and modify it to GRUB_DEFAULT=saved
-
Update your grub using the following command.
sudo update-grub
-
Now create a script file,
sudo gedit switch-to-windows.sh
-
Then add these lines.
#!/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
-
Make the script executable.
sudo chmod +x switch-to-windows.sh
-
And now you can run this script from terminal to reboot into windows.
./switch-to-windows.sh
-
Or you can execute the following command in your terminal
sudo grub-reboot X
Where X is the menuentry position of the OS you want to restart in from the GRUB menu.(starting with 0 as the first entry)
For Example:
- If this is your grub menu and if you want to boot into windows you should give the value of X as 5.
-
sudo grub-reboot 5
- You can also create a launcher for the above command,so that double clicking the launcher will reboot into windows.
Solution 2
There is a grub command just to do so, it is grub-reboot
.
It seems to only work when you have grub configured to start with the last saved entry. So if you have not already done so, modify /etc/default/grub
and set
GRUB_DEFAULT=saved
then update grub configuration file:
sudo update-grub
From now on, at each boot grub will start the last used entry.
Now, if you want to set in advance what should be the system to boot the next time, use
sudo grub-reboot ENTRY
where ENTRY
could be a number relative to a menu entry (numbered starting from 0), or an exact menu entry title, for example
sudo grub-reboot "Microsoft Windows XP Professional (on /dev/sda1)"
This command can easily be made available as a launcher
#!/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
but I don't know how it could be integrated into the system menu.
You can obtain the available menu entry title with
sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg
Solution 3
I think I have found an even nicer way for people who want to the same while locally at their pc without ssh.
A solution to reboot into a specific system choosen through a unity launcher was just posted on webupd8. See http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html
I know this is not exactly what the question is about but in case someone has a similar question later this might be helpful.
Solution 4
So for me the best was to create following script with grub-reboot
command
#!/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
Solution 5
As far as I understood this will not be exactly what you want but I guess pretty close. Just follow the link webupdate article.
Related videos on Youtube
red.clover
Updated on September 17, 2022Comments
-
red.clover almost 2 years
I'm looking for a way to reboot into Windows from Ubuntu on a 10.10/Vista dual boot system. The specific use case is that I would like to be able to ssh into my running Ubuntu instance and issue a command that will initiate a reboot directly into Windows.
I found a promising blog post, but the script that it suggests isn't working:
#!/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
isn't much help, but it seems to be leading me in the right direction:set the default boot entry for GRUB, for the next boot only
WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg | grep --line-number Windows` MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 )) echo $MENU_NUMBER
This returns the expected value, but on reboot the first menu entry is still highlighted. Any ideas why this isn't working or suggestions for other solutions?
-
Andres over 13 yearsI can get it to work once. After that you have to enter passwords.
-
Mandy about 13 yearsHow did you get grub to look like that?
-
psusi almost 13 yearsThe config file for grub-legacy is menu.lst, not grub.conf. For grub2, it is grub.cfg, but your second command is only for grub-legacy.
-
enzotib almost 13 yearsDon't advice to modify
boot.cfg
, it will be restored at each manual or automaticupdate-grub
. User should modify/etc/default/grub
, instead. -
psusi almost 13 years@enzotib, since the change is only meant to pertain to the next boot, there is no reason to do it that way.
-
enzotib almost 13 yearsyou forget that a wrong editing on that file could lead to an unbootable system
-
psusi almost 13 years@enzotib, not really; one of the beautiful things about grub2 is that you can always recover manually at the prompt. Also the danger of screwing up other parts of the file is a specious argument, and if you get the default line wrong, the worst that happens is that it defaults to the first entry.
-
Michael Gundlach almost 13 yearsWhilst this may theoretically answer the question, it would be preferable to include the essential parts of the answer here, and provide the link for reference.
-
Diego almost 12 yearsfollow up the question above? how can you get grub looking so perty?
-
Philippe Gachoud over 10 yearsSolution is really great, but as I have 14 menu entries with tab before entries, with the title insthead of menu entry number worked better. So you can change your code with #!/bin/bash WINDOWS_TITLE=
grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2
sudo grub-reboot "$WINDOWS_TITLE" sudo reboot -
honi about 7 yearsPhilippe Gachoud, please make yours an answer! it is the only one that works!
-
mook765 about 5 yearsThere is no reason to set
GRUB_DEFAULT=saved
, it would mess up your configuration. What grub-reboot does is to writenext_entry=ENTRY
to/boot/grub/grubenv
. That's notsaved_entry=ENTRY
. Next reboot will be fine though, grub readsnext_entry
. Following boots may fail if no entry is saved assaved-entry=ENTRY
in grubenv. -
mook765 about 5 yearsThere is no reason to set
GRUB_DEFAULT=saved
, it would mess up your configuration. What grub-reboot does is to writenext_entry=ENTRY
to/boot/grub/grubenv
. That's notsaved_entry=ENTRY
. Next reboot will be fine though, grub readsnext_entry
. Following boots may fail if no entry is saved assaved-entry=ENTRY
in grubenv. -
Xor almost 4 yearsOn my Ubuntu 20.04 system there are lines that contain "menuentry" but aren't menu entries, so MENU_NUMBER wouldn't be correct. I think the WINDOWS_TITLE method, mentioned in another comment, works better now
-
lolsky over 3 yearsFor Linux Mint 19.3 (Ubuntu 18.04), I used the same script but replaced WINDOWS_TITLE line with:
WINDOWS_ENTRY=$(grep -iE '^menuentry' /boot/grub/grub.cfg | grep -iE --line-number '*' | head -n 1)