¿Cómo reiniciar en Windows desde Ubuntu?

35

Estoy buscando una manera de reiniciar Windows desde Ubuntu en un sistema de arranque dual 10.10 / Vista. El caso de uso específico es que me gustaría poder ingresar a mi instancia de Ubuntu en ejecución y emitir un comando que iniciará un reinicio directamente en Windows.

Encontré una publicación de blog prometedora , pero el script que sugiere no funciona:

#!/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 no es de mucha ayuda, pero parece estar guiándome en la dirección correcta:

configura la entrada de arranque predeterminada para GRUB, solo para el próximo arranque

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

Esto devuelve el valor esperado, pero al reiniciar la primera entrada del menú todavía está resaltada. ¿Alguna idea de por qué esto no funciona o sugerencias para otras soluciones?

andrewsomething
fuente
Si copia la línea de arranque de grub de Windows en la parte superior de la lista en el menú de grub, en cada ventana de arranque se cargará por defecto ... si está en ubuntu y ssh en él. sudo reboot nowdebería reiniciar la máquina en el primer elemento de la lista de grub.
karthick87
Claro, pero rara vez arranco en esa partición de Windows. No quiero que sea la entrada predeterminada.
andrewsomething

Respuestas:

43
  • Tienes que editar tu grub primero.

    sudo gedit /etc/default/grub
    
  • Busque la línea GRUB_DEFAULT = 0 y modifíquela a GRUB_DEFAULT = guardada texto alternativo

  • Actualice su grub con el siguiente comando.

    sudo update-grub  
    
  • Ahora crea un archivo de script,

    sudo gedit switch-to-windows.sh
    
  • Luego agrega estas líneas.

    #!/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
    
  • Haga que el script sea ejecutable.

    sudo chmod +x switch-to-windows.sh
    
  • Y ahora puede ejecutar este script desde la terminal para reiniciar en Windows.

    ./switch-to-windows.sh
    
  • O puede ejecutar el siguiente comando en su terminal

    sudo grub-reboot X  
    
  • Donde X es la posición de menuentry del sistema operativo en el que desea reiniciar desde el menú GRUB. (Comenzando con 0 como la primera entrada)

Por ejemplo:

  • Si este es su menú de grub y desea iniciar Windows, debe dar el valor de X como 5.
  • sudo grub-reboot 5

    texto alternativo

  • También puede crear un iniciador para el comando anterior, de modo que hacer doble clic en el iniciador se reinicie en Windows.
karthick87
fuente
Puedo hacer que funcione una vez. Después de eso, debe ingresar las contraseñas.
77
¿Cómo conseguiste que Grub se viera así?
Mandy
seguir la pregunta anterior? ¿Cómo puedes conseguir que la comida se vea tan perty?
Diego
55
La solución es realmente genial, pero como tengo 14 entradas de menú con tabulación antes de las entradas, con el título del título del número de entrada del menú funcionó mejor. Para que pueda cambiar su código con #! / Bin / bash WINDOWS_TITLE = grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2sudo grub-reiniciar "$ WINDOWS_TITLE" reiniciar sudo
Philippe Gachoud
Philippe Gachoud, por favor, haz la tuya una respuesta ¡Es el único que funciona!
honi
12

Hay un comando grub para hacerlo, es grub-reboot.

Parece que solo funciona cuando tiene grub configurado para comenzar con la última entrada guardada. Entonces, si aún no lo ha hecho, modifique /etc/default/gruby configure

GRUB_DEFAULT=saved

luego actualice el archivo de configuración de grub:

sudo update-grub

A partir de ahora, en cada arranque de arranque se iniciará la última entrada utilizada.

Ahora, si desea establecer de antemano cuál debería ser el sistema para iniciar la próxima vez, use

sudo grub-reboot ENTRY

donde ENTRYpodría ser un número relativo a una entrada de menú (numerado a partir de 0), o un título exacto de entrada de menú, por ejemplo

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

Este comando puede estar fácilmente disponible como un lanzador

#!/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

