Comment redémarrer Windows à partir d'Ubuntu?

35

Je cherche un moyen de redémarrer Windows à partir d'Ubuntu sur un système à double démarrage 10.10 / Vista. Le cas d'utilisation spécifique est que je souhaite pouvoir utiliser ssh dans mon instance Ubuntu en cours d'exécution et émettre une commande qui initiera un redémarrage directement dans Windows.

J'ai trouvé un article de blog prometteur , mais le script qu'il suggère ne fonctionne pas:

#!/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 Cela ne m'aide pas beaucoup, mais cela semble me conduire dans la bonne direction:

définir l'entrée de démarrage par défaut pour GRUB, pour le prochain démarrage uniquement

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

Cela renvoie la valeur attendue, mais au redémarrage, la première entrée de menu est toujours en surbrillance. Des idées pour lesquelles cela ne fonctionne pas ou des suggestions pour d'autres solutions?

andrewsomething
la source
Si vous copiez la ligne de démarrage Windows grub en haut de la liste dans le menu Grub, la charge par défaut sera appliquée à chaque fenêtre de démarrage. Si vous êtes dans Ubuntu et SSH, alors. sudo reboot nowdevrait redémarrer la machine dans le premier élément de la liste de grub.
karthick87
Bien sûr, mais je démarre rarement dans cette partition Windows. Je ne veux pas en faire l'entrée par défaut.
andrewsomething

Réponses:

43
  • Vous devez d'abord modifier votre vers.

    sudo gedit /etc/default/grub
    
  • Recherchez la ligne GRUB_DEFAULT = 0 et modifiez-la en GRUB_DEFAULT = sauvegardée. texte alternatif

  • Mettez à jour votre fichier en utilisant la commande suivante.

    sudo update-grub  
    
  • Maintenant, créez un fichier de script,

    sudo gedit switch-to-windows.sh
    
  • Ajoutez ensuite ces lignes.

    #!/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
    
  • Rendre le script exécutable.

    sudo chmod +x switch-to-windows.sh
    
  • Et maintenant, vous pouvez exécuter ce script depuis un terminal pour redémarrer Windows.

    ./switch-to-windows.sh
    
  • Ou vous pouvez exécuter la commande suivante dans votre terminal

    sudo grub-reboot X  
    
  • Où X est la position du menu du système d'exploitation que vous souhaitez redémarrer à partir du menu GRUB (en commençant par 0 comme première entrée).

Par exemple:

  • S'il s'agit du menu de votre choix et que vous souhaitez démarrer Windows, vous devez attribuer la valeur 5 à X.
  • sudo grub-reboot 5

    texte alternatif

  • Vous pouvez également créer un lanceur pour la commande ci-dessus, de sorte qu'un double-clic sur le lanceur redémarre sous Windows.
karthick87
la source
Je peux le faire fonctionner une fois. Après cela, vous devez entrer des mots de passe.
7
Comment es-tu arrivé à ce que la bouffe ressemble à ça?
Mandy
suivre la question ci-dessus? comment pouvez-vous avoir la mine si perty?
Diego
5
La solution est vraiment géniale, mais comme j'ai 14 entrées de menu avec onglet avant les entrées, avec le titre insthead du numéro d’entrée de menu fonctionnait mieux. Vous pouvez donc changer votre code avec #! / Bin / bash WINDOWS_TITLE = grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2sudo grub-reboot "$ WINDOWS_TITLE" redémarrage sudo
Philippe Gachoud le
Philippe Gachoud, répondez-y s'il vous plait! c'est le seul qui fonctionne!
honi
12

Il y a une commande grub juste pour le faire, ça l'est grub-reboot.

Cela ne semble fonctionner que si vous avez configuré grub pour démarrer avec la dernière entrée enregistrée. Donc, si vous ne l'avez pas déjà fait, modifiez /etc/default/grubet définissez

GRUB_DEFAULT=saved

puis mettez à jour le fichier de configuration grub:

sudo update-grub

A partir de maintenant, la dernière entrée utilisée sera lancée à chaque démarrage.

Maintenant, si vous voulez définir à l’avance quel devrait être le système pour démarrer la prochaine fois, utilisez

sudo grub-reboot ENTRY

ENTRYpourrait être un numéro relatif à une entrée de menu (numéroté à partir de 0), ou un titre exact d’ entrée de menu, par exemple

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

Cette commande peut facilement être mise à disposition en tant que lanceur

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

mais je ne sais pas comment cela pourrait être intégré dans le menu système.

