Existe-t-il un moyen pour grub de redémarrer automatiquement dans Windows à partir de Windows?

12

J'ai une configuration à double démarrage:

  1. Ubuntu 16.04 LTS
  2. les fenêtres

Actuellement, lorsque je veux passer rebootd'Ubuntu à Windows, j'utilise grub-rebootle nombre approprié comme argument. Cela fonctionne bien.

Cependant, parfois, Windows a besoin d'un redémarrage pour qu'un certain programme puisse être installé ou mis à jour et je dois manuellement sélectionner la bonne entrée du menu de démarrage grub. Existe-t-il un moyen similaire (à partir de l'interface utilisateur Windows) pour indiquer à grub quelle entrée démarrer?

Je suppose que la grub-rebootcommande transmet l'argument à un fichier qui est à son tour lu par grub reboot.

edit (concernant ma réponse sélectionnée): Je suis actuellement à la recherche du montage du lecteur ext4 qui contient / boot et du scriptage de l'édition. cela prendra peut-être un certain temps car je fais cela pendant mon temps libre à côté de mon travail non technique de 40 heures par semaine. ^^

amon san
la source
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
terdon
Veuillez mettre à jour votre question à l'avenir avec ce que vous avez fini par faire pour que grub redémarre automatiquement dans Windows. J'ai hâte de savoir quelle méthode a fonctionné pour vous et de voir le script de Windows (le cas échéant) que vous avez écrit. Je suis sûr que beaucoup d'autres personnes sont également intéressées.
WinEunuuchs2Unix
@ WinEunuuchs2Unix actuellement je travaille dessus. comme l'a dit Oli - l'écriture de scripts dans les fenêtres est un PITA royal.
amon san
@amonsan J'ai mis à jour ma réponse avec la reboot-to-windowsfonction qui est un compromis sur l'utilisation d' ext2fsd qui corrompt les superblocs ext4 .
WinEunuuchs2Unix
@amonsan Avez-vous la configuration de votre système maintenant pour que le redémarrage de Windows Update revienne automatiquement à Windows?
WinEunuuchs2Unix

Réponses:

8

Vous pouvez reproduire ce qui grub-rebootfait. C'est juste un script qui appelle finalement:

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

Windowsest le nom de votre entrée de menu grub. Ce n'est peut-être pas

J'ai couru ça. Tout ce qu'il le fait insérer next_entry=Windowsdans /boot/grub/grubenv. Sur la ligne 2. Donc, si c'est juste un fichier, sur un système de fichiers, vous pouvez faire exactement la même chose depuis Windows . C'est un problème Windows à résoudre, mais voici l'aperçu de haut niveau:

  • Montez le disque là où réside le démarrage. C'est probablement le bit le plus difficile car c'est probablement ext4. Cela pourrait aider, mais il n'est pas inconcevable que vous ayez besoin de Linux fonctionnant avec Windows pour le modifier.

    Comme le fait remarquer Muru, cela ne doit pas être si difficile. Vous pouvez déplacer /bootvers sa propre partition FAT32 . Cela rend trivial le montage sous Windows.

  • Insérez next_entry=Windows(ou autre) dans le fichier après le commentaire, avant les hachages.

  • Démontez.
  • Redémarrez.

Scripter que dans Windows est bien en dehors de ma zone de confort et pas vraiment ce que nous faisons ici. Mais cela devrait être tout ce que vous devez faire.

Oli
la source
1
Dans cette méthode, comme je l'ai dit dans un commentaire maintenant déplacé vers le chat, il est préférable de passer à une /bootpartition distincte et de la formater en FAT32 ou NTFS, puis de les modifier confortablement sous Windows. Il n'y a rien dans /bootcela qui nécessite particulièrement les fonctionnalités Unix-y. L'écriture de scripts à l'aide de Powershell devrait alors être facile.
muru
19

Le moyen le plus simple est avec Grub

C'est un contrôle lourd grubde Windows. Une application tierce pour accéder à Ubuntu à partir de Windows et un piratage sont nécessaires. Cependant, à partir de la partie supérieure de cet article: Comment changer l'ordre sur mes distributions de double démarrage , vous pouvez configurer grubpour redémarrer automatiquement à la dernière option de menu. Ainsi, lorsque vous démarrez initialement avec Windows et qu'il se réveille à 2 heures du matin pour exécuter les mises à jour, grubil rechargera Windows afin qu'il puisse terminer les mises à jour avec élégance.

Lorsque vous redémarrez manuellement et choisissez Ubuntu à partir de grubtous vos prochains redémarrages, chargez automatiquement Ubuntu. Cette fonctionnalité fonctionne aussi bien si vous avez des bogues dans le noyau actuel et que grubvous souhaitez redémarrer automatiquement dans une ancienne version du noyau que vous avez sélectionnée.

Comment faire pour que Grub répète la dernière sélection de démarrage

C'est assez simple. À l'aide de sudopouvoirs, modifiez /etc/default/grubet modifiez les éléments suivants:

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

La première ligne que vous commenterez et juste en dessous insérera les deux lignes suivantes.

Enregistrez le fichier et tapez dans le terminal:

sudo update-grub

Ligne de commande Ubuntu pour redémarrer sous Windows

Actuellement, vous utilisez quelque chose comme ceci:

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

À partir de cette réponse Stack Exchange modifiée, vous pouvez utiliser la valeur par défaut de grub pour redémarrer dans Windows. Copiez ce code dans votre ~/.bashrcfichier:

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
}
  • Enregistrez le ~/.bashrcfichier avec une nouvelle reboot-to-windowsfonction.
  • Fermez votre session de terminal actuelle.
  • Ouvrez une nouvelle session de terminal pour que les modifications ~/.bashrcsoient chargées.
  • Vous pouvez taper : ~/.bashrcpour le recharger dans la session de terminal existante, mais certaines personnes déconseillent de le faire.