pero no sé cómo podría integrarse en el menú del sistema.

Puede obtener el título de entrada de menú disponible con

sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg 
enzotib
fuente
No hay razón para configurarlo GRUB_DEFAULT=saved, dañaría su configuración. Lo que grub-reboot hace es escribir next_entry=ENTRYa /boot/grub/grubenv. Eso no es saved_entry=ENTRY. Sin embargo, el próximo reinicio estará bien, dice grub next_entry. Las siguientes botas pueden fallar si no se guarda ninguna entrada como saved-entry=ENTRYen grubenv.
mook765
4

Creo que he encontrado una forma aún más agradable para las personas que quieren hacer lo mismo mientras están localmente en su PC sin ssh.

Una solución para reiniciar en un sistema específico elegido a través de un lanzador de la unidad se acaba de publicar en webupd8. Ver http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html

Sé que esto no es exactamente de lo que se trata la pregunta, pero en caso de que alguien tenga una pregunta similar más adelante, esto podría ser útil.

K. Hendrik
fuente
3

Según tengo entendido, esto no será exactamente lo que quieres, pero supongo que muy cerca. Simplemente siga el enlace del artículo de actualización web .

extranjero
fuente
3
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Marco Ceppi
2

Entonces, para mí, lo mejor fue crear el siguiente script con grub-rebootcomando

#!/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
Philippe Gachoud
fuente
0

La información de todos fue útil para mí, pero al final no pude lograr cambiar el valor predeterminado de grub y luego reiniciar con un solo clic. Después de jugar dos horas, descubro este programa que es exactamente lo mismo que todos intentamos construir y en 5 minutos reinicio en Windows. Gracias a todos, aquí está el enlace tramposo para aquellos que también se rinden. http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html

Mickey Brown
fuente
-1

No estoy seguro de si esto funcionará 100% también en Ubuntu, pero una vez lo hice funcionar en una máquina centos

básicamente tendrá que decirle a grub qué ID # de grub.conf debería ejecutarse a continuación. El id # se puede encontrar por

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

así que en mi caso esto sería, por ejemplo, la salida "4-1" como la cuarta entrada en mi grub.conf contiene el texto "Windows". (Reemplace esto con el nombre de la entrada real (también parcialmente) que desea usar. Luego puede alimentarlo para que comience de la siguiente manera:

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

y en el próximo reinicio, debería arrancar automáticamente la entrada que le indicó.

Todo esto se puede armar en un script como el siguiente:

#!/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

el script determinará automáticamente qué entrada de su grub.conf corresponde al texto "Windows", lo alimentará a grub para indicar qué debe cargarse en el próximo arranque y reiniciará su PC.

para una interfaz gráfica de usuario, por ejemplo, puede agregar un icono de acceso directo a su escritorio para lograr esto.

Roland Kohn
fuente
1
El archivo de configuración para grub-legacy es menu.lst, no grub.conf. Para grub2, es grub.cfg, pero su segundo comando es solo para grub-legacy.
psusi
-4

Simplemente edite /boot/grub/grub.cfgy cambie la entrada predeterminada para que apunte a la entrada que desea arrancar. El valor puede ser el número ordinal de la entrada (comenzando desde cero para la primera) o puede colocar el título completo de la entrada que desea entre comillas.

psusi
fuente
2
No aconseje modificar boot.cfg, se restaurará en cada manual o automático update-grub. El usuario debe modificar /etc/default/grub, en su lugar.
enzotib
1
@enzotib, dado que el cambio solo se aplica al próximo arranque, no hay razón para hacerlo de esa manera.
psusi
2
olvidas que una edición incorrecta en ese archivo podría conducir a un sistema que no se puede arrancar
enzotib
1
@enzotib, no realmente; Una de las cosas hermosas de grub2 es que siempre puede recuperarse manualmente en el indicador. Además, el peligro de arruinar otras partes del archivo es un argumento engañoso, y si se equivoca la línea predeterminada, lo peor que sucede es que por defecto es la primera entrada.
psusi