How to skip GRUB boot menu
LinuxのブートローダーであるGRUBの起動画面をスキップする方法を記す。
結論としては,/etc/default/grub
のパラメーターを以下のとおりに変更すれば実現できる。
# GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=0
Introduction
PCの電源を入れると,ブートローダーと呼ばれるプログラムがメモリに読み込まれる。このブートローダーがさらに別のプログラムを呼ぶことを繰り返して最終的にOSがメモリに読み込まれPCの起動が完了する。
GNU GRUB(GRand Unified Bootloader)はこのブートローダーの自由なソフトであり,Linux OSで採用されているブートローダーだ。
PCを起動すると,以下のどのOSで起動するかのGRUBの選択画面が表示されることがある。
マシンのトラブルなどで古いバージョンのOSで起動する必要があるなど,いつもと違うOSを選択する場合はありえる。しかし,普段はOSの選択をする必要はなく,このGRUBの画面は省略したい。
そこで,このGRUBのメニューをスキップする方法を調べた。なお,Ubuntu 16.04のGRUB 2.02-beta2で動作を確認した。
設定
インターネットでざっと調べてみると,どうやら/etc/default/grub
ファイルにかかれている以下のパラメーターを設定を変更すれば実現できそうというのがわかった。
- GRUB_TIMEOUT
- GRUB_HIDDEN_TIMEOUT
ただ,ネットの情報は古かったり間違っていることがよくある。そこで,GRUBの公式マニュアルを確認した。なお,GNUのソフトはinfoコマンドでもマニュアルを確認できる。例えば,以下のコマンドで閲覧できる。
info grub
このマニュアルの「5.1 Simple configuration handling」にパラメーターの説明が書かれている。ここから,GRUB_TIMEOUTとGRUB_HIDDEN_TIMEOUTの説明をまとめると以下の表のとおりとなる。
変数 | 説明 |
---|---|
GRUB_TIMEOUT | メニューが表示されてからデフォルト項目の起動までの待ち時間 |
GRUB_HIDDEN_TIMEOUT | メニューに入るためのキー入力の受け付け時間 |
GRUB_HIDDEN_TIMEOUTが少しわかりにくいので補足する。PCの起動直後にF2やF8キーを押下すれば,ユーザーが自分でGRUBの画面を表示させることができる。このキーの入力受付時間がGRUB_HIDDEN_TIMEOUTと考えればよいだろう。
また,マニュアルのGRUB_HIDDEN_TIMEOUTの説明を読むとGRUB_TIMEOUTとGRUB_HIDDEN_TIMEOUTのどちらを設定すればよいかはっきりする。
ここで書かれている通り,画面表示を飛ばしたければ,GRUB_TIMEOUT=0
と設定すればよいことがわかる。
設定変更
設定すべき項目が分かったので,設定ファイル/etc/default/grub
を修正する。
以下のコマンドで設定を変更して,GRUBの設定を更新する。
sudo sed -i 's/^\(GRUB_TIMEOUT=\)[0-9]\+/\10/' /etc/default/grub
sudo sed -i 's/^\(GRUB_HIDDEN_TIMEOUT=.*\)/# \1/' /etc/default/grub
sudo update-grub
上記コマンドでは,以下のようにGRUB_TIMEOUTを0に設定して,GRUB_HIDDEN_TIMEOUTをコメントアウトしている。もちろんテキストエディタで編集してもよい。GRUB_HIDDEN_TIMEOUTをコメントアウトした理由は次の節で説明する。
# GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=0
これで設定は完了した。
起動が早くなったかどうか気になったので,実際に起動時間を測って確認した。
- GRUB_TIMEOUT=0:1.25 min
- GRUB_TIMEOUT=10で即選択:1.25 min
起動画面が表示されて即選択した場合と,起動時間が変わっていないので成功している。
GRUB_HIDDEN_TIMEOUTをコメントアウトした理由
当初はGRUB_HIDDEN_TIMEOUTはコメントアウトしていなかったのだが,update-grub
の実行後に以下のメッセージが表示されてしまったからだ。
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
日本語訳:GRUB_HIDDEN_TIMEOUTが設定されている時に,GRUB_TIMEOUTを非0の値に設定することは,もはや対応されない。
この件について調べると,どうやらGRUB_HIDDEN_TIMEOUTの設定は廃止予定事項のようで,GRUB_HIDDEN_TIMEOUTはコメントアウトしたほうがいいらしい。
公式マニュアルに書かれていなかったので疑問に思ってさらに調べた。使っているGRUBが2.02-beta2だけど,参照していたマニュアルが2.00だったので,マニュアルに更新があったのかもしれないと思い,最新ソースをあたった。最新ソースのマニュアルの元ファイルは以下となっている。
この確認してみたところ,2013-11-28のこのコミットで廃止予定であることが付け加えられたようだ。リリース版としては,2.02-beta1から,この変更が入っている。
まとめと標準の/etc/default/grub
/etc/default/grub
の以下の2パラメーターを変更することで,GRUBの起動が画面を省略できるようになった。
# GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=0
これでPCの起動速度が早くなったので,PC作業が少し快適になっただろう。最後に,設定を間違えてしまったときのために,標準の/etc/default/grub
を掲載する。