Vous pouvez obtenir le titre d’entrée de menu disponible avec

sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg 
enzotib
la source
Il n'y a aucune raison de le définir GRUB_DEFAULT=saved, cela gâcherait votre configuration. Qu'est - ce que grub-reboot est d'écrire next_entry=ENTRYà /boot/grub/grubenv. Ce n'est pas saved_entry=ENTRY. Prochain redémarrage sera bien si, lit sans tête next_entry. Les démarrages suivants peuvent échouer si aucune entrée n’est sauvegardée comme saved-entry=ENTRYdans grubenv.
mook765
4

Je pense avoir trouvé un moyen encore plus agréable pour les personnes qui veulent la même chose alors qu’elles sont localement sur leur PC sans ssh.

Une solution pour redémarrer dans un système spécifique choisi via un lanceur d'unité vient d'être publiée sur webupd8. Voir http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html

Je sais que ce n'est pas exactement le sujet de la question, mais si quelqu'un a une question similaire plus tard, cela pourrait être utile.

K. Hendrik
la source
3

Autant que je sache, ce ne sera pas exactement ce que vous voulez, mais je suppose que c'est assez proche. Il suffit de suivre l' article de lien webupdate .

dago
la source
3
Bien que cela puisse théoriquement répondre à la question, il serait préférable d’inclure ici les parties essentielles de la réponse et de fournir le lien à titre de référence.
Marco Ceppi
2

Donc, pour moi, le mieux était de créer le script suivant avec la grub-rebootcommande

#!/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
la source
0

Les informations de tout le monde ont été utiles pour moi mais à la fin, je ne pouvais toujours pas changer le paramètre par défaut grub puis le redémarrer en un clic. Après avoir bricolé pendant 2 heures, je découvre ce programme qui est exactement la même chose que nous essayons de construire et en 5 minutes, je redémarre sous Windows. Merci à tous, voici le lien du tricheur pour ceux qui abandonnent aussi. http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html

Mickey Brown
la source
-1

Je ne sais pas si cela fonctionnera à 100% également à Ubuntu, mais j'ai déjà effectué ce travail sur une machine centos

En gros, vous devrez indiquer à grub quel identifiant # de grub.conf il devrait être lancé ensuite. L'identifiant # peut être trouvé par

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

Ainsi, dans mon cas, cela produirait par exemple "4-1" en tant que quatrième entrée de mon fichier grub.conf contenant le texte "Windows". (Remplacez-le par le nom d'entrée actuel (également partiellement) que vous voulez utiliser. Vous pouvez ensuite le transmettre à grub comme ceci:

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

et au prochain redémarrage, il devrait automatiquement démarrer l’entrée que vous lui avez indiquée.

tout cela peut être mis en place dans un script comme celui-ci:

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

le script déterminera automatiquement quelle entrée de votre fichier grub.conf correspond au texte "Windows", le transmettra à grub pour indiquer ce qui doit être chargé au prochain démarrage et redémarrera votre ordinateur.

pour une interface graphique, vous pouvez, par exemple, ajouter une icône de raccourci sur votre bureau pour y parvenir.

Roland Kohn
la source
1
Le fichier de configuration de grub-legacy est menu.lst, pas grub.conf. Pour grub2, il s'agit de grub.cfg, mais votre deuxième commande ne concerne que grub-legacy.
Psusi
-4

Il vous suffit de modifier /boot/grub/grub.cfget de modifier l'entrée par défaut pour qu'elle pointe vers l'entrée que vous souhaitez démarrer. La valeur peut être le nombre ordinal de l'entrée (en commençant par zéro pour la première) ou vous pouvez placer le titre complet de l'entrée que vous voulez entre guillemets.

psusi
la source
2
Ne conseillez pas de modifier boot.cfg, il sera restauré à chaque manuel ou automatique update-grub. L'utilisateur devrait modifier à la /etc/default/grubplace.
enzotib
1
@enzotib, puisque le changement ne concerne que le démarrage suivant, il n'y a aucune raison de le faire de cette façon.
Psusi
2
vous oubliez qu'une édition incorrecte sur ce fichier peut conduire à un système qui ne démarre plus
enzotib
1
@enzotib, pas vraiment; L'une des belles choses à propos de grub2 est que vous pouvez toujours récupérer manuellement à l'invite. De plus, le risque de foirer d'autres parties du fichier est un argument spécieux, et si vous vous trompez de ligne, le pire qui se produise est que la première entrée est par défaut.
Psusi