web-dev-qa-db-fra.com

Comment puis-je dire GRUB je veux redémarrer sous Windows avant de redémarrer?

J'ai un système Linux/Windows à double démarrage configuré et je passe fréquemment de l'un à l'autre. Je pensais si je pouvais ajouter un élément de menu dans l'un des menus pour redémarrer directement dans les fenêtres, sans s'arrêter à l'invite GRUB.

J'ai vu cette question sur un forum, c'est exactement ce que je veux mais il s'agit de lilo, ce qui n'est pas mon cas.

J'ai pensé à une solution qui modifierait l'entrée par défaut dans le menu GRUB puis redémarrerait, mais il y a quelques inconvénients, et je me demandais s'il y avait une alternative plus propre.

(De plus, je serais intéressé par une solution pour démarrer directement de Windows vers Linux, mais cela pourrait être plus difficile et n'appartient pas ici. Quoi qu'il en soit, tant que je l'ai dans un sens, l'autre pourrait être configuré comme le défaut.

[~ # ~] mise à jour [~ # ~] Il semble que quelqu'un a demandé ne question similaire , et si ce sont les suggestions réponses, je pourrais aussi bien éditer /boot/grub/grubenv comme grub-reboot et grub-set-default et grub-editenv faire. )

Merci d'avance pour des conseils.

[~ # ~] mise à jour [~ # ~] :

Ceci est ma GRUB: (GRUB) 1.99-12ubuntu5-1linuxmint1

J'ai essayé d'exécuter grubonce, la commande est introuvable. Et la chercher dans les dépôts ne me donne rien. Je suis sur Linux Mint, donc ça pourrait être ça ...

Voyant man grub-reboot, il semble qu'il fasse ce que je veux, tout comme grubonce. Il est également disponible partout (au moins c'est pour moi, je pense qu'il fait partie du package grub). J'ai vu deux commandes associées: grub-editenv et grub-set-default.

J'ai découvert qu'après avoir exécuté Sudo grub-set-default 4, lors de l'exécution grub-editenv list vous obtenez quelque chose de similaire à:

saved_entry=4

Et lors de l'exécution grub-reboot 4, vous obtenez quelque chose comme:

prev_saved_entry=0
saved_entry=4

Ce qui signifie que les deux font la même chose (l'un est temporaire, l'autre ne l'est pas).

Étonnamment, quand j'ai essayé:

Sudo grub-reboot 4
Sudo reboot now

Cela n'a pas fonctionné, comme si je n'avais rien fait, il m'a juste montré le menu comme d'habitude et a sélectionné la première entrée, disant qu'il démarrera cette entrée dans 10s.

Je l'ai essayé à nouveau, je pensais que j'avais peut-être écrit la mauvaise entrée (elle est basée sur zéro, non?). Cette fois, il s'est juste accroché à l'écran du menu, et j'ai dû réinitialiser le PC pour pouvoir démarrer.

Si quelqu'un peut essayer ça, juste pour voir si c'est juste moi, j'apprécierais. (la menthe m'a donné du fil à retordre, et ce serait une bonne occasion de changer: P).

Lecture du code dans /boot/grub/grub.cfg, il semble que ce soit la voie à suivre, mais d'après mes observations, c'est simplement ignorer ces paramètres ...

34
jadkik94

Pour que le grub-reboot commande pour fonctionner, plusieurs changements de configuration requis doivent être en place:

  • L'entrée par défaut pour grub doit être définie sur saved. Un emplacement possible pour cela est le GRUB_DEFAULT= faire la queue /etc/default/grub
  • Utilisation grub-set-default pour définir votre entrée par défaut sur celle que vous utilisez normalement.
  • Mettez à jour votre configuration grub (par exemple, update-grub).

Cela devrait prendre en charge la configuration initiale. À l'avenir, faites simplement grub-reboot <entry> pour un démarrage unique de <entry>.

20
jw013
  1. Modifiez le fichier/etc/default/grub et remplacez GRUB_DEFAULT=0 avec GRUB_DEFAULT=saved
  2. Sudo update-grub
  3. votre commande sera:

    Sudo grub-reboot "$(grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2)" && Sudo reboot
    

une jolie fonction dans votre ~/.bashrc ressemblera

# ******************************************************************
# reboot directly to windows 
#   Inspired by http://askubuntu.com/questions/18170/how-to-reboot-into-windows-from-ubuntu
# ******************************************************************
function my_reboot_to_windows {
    WINDOWS_TITLE=`grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2`
    Sudo grub-reboot "$WINDOWS_TITLE"
    Sudo reboot
}

Dans le cas où votre grub.conf contient plusieurs lignes pour Windows, les fonctions suivantes ne prendront en charge que les lignes commençant par menuentry et choisissant juste la première, en se référant à Windows:

function my_reboot_to_windows {
    WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
    Sudo grub-reboot "$WINDOWS_TITLE"
    Sudo reboot
}
24
Philippe Gachoud

Un moyen super simple de le faire est avec GRUB Reboot GNOME Shell Extension (c'est-à-dire, si vous utilisez GNOME).

Pour utiliser l'extension, accédez au site lié ci-dessus et cliquez sur la petite bascule dans le coin supérieur droit (elle indique probablement Off lorsque vous accédez à la page pour la première fois). Il vous sera demandé de confirmer que vous souhaitez télécharger et installer l'extension.

Une fois qu'il est installé, vous pouvez ouvrir votre menu Système et cliquer sur le bouton d'alimentation comme vous le feriez normalement pour un redémarrage. La fenêtre qui apparaît confirmant que vous souhaitez arrêter ou redémarrer a maintenant un bouton intitulé "Redémarrer vers ...". Lorsque vous cliquez sur ce bouton, les éléments de votre menu grub apparaissent dans la liste afin que vous puissiez sélectionner le système d'exploitation à lancer automatiquement après le redémarrage. Si vous sélectionnez l'un de ces éléments, votre système s'arrête et redémarre à l'aide des options grub que vous avez sélectionnées.

2
Dylan Smith

D'accord avec @ jw013. Et vous pouvez également donner la vignette de menu à grub-reboot (y compris le titre du menu parent). par exemple:

$ Sudo grub-reboot "Advanced options for Ubuntu>Ubuntu, with Linux 4.13.0-26-generic"
$ Sudo reboot

Où "Options avancées pour Ubuntu" est le menu parent, "Ubuntu, avec Linux 4.13.0-26-generic" est le sous-menu.

1
Changbin Du

J'utilise Ubuntu 16.04 et les solutions ci-dessus n'ont pas fonctionné pour moi ... pour une raison quelconque Sudo grub-reboot 2 n'a jamais semblé mettre à jour le /boot/grub/grubenv fichier, même après avoir modifié GRUB_DEFAULT=0 à GRUB_DEFAULT=saved à la fois /etc/default/grub et /boot/grub/menu.lst. En utilisant le savedefault --default=2 --once La commande dans grub ne semble pas non plus fonctionner ni modifier le fichier grubenv. Il ne faisait que revenir au menu grub d'origine comme si rien n'avait été fait.

J'ai donc fini par le faire manuellement et cela a fonctionné (je ne sais pas comment cela fonctionnerait avec les disques RAID, cependant).

Sudo grub-editenv - set next_entry=2
reboot

Où 2 est l'emplacement d'entrée de menu à base zéro pour l'entrée Windows dans le menu de démarrage de grub.

Vous pouvez voir pourquoi cela fonctionne en regardant le /boot/grub/grub.cfg fichier, car il utilise la valeur next_entry, puis le réinitialise pour le prochain démarrage.

1
user4061565

J'utilise openSUSE qui est livré avec un script appelé grubonce, qui fait exactement ce dont vous avez besoin - définissez l'entrée grub à utiliser au prochain redémarrage.

# grubonce
0: Trace -- openSUSE 12.1 - 3.1.10-1.16
1: Debug -- openSUSE 12.1 - 3.1.10-1.16
2: Desktop -- openSUSE 12.1 - 3.1.10-1.16
3: Failsafe -- openSUSE 12.1 - 3.1.10-1.16

# grubonce 0
Using entry #0: Trace -- openSUSE 12.1 - 3.1.10-1.16

# grubonce 2
Using entry #2: Desktop -- openSUSE 12.1 - 3.1.10-1.16

Je ne sais pas si (le cas échéant) d'autres distributions livrent ce script, donc au cas où votre distribution ne l'aurait pas, vous pouvez consulter cette page:

http://sidvind.com/wiki/GRUB:_Boot_another_OS_once

1
Petr Uzel

grub-set-default semble plus disponible (grubonce n'est pas répertorié dans le verset d'Ubuntu). Il peut également être plus utile car Windows 7 a l'habitude d'effectuer un redémarrage au démarrage si des mises à jour ont été appliquées au dernier arrêt (c'est-à-dire qu'il commence le démarrage, traite certaines données de mise à jour, redémarre et affiche ensuite la page de connexion).
J'ai souvent démarré Windows 7 pour revenir et trouver Ubuntu en cours d'exécution.

1
charlesbridge

Dans Fedora, vous pouvez utiliser le script suivant. Notez que cela est principalement le même que celui décrit dans https://askubuntu.com/a/18186/149422 , avec quelques modifications pour GRUB 2 dans Fedora .

#!/bin/bash
if [ `readlink /boot/grub2/grubenv` == "/boot/efi/EFI/Fedora/grubenv" ]; then
    Sudo mv /boot/grub2/grubenv /boot/grub2/grubenv-original
    Sudo ln -s ../efi/EFI/Fedora/grubenv /boot/grub2/grubenv
fi
MENU_ENTRY=`grep ^menuentry /boot/grub2/grub.cfg  | grep --line-number Windows`
MENU_NUMBER=$(( `echo $MENU_ENTRY | sed -e "s/:.*//"` - 1 ))
Sudo grub2-reboot $MENU_NUMBER
Sudo reboot
1
Roy Hyunjin Han

Redémarrez la machine sur une cible de démarrage spécifique (entrée Grub).
La cible de démarrage est sélectionnée de manière interactive avec fzf.

# Search for grub.cfg
GRUB_CFG=$(find /boot -name grub.cfg 2> /dev/null)

if [[ -z ${GRUB_CFG} ]]; then
  echo "No grub.cfg found under /boot. Try as root."
  exit 1
Elif [[ ! -r ${GRUB_CFG} ]]; then
  echo "${GRUB_CFG} is not readable. Try as root."
  exit 1
fi

GRUB_MENUENTRY=$(awk -F\' '/menuentry / {print $2}' ${GRUB_CFG} | fzf)

# Set boot target for next boot
grub2-reboot "${GRUB_MENUENTRY}"

reboot
0
Simon Schürg