Como reiniciar o Windows no Ubuntu?

35

Estou procurando uma maneira de reiniciar o Windows a partir do Ubuntu em um sistema de inicialização dupla 10.10 / Vista. O caso de uso específico é que eu gostaria de poder ssh na minha instância do Ubuntu em execução e emitir um comando que iniciará uma reinicialização diretamente no Windows.

Encontrei um post promissor , mas o script que ele sugere não está funcionando:

#!/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 não ajuda muito, mas parece estar me levando na direção certa:

defina a entrada de inicialização padrão para o GRUB, apenas para a próxima inicialização

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

Isso retorna o valor esperado, mas, na reinicialização, a primeira entrada do menu ainda é destacada. Alguma idéia de por que isso não está funcionando ou sugestões para outras soluções?

andrewsomething
fonte
Se você copiar a linha de inicialização do windows grub para o topo da lista no menu grub, em cada janela de inicialização haverá a carga padrão. Se você estiver no ubuntu e fizer o ssh nele, então. sudo reboot nowdeve reiniciar a máquina no primeiro item da lista grub.
karthick87
Claro, mas raramente inicio nessa partição do Windows. Não quero torná-lo a entrada padrão.
andrewsomething

Respostas:

43
  • Você precisa editar seu grub primeiro.

    sudo gedit /etc/default/grub
    
  • Procure a linha GRUB_DEFAULT = 0 e modifique-a para GRUB_DEFAULT = salva texto alternativo

  • Atualize seu grub usando o seguinte comando.

    sudo update-grub  
    
  • Agora crie um arquivo de script,

    sudo gedit switch-to-windows.sh
    
  • Em seguida, adicione essas linhas.

    #!/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
    
  • Torne o script executável.

    sudo chmod +x switch-to-windows.sh
    
  • E agora você pode executar este script do terminal para reiniciar no Windows.

    ./switch-to-windows.sh
    
  • Ou você pode executar o seguinte comando no seu terminal

    sudo grub-reboot X  
    
  • Onde X é a posição de entrada do menu do sistema operacional em que você deseja reiniciar no menu GRUB. (Começando com 0 como a primeira entrada)

Por exemplo:

  • Se este é o seu menu do grub e se você deseja inicializar no Windows, deve dar o valor de X como 5.
  • sudo grub-reboot 5

    texto alternativo

  • Você também pode criar um iniciador para o comando acima, para que dê um clique duplo no iniciador para reiniciar o Windows.
karthick87
fonte
Eu posso fazê-lo funcionar uma vez. Depois disso, você deve digitar as senhas.
7
Como você conseguiu que o grub se parecesse com isso?
Mandy
acompanhar a pergunta acima? como você pode fazer o grub parecer tão pervertido?
Diego
5
A solução é realmente ótima, mas como eu tenho 14 entradas de menu com guia antes das entradas, o cabeçalho do título do número da entrada de menu funcionou melhor. Então você pode mudar seu código com #! / Bin / bash WINDOWS_TITLE =! grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2Sudo grub-reboot "$ WINDOWS_TITLE" sudo reinicialização
Philippe Gachoud
Philippe Gachoud, faça a sua resposta! é o único que funciona!
Honi
12

Existe um comando grub apenas para isso, é grub-reboot.

Parece funcionar apenas quando você tem o grub configurado para começar com a última entrada salva. Portanto, se você ainda não o fez, modifique /etc/default/grube defina

GRUB_DEFAULT=saved

atualize o arquivo de configuração do grub:

sudo update-grub

A partir de agora, em cada inicialização o grub iniciará a última entrada usada.

Agora, se você deseja definir com antecedência o que deve ser o sistema para inicializar na próxima vez, use

sudo grub-reboot ENTRY

onde ENTRYpoderia ser um número relativo a uma entrada de menu (numerada a partir de 0) ou um título exato da entrada de menu, por exemplo

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

Este comando pode ser facilmente disponibilizado como iniciador

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

mas não sei como isso pode ser integrado ao menu do sistema.

