UbuntuからWindowsを再起動する方法は?


35

10.10 / VistaデュアルブートシステムでUbuntuからWindowsを再起動する方法を探しています。具体的な使用例は、実行中のUbuntuインスタンスにsshを実行し、Windowsを直接再起動するコマンドを発行できるようにすることです。

有望なブログ記事を見つけましが、それが示唆するスクリプトは機能していません:

#!/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 あまり助けにはなりませんが、正しい方向に私を導いているようです:

GRUBのデフォルトのブートエントリを設定します。次回のブート時のみ

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

これは期待値を返しますが、再起動時に最初のメニューエントリが強調表示されたままになります。これが機能しない理由や他のソリューションへの提案はありますか?


WindowsのGRUBブート行をGRUBメニューのリストの一番上にコピーすると、各ブートウィンドウでデフォルトの負荷になります。ubuntuでsshを使用している場合 sudo reboot nowgrubリストの最初の項目でマシンを再起動する必要があります。
karthick87

もちろん、しかし、私はめったにそのWindowsパーティションを起動しません。デフォルトのエントリにしたくありません。
アンドリューサム

回答:


43
  • 最初にGRUBを編集する必要があります。

    sudo gedit /etc/default/grub
    
  • GRUB_DEFAULT = 0を検索し、GRUB_DEFAULT = savedに変更します 代替テキスト

  • 次のコマンドを使用してgrubを更新します。

    sudo update-grub  
    
  • スクリプトファイルを作成します。

    sudo gedit switch-to-windows.sh
    
  • 次に、これらの行を追加します。

    #!/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
    
  • スクリプトを実行可能にします。

    sudo chmod +x switch-to-windows.sh
    
  • そして、このスクリプトをターミナルから実行して、Windowsを再起動できます。

    ./switch-to-windows.sh
    
  • または、ターミナルで次のコマンドを実行できます

    sudo grub-reboot X  
    
  • Xは、GRUBメニューから再起動するOSのmenuentry位置です(最初のエントリとして0から開始)。

例えば:

  • これがあなたのgrubメニューであり、ウィンドウを起動したい場合は、Xの値を5として指定する必要があります。
  • sudo grub-reboot 5

    代替テキスト

  • 上記のコマンドのランチャーを作成して、ランチャーをダブルクリックするとウィンドウが再起動されるようにすることもできます。

一度動作させることができます。その後、パスワードを入力する必要があります。

7
どのようにしてgrubをそのように見せましたか?
マンディ

上記の質問をフォローアップしますか?どうしてこんなに見栄えが悪いの?
ディエゴ

5
解決策は本当に素晴らしいですが、エントリの前にタブ付きの14のメニューエントリがあるので、メニューエントリ番号のタイトルインスタンスがより適切に機能しました。!あなたは#/ binに/ bashのWINDOWS_TITLE =を使用して、コードを変更することができるようgrep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2にsudoのgrub-リブート"$ WINDOWS_TITLE" sudoをリブート
フィリップGachoud

Philippe Gachoud、あなたの答えにしてください!動作するのはそれだけです!
ホニ

12

そうするためのgrubコマンドがありgrub-rebootます。

grubが最後に保存されたエントリから開始するように設定されている場合にのみ機能するようです。したがって、まだ行っていない場合は、変更/etc/default/grubして設定します

GRUB_DEFAULT=saved

次に、grub構成ファイルを更新します。

sudo update-grub

これ以降、各ブートgrubで最後に使用されたエントリが開始されます。

次回起動するシステムを事前に設定する場合は、次を使用します。

sudo grub-reboot ENTRY

ここでENTRY、メニューエントリに関連する番号(0から始まる番号)、または正確なメニューエントリのタイトル、たとえば

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

このコマンドは、ランチャーとして簡単に利用可能にすることができます

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

しかし、システムメニューにどのように統合できるのかわかりません。

使用可能なメニューエントリタイトルを取得するには

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

設定する理由はありませんGRUB_DEFAULT=saved。設定が台無しになります。grub-rebootが行うことは、に書き込むnext_entry=ENTRYこと/boot/grub/grubenvです。そうではありませんsaved_entry=ENTRY。ただし、次回の再起動は問題ありません。grubは読み取りますnext_entrysaved-entry=ENTRYgrubenvのようにエントリが保存されていない場合、次のブートは失敗する可能性があります。
mook765

4

sshを使わずにローカルPCで同じことをしたい人にとっては、もっと良い方法を見つけたと思います。

ユニティランチャーを通じて選択された特定のシステムに再起動するソリューションが、webupd8に投稿されました。http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.htmlを参照してください

私はこれが質問の正確な内容ではないことを知っていますが、誰かが後で同様の質問をした場合、これは役に立つかもしれません。



2

だから私にとって最高のgrub-rebootコマンドで次のスクリプトを作成することでした

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

0

みんなの情報は私にとっては役に立ちましたが、結局、grubのデフォルトを変更してワンクリックで再起動することはできませんでした。2時間いじくり回した後、私たちは全員が構築しようとしているのとまったく同じものであるこのプログラムを発見し、5分後にWindowsを再起動しています。みなさんありがとう、あきらめる人のための詐欺師のリンクです。 http://www.webupd8.org/2013/01/unity-reboot-launcher-to-quickly-reboot.html


-1

これがubuntuでも100%動作するかどうかは分かりませんが、一度centosマシンでこの作業を行いました

基本的に、grubに次に実行する必要があるgrub.confのID番号を伝える必要があります。ID#は

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

私の場合、grub.confの4番目のエントリに「Windows」というテキストが含まれているため、たとえば「4-1」が出力されます。(使用する実際のエントリ名(これも部分的に)に置き換えます。これを次のようにgrubにフィードできます。

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

次回の再起動時に、指定したエントリが自動的に起動するはずです。

これらはすべて、次のようなスクリプトにまとめることができます。

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

スクリプトは、grub.confのどのエントリがテキスト「Windows」に対応するかを自動的に決定し、これをgrubにフィードして、次回の起動時に何をロードするかを通知し、PCを再起動します。

GUIの場合、デスクトップにショートカットアイコンを追加して、これを実現できます。


1
grub-legacyの設定ファイルは、grub.confではなくmenu.lstです。grub2の場合、それはgrub.cfgですが、2番目のコマンドはgrub-legacy専用です。
-psusi

-4

/boot/grub/grub.cfgデフォルトのエントリを編集して変更し、起動するエントリを指すようにします。値は、エントリの序数(最初のエントリのゼロから始まる)にするか、必要なエントリの完全なタイトルを引用符で囲むことができます。


2
変更するようboot.cfgにアドバイスしないでくださいupdate-grub。手動または自動で復元されます。/etc/default/grub代わりに、ユーザーが変更する必要があります。
エンゾチブ

1
@enzotib、変更は次のブートに関係することだけを目的としているため、そのようにする理由はありません。
-psusi

2
そのファイルを誤って編集すると、システムが起動できなくなる可能性があることを忘れています
-enzotib

1
@enzotib、そうでもない。grub2のすばらしい点の1つは、プロンプトでいつでも手動で回復できることです。また、ファイルの他の部分をめちゃくちゃにする危険性は格別の引数であり、デフォルトの行を間違えた場合、最悪の事態は最初のエントリがデフォルトになることです。
-psusi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.