Come riavviare Windows da Ubuntu?


35

Sto cercando un modo per riavviare Windows da Ubuntu su un sistema a doppio avvio 10.10 / Vista. Il caso d'uso specifico è che vorrei poter accedere alla mia istanza Ubuntu in esecuzione ed emettere un comando che avvierà un riavvio direttamente in Windows.

Ho trovato un post sul blog promettente , ma lo script che suggerisce non funziona:

#!/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 non è di grande aiuto, ma sembra che mi stia portando nella giusta direzione:

imposta la voce di avvio predefinita per GRUB, solo per l'avvio successivo

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

Ciò restituisce il valore previsto, ma al riavvio la prima voce di menu viene comunque evidenziata. Qualche idea sul perché questo non funziona o suggerimenti per altre soluzioni?


Se copi la linea di avvio di Windows Grub in cima all'elenco nel menu di GRUB, su ogni finestra di avvio sarà il carico predefinito .. se sei in Ubuntu e SSH in esso allora. sudo reboot nowdovrebbe riavviare la macchina nel primo elemento nell'elenco grub.
karthick87,

Certo, ma raramente avvio in quella partizione di Windows. Non voglio renderlo la voce predefinita.
andrewsomething

Risposte:


43
  • Devi prima modificare il tuo grub.

    sudo gedit /etc/default/grub
    
  • Cerca la riga GRUB_DEFAULT = 0 e modificala in GRUB_DEFAULT = salvata testo alternativo

  • Aggiorna grub usando il seguente comando.

    sudo update-grub  
    
  • Ora crea un file di script,

    sudo gedit switch-to-windows.sh
    
  • Quindi aggiungere queste righe.

    #!/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
    
  • Rendi eseguibile lo script.

    sudo chmod +x switch-to-windows.sh
    
  • E ora puoi eseguire questo script dal terminale per riavviare in Windows.

    ./switch-to-windows.sh
    
  • Oppure puoi eseguire il seguente comando nel tuo terminale

    sudo grub-reboot X  
    
  • Dove X è la posizione di menu del sistema operativo in cui si desidera riavviare dal menu di GRUB. (A partire da 0 come prima voce)

Per esempio:

  • Se questo è il tuo menu di grub e se vuoi avviare Windows dovresti dare il valore di X a 5.
  • sudo grub-reboot 5

    testo alternativo

  • Puoi anche creare un lanciatore per il comando sopra, in modo che il doppio clic sul lanciatore si riavvii in Windows.

Posso farlo funzionare una volta. Dopodiché devi inserire le password.

7
Come hai fatto a far sembrare Grub così?
Mandy

dare seguito alla domanda sopra? come puoi far sembrare grub così perty?
Diego,

5
La soluzione è davvero eccezionale, ma poiché ho 14 voci di menu con la scheda prima delle voci, con il titolo insthead del numero di voce di menu ha funzionato meglio. Quindi puoi cambiare il tuo codice con #! / Bin / bash WINDOWS_TITLE = grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2sudo grub-reboot "$ WINDOWS_TITLE" sudo reboot
Philippe Gachoud,

Philippe Gachoud, per favore fai della tua una risposta! è l'unico che funziona!
honi,

12

C'è un comando grub solo per farlo, lo è grub-reboot.

Sembra funzionare solo quando grub è configurato per iniziare con l'ultima voce salvata. Quindi, se non lo hai già fatto, modifica /etc/default/grube imposta

GRUB_DEFAULT=saved

quindi aggiorna il file di configurazione di grub:

sudo update-grub

D'ora in poi, ad ogni avvio grub inizierà l'ultima voce utilizzata.

Ora, se si desidera impostare in anticipo quale dovrebbe essere il sistema per l'avvio successivo, utilizzare

sudo grub-reboot ENTRY

dove ENTRYpotrebbe essere un numero relativo a una voce di menu (numerata a partire da 0) o un titolo esatto di voce di menu, ad esempio

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

Questo comando può essere facilmente reso disponibile come launcher

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

ma non so come potrebbe essere integrato nel menu di sistema.

È possibile ottenere il titolo della voce di menu disponibile con

sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg 

Non c'è motivo di impostare GRUB_DEFAULT=saved, rovinerebbe la tua configurazione. Che grub-riavvio non è quello di scrivere next_entry=ENTRYa /boot/grub/grubenv. Non è così saved_entry=ENTRY. Il prossimo riavvio andrà bene, dice Grub next_entry. I seguenti boot potrebbero non riuscire se nessuna voce viene salvata come saved-entry=ENTRYin grubenv.
mook765,

4

Penso di aver trovato un modo ancora più bello per le persone che vogliono fare lo stesso mentre sono localmente sul proprio pc senza ssh.

Una soluzione per riavviare in un sistema specifico scelto tramite un launcher di unità è stata appena pubblicata su webupd8. Vedere http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html

So che questa non è esattamente la questione, ma nel caso in cui qualcuno abbia una domanda simile in seguito, ciò potrebbe essere utile.


3

Per quanto ho capito, questo non sarà esattamente quello che vuoi, ma immagino piuttosto vicino. Basta seguire l' articolo link webupdate .


3
Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Marco Ceppi

2

Quindi per me il meglio era creare il seguente 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


-1

Non sono sicuro che funzionerà anche al 100% in Ubuntu, ma una volta ho fatto questo lavoro su una macchina centos

in pratica dovrai dire a grub quale id # da grub.conf dovrebbe essere eseguito dopo. L'id # può essere scoperto da

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

quindi nel mio caso, ad esempio, output "4-1" in quanto la quarta voce nel mio grub.conf contiene il testo "Windows". (Sostituiscilo con il nome della voce attuale (anche parzialmente) che vuoi usare. Quindi puoi alimentare questo per grub come:

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

e al successivo riavvio dovrebbe avviare automaticamente la voce a cui gli hai detto.

tutto questo può essere messo insieme in uno script come il seguente:

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

lo script determinerà automaticamente quale voce dal tuo grub.conf corrisponde al testo "Windows", lo invierà a grub per dire cosa dovrebbe essere caricato al prossimo avvio e riavvierà il tuo pc.

per una GUI potresti ad esempio aggiungere un'icona di collegamento sul desktop per raggiungere questo obiettivo.


1
Il file di configurazione per grub-legacy è menu.lst, non grub.conf. Per grub2, è grub.cfg, ma il tuo secondo comando è solo per grub-legacy.
psusi,

-4

Basta modificare /boot/grub/grub.cfge cambiare la voce predefinita per puntare alla voce che si desidera avviare. Il valore può essere il numero ordinale della voce (a partire da zero per la prima) oppure è possibile inserire tra virgolette il titolo completo della voce desiderata.


2
Non consigliare di modificare boot.cfg, verrà ripristinato in ogni manuale o automatico update-grub. L'utente dovrebbe /etc/default/grubinvece modificare .
enzotib,

1
@enzotib, poiché la modifica è destinata esclusivamente all'avvio successivo, non c'è motivo di farlo in questo modo.
psusi,

2
dimentichi che una modifica errata su quel file potrebbe portare a un sistema non avviabile
enzotib,

1
@enzotib, non proprio; una delle cose belle di grub2 è che puoi sempre recuperare manualmente al prompt. Anche il pericolo di rovinare altre parti del file è un argomento specioso, e se si sbaglia la riga predefinita, il peggio che succede è che per impostazione predefinita è la prima voce.
psusi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.