デュアルブートのLinux/Windowsシステムをセットアップしていて、頻繁に一方から他方に切り替えます。 GRUBプロンプトで停止することなく、メニューの1つにメニュー項目を追加してウィンドウに直接再起動できるかどうかを考えていました。
私はフォーラムで この質問 を見ました、それはまさに私が欲しいものですが、それはliloを扱っています、それは私のケースではありません。
GRUBメニューのデフォルトエントリを変更してから再起動する解決策を考えましたが、いくつかの欠点があり、よりクリーンな代替策があるかと思っていました。
(また、私はWindowsからLinuxに直接ブートするソリューションに興味がありますが、それは難しいかもしれないし、ここには属しません。デフォルト。
[〜#〜] update [〜#〜]誰かが尋ねたようです 同様の質問 、そしてそれらが提案されているかどうか答えは、/boot/grub/grubenv
をgrub-reboot
とgrub-set-default
とgrub-editenv
と同じように編集することです。 )
ヒントを事前にありがとう。
[〜#〜]更新[〜#〜]:
これは私のGRUBバージョンです:(GRUB) 1.99-12ubuntu5-1linuxmint1
grubonce
を実行してみましたが、コマンドが見つかりません。リポジトリで検索しても何も起こりません。私はLinux Mintを使っているので、それでそれかもしれません...
man grub-reboot
を見ると、grubonce
と同じように、私が望んでいるように見えます。それはどこでも入手可能です(少なくとも私にとっては、それはgrubパッケージの一部だと思います)。関連する2つのコマンド、grub-editenv
とgrub-set-default
を見ました。
Sudo grub-set-default 4
を実行した後、grub-editenv list
を実行すると、次のような結果が得られることがわかりました。
saved_entry=4
そしてgrub-reboot 4
を実行すると、次のようになります。
prev_saved_entry=0
saved_entry=4
これは、両方が同じことを行うことを意味します(一方は一時的なもので、もう一方はそうではありません)。
驚いたことに、私が試したとき:
Sudo grub-reboot 4
Sudo reboot now
何もしなかったかのように機能しませんでした。通常どおりメニューを表示し、最初のエントリを選択しました。このエントリは10秒で起動するというものです。
もう一度試しましたが、間違ったエントリを書いたのではないかと思いました(ゼロベースですよね?)。その時、それはメニュー画面でハングしただけで、起動するためにPCをハードリセットする必要がありました。
誰かがこれを試してみることができるなら、それが私だけであるかどうかを確認するために、私はそれを感謝します。 (ミントは私に苦労してきました、そしてそれは:Pを変更する良い機会です)。
/boot/grub/grub.cfg
でコードを読み取るのはこれでいいようですが、私の観察では、これらの設定を無視しているだけです...
grub-reboot
コマンドが機能するためには、いくつかの必要な構成変更を行う必要があります。
saved
に設定する必要があります。これが可能な場所の1つは、GRUB_DEFAULT=
の/etc/default/grub
行です。grub-set-default
を使用して、デフォルトのエントリを通常使用するエントリに設定します。update-grub
)。これにより、初期設定が処理されます。将来的には、grub-reboot <entry>
を一度だけ起動して<entry>
を実行します。
GRUB_DEFAULT=0
をGRUB_DEFAULT=saved
に置き換えますSudo update-grub
コマンドは次のようになります。
Sudo grub-reboot "$(grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2)" && Sudo reboot
〜/ .bashrcのきれいな関数は次のようになります
# ******************************************************************
# 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
}
Grub.confにWindowsの複数の行が含まれている場合、以下の関数はmenuentry
で始まり、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
}
それを行う非常に簡単な方法は GRUB Reboot GNOME Shell Extension を使用することです(つまり、GNOMEを使用している場合)。
拡張機能を使用するには、上記のリンク先のサイトに移動し、右上隅にある小さなトグルをクリックします(最初にページに移動したときに、おそらくOffと表示されています)。拡張機能をダウンロードしてインストールすることを確認するように求められます。
インストールが完了すると、通常の再起動と同様に、[システム]メニューを開いて電源ボタンをクリックできます。シャットダウンまたは再起動することを確認するポップアップウィンドウに、「Restart to ...」というラベルの付いたボタンがあります。そのボタンをクリックすると、grubメニューの項目がリストに表示され、再起動後に自動的に起動するOSを選択できます。これらの項目のいずれかを選択すると、システムはシャットダウンし、選択したGRUBオプションを使用して再起動します。
@ jw013に同意します。また、メニュータイルをgrub-rebootに与えることもできます(親メニューのタイトルを含む)。例えば:
$ Sudo grub-reboot "Advanced options for Ubuntu>Ubuntu, with Linux 4.13.0-26-generic"
$ Sudo reboot
「Ubuntuの詳細オプション」が親メニューの場合、「Ubuntu、with Linux 4.13.0-26-generic」がサブメニューです。
私はUbuntu 16.04を使用していますが、上記の解決策が機能しませんでした...何らかの理由で、Sudo grub-reboot 2
を/boot/grub/grubenv
とGRUB_DEFAULT=0
の両方でGRUB_DEFAULT=saved
から/etc/default/grub
に変更した後でも、/boot/grub/menu.lst
がsavedefault --default=2 --once
ファイルを更新しないようです。 grubでSudo grub-editenv - set next_entry=2
reboot
コマンドを使用しても、grubenvファイルが機能せず、変更もされませんでした。何も行われなかったかのように、元のgrubメニューに戻ってきました。
だから私はそれを手動でやるようになり、それはうまくいきました(しかし、それがRAIDドライブでどのように動くかはわかりません)。
__コード__
2は、grubスタートアップメニューのWindowsエントリのゼロベースのメニューエントリの場所です。
これが機能する理由は、/boot/grub/grub.cfg
ファイルを見るとわかります。これは、next_entry値を使用し、次回の起動のためにリセットするためです。
私はgrubonce
と呼ばれるスクリプトが付属しているopenSUSEを使用しています。
# 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
他のどのディストリビューションがこのスクリプトを配布しているのかわからないので、ディストリビューションにない場合は、このページをチェックしてください。
grub-set-default
の方が利用しやすいようです(grubonce
はUbuntuの「バース」にリストされていません)。 Windows 7は、最後のシャットダウン時に更新が適用された場合(つまり、起動を開始し、一部の更新データを処理し、再起動して、ログインページを表示する)、起動中に再起動を実行する癖があるため、さらに役立つ場合があります。
私はしばしばWindows 7を起動して、Ubuntuが動作していることを確認して戻ってきました。
Fedoraでは、次のスクリプトを使用できます。これは https://askubuntu.com/a/18186/149422 で説明されているものとほとんど同じですが、 FedoraのGRUB 2 にいくつかの変更を加えています。
#!/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
マシンを特定のブートターゲット(Grubエントリ)で再起動します。
ブートターゲットは、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