Is there a way for grub to automatically reboot into Windows from Windows?

Easiest way is with Grub

It is cumbersome controlling grub from Windows. A third party application to access Ubuntu from Windows and some hacking is required. However from the top part of this post: How to change the order on my dual booting distros, you can setup grub to automatically reboot to the last menu option. So when you initially boot with windows, and it wakes up at 2 am to run updates, grub will reload Windows so it can gracefully finish updates.

When you manually reboot and pick Ubuntu from grub all your next reboots automatically load Ubuntu. This feature works equally well if you have bugs in the current kernel and want grub to automatically reboot into an older kernel version you selected.

How to get Grub to repeat last boot selection

This is fairly straight forward. Using sudo powers edit /etc/default/grub and change the following:

#GRUB_DEFAULT=0 # Rather than option #1, we'll always default to last boot choice.
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

The first line you will be commenting out and right below that insert the next two lines.

Save the file and type in the terminal:

sudo update-grub

Ubuntu command line to reboot into Windows

Currently you use something like this:

sudo grub-reboot x # Where x is Windows zero-based grub menu number
sudo reboot now

From this modified Stack Exchange answer you can use the grub default to reboot into Windows. Copy this code into your ~/.bashrc file:

function reboot-to-windows {
    WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
    sudo grub-set-default "$WINDOWS_TITLE"
    sudo reboot
}
  • Save the ~/.bashrc file with new reboot-to-windows function.
  • Close your current terminal session.
  • Open a new terminal session for changed ~/.bashrc to be loaded.
  • You could type : ~/.bashrc to reload it into the existing terminal session but some people recommend against do this.

To reboot into Windows from the command line use:

reboot-to-windows

If Windows automatically restarts when you aren't looking, Windows is rebooted. This allows Windows automatic updates to be processed normally over multiple-reboot cycles Windows sometimes uses.


You can replicate what grub-reboot does. It's just a script that eventually calls:

grub-editenv /boot/grub/grubenv set next_entry="Windows"

Where Windows is the name of your grub menu entry. It might not be that

I ran that. All it does it insert next_entry=Windows into /boot/grub/grubenv. On line 2. So if it's just a file, on a filesystem, you can do exactly the same thing from within Windows. It's a Windows problem to solve, but here's the high-level overview:

  • Mount the disk where boot lives. This is probably the hardest bit because this is probably ext4. This might help but it's not inconcievable that you might need Linux running with Windows to edit it.

    As muru points out, it needn't be this hard. You can move /boot to its own FAT32 partition. This makes it trivial to mount in Windows.

  • Insert next_entry=Windows (or whatever) into the file after the comment, before the hashes.

  • Unmount.
  • Reboot.

Scripting that in Windows is well outside my comfort zone and not really what we do here. But that should be all you need to do.


grub-set-default should do the same as grub-reboot, but make the setting permanent. This is not exactly from Windows UI, as you asked, but maybe it works for you.