Pour redémarrer dans Windows à partir de la ligne de commande, utilisez:

reboot-to-windows

Si Windows redémarre automatiquement lorsque vous ne regardez pas, Windows est redémarré. Cela permet aux mises à jour automatiques de Windows d'être traitées normalement sur plusieurs cycles de redémarrage que Windows utilise parfois.

WinEunuuchs2Unix
la source
1
Cette question n'a rien à voir avec l'ordre de démarrage.
Jennifer
2
@Jennifer La question est cependant une instance du problème XY. Cette réponse est donc utile. De plus, il s'agit en fait de l'ordre de démarrage car il demande un moyen de modifier temporairement l'ordre de démarrage à partir d'une interface utilisateur Windows.
wizzwizz4
2

grub-set-defaultdevrait faire la même chose que grub-reboot, mais rendre le paramètre permanent. Ce n'est pas exactement de Windows UI, comme vous l'avez demandé, mais peut-être que cela fonctionne pour vous.

Sebastian Stark
la source
Cette question n'a rien à voir avec l'ordre de démarrage.
Jennifer
Je ne comprends pas très bien ce que vous voulez dire par ce commentaire, pouvez-vous expliquer?
Sebastian Stark
Amon San ne demande pas comment obtenir grub par défaut pour Windows - ze demande, si Windows est déjà démarré, comment provoquer un redémarrage maintenant et sélectionner le système d'exploitation sur lequel démarrer.
Jennifer
@Jennifer OP ne demande pas "comment redémarrer maintenant dans Windows". Si c'est le cas, OP pourrait simplement sélectionner Windows Redémarrer, puis sélectionner Windows dans le menu grub. OP demande "Lorsque Windows redémarre automatiquement lorsque je ne suis pas là, comment puis-je m'assurer qu'il redémarre dans Windows, pas l'option de menu grub par défaut". C'est du moins ainsi que je vois le problème principal .
WinEunuuchs2Unix
Oui, OP pourrait simplement sélectionner Windows Redémarrer, puis sélectionner Windows dans le menu grub. Mais OP demande spécifiquement comment puis-je revenir dans Windows automatiquement, sans avoir à sélectionner Windows dans le menu de démarrage - en d'autres termes, comment faire cela sans mon intervention? Trop de X Ying!
Jennifer
1

Vous n'avez pas dit quelle version de Windows ou si vous êtes sur UEFI.

Si vous utilisez un démarrage UEFI approprié (et non un démarrage hérité), il est possible de démarrer temporairement sur l'entrée de démarrage UEFI Windows. Sous Linux, cela peut être fait en utilisant des outils comme efibootmgr. Sous Windows, j'utilise personnellement EasyUEFI . Il est gratuit pour une utilisation personnelle et graphique, mais pas pour une utilisation en entreprise ou CLI. Je ne peux pas garantir sa sécurité. Cela semble également être un peu lent, mais cela semble fonctionner

Dans ma propre configuration, qui utilise Arch Linux (kernel EFI shim, sans GRUB) et Windows 10, voici à quoi cela ressemble, après avoir sélectionné "Gérer l'option de démarrage EFI" sur l'écran de démarrage:

Image montrant l'option de démarrage unique

Si vous utilisez le démarrage UEFI, vous devriez voir quelque chose de similaire pour Windows, plus une seule entrée pour Ubuntu (qui charge GRUB), ainsi que d'autres options spécifiques à l'appareil. L'option de démarrage unique peut ensuite être utilisée pour définir le démarrage sur l'entrée de démarrage UEFI pour Windows une fois, puis revenir à GRUB le démarrage après cela. Après avoir défini cela, vous redémarrez normalement.

muru
la source
1
merci, mais cela nécessite trop d'interaction manuelle à chaque fois à mon goût.
amon san
1
Hausser les épaules. Dans tous les cas, vous devez passer /bootà NTFS ou FAT32 au lieu de le modifier en ext4. Le support en écriture pour ext4 dans Windows est incertain, vous risquez trop de cette façon.
muru