Você pode obter o título da entrada do menu disponível com

sed -n '/menuentry/s/.*\(["'\''].*["'\'']\).*/\1/p' /boot/grub/grub.cfg 
enzotib
fonte
Não há motivo para definir GRUB_DEFAULT=saved, isso atrapalharia sua configuração. O grub-reinicialização faz é escrever next_entry=ENTRYpara /boot/grub/grubenv. Isso não é saved_entry=ENTRY. A próxima reinicialização será boa, lê o grub next_entry. As seguintes botas podem falhar se nenhuma entrada for salva como saved-entry=ENTRYno grubenv.
mook765
4

Eu acho que encontrei uma maneira ainda melhor para pessoas que querem o mesmo enquanto localmente no seu PC sem ssh.

Uma solução para reiniciar em um sistema específico escolhido por meio de um lançador de unidade foi lançada no webupd8. Consulte http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html

Eu sei que não é exatamente disso que se trata a pergunta, mas, caso alguém tenha uma pergunta semelhante mais tarde, isso pode ser útil.

K. Hendrik
fonte
3

Tanto quanto eu entendi, isso não será exatamente o que você quer, mas acho bem próximo. Basta seguir o artigo do link webupdate .

dago
fonte
3
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Marco Ceppi
2

Então, para mim, o melhor foi criar o seguinte script com o 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
fonte
0

As informações de todos foram úteis para mim, mas no final ainda não consegui alterar o padrão do grub e reiniciar com um clique. Depois de mexer por 2 horas, descubro este programa, que é exatamente a mesma coisa que todos estamos tentando criar e, em 5 minutos, estou reiniciando o Windows. Obrigado a todos, aqui está o link do trapaceiro para aqueles que também desistem. http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html

Mickey Brown
fonte
-1

Não tenho certeza se isso 100% também funcionará no ubuntu, mas uma vez eu fiz isso funcionar em uma máquina centos

basicamente você terá que dizer ao grub qual id # do grub.conf deve ser executado a seguir. O ID # pode ser encontrado por

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

portanto, no meu caso, isso geraria, por exemplo, "4-1", pois a quarta entrada no meu grub.conf contém o texto "Windows". (Substitua isso pelo nome da entrada real (também parcialmente) que você deseja usar. Em seguida, você pode alimentá-lo para o grub, como:

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

e na próxima reinicialização, ele deve inicializar automaticamente a entrada para a qual você pediu.

tudo isso pode ser montado em um script como o seguinte:

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

o script determinará automaticamente qual entrada do seu grub.conf corresponde ao texto "Windows", alimentará o grub para informar o que deve ser carregado na próxima inicialização e reiniciará o seu PC.

para uma GUI, você pode, por exemplo, adicionar um ícone de atalho à área de trabalho para obter isso.

Roland Kohn
fonte
1
O arquivo de configuração para o grub-legacy é menu.lst, não grub.conf. Para grub2, é grub.cfg, mas seu segundo comando é apenas para grub-legacy.
Psusi 26/09/11
-4

Simplesmente edite /boot/grub/grub.cfge altere a entrada padrão para apontar para a entrada que você deseja inicializar. O valor pode ser o número ordinal da entrada (começando do zero para a primeira) ou você pode colocar o título completo da entrada que deseja entre aspas.

psusi
fonte
2
Não aconselho a modificar boot.cfg, ele será restaurado a cada manual ou automático update-grub. O usuário deve modificar /etc/default/grub.
enzotib 26/09/11
1
@enzotib, como a alteração é apenas para a próxima inicialização, não há razão para fazê-lo dessa maneira.
Psusi 26/09/11
2
você esquece que um erro de edição nesse arquivo pode levar a um sistema que não arranca
enzotib
1
@enzotib, na verdade não; Uma das coisas bonitas do grub2 é que você sempre pode se recuperar manualmente quando solicitado. Além disso, o perigo de estragar outras partes do arquivo é um argumento ilusório e, se você errar a linha padrão, o pior que acontece é que o padrão é a primeira entrada.
psusi 26/09/11