grub2-menu-f20
update 2014-01-13

環境
fedora20

レガシーメニュー(テキスト表示)
基本設定ファイル(/etc/default/grub)に背景画像やグラフィカルメニューの指定が無い場合はテキスト表示となる。
console.png

レガシーメニュー(背景画像)
基本設定ファイルで背景画像やフォントを設定する。
background.png

グラフィカルメニュー
基本設定ファイルの GRUB_THEME= にて指定したテーマ(theme.txt) でグラフィカルメニューを表示する。
graphical.png

/etc/default/grub ファイル
/etc/default/grubファイルで基本的な項目を設定する。
default.png

grub2-mkconfig 実行時にincludeされ、/boot/grub2/grub.cfg に反映される。
参照マニュアル:http://www.gnu.org/software/grub/manual/grub.html#Simple-configuration

例:/etc/default/grubファイル
GRUB_TIMEOUT=none
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
#GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.font=latarcyrheb-sun16 $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/rhcrashkernel-param || :) rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
# 背景画像
GRUB_TERMINAL_OUTPUT=gfxterm
GRUB_GFXMODE=640x480
GRUB_BACKGROUND=/boot/grub2/themes/fedora/default_blue.jpg
GRUB_FONT=/boot/grub2/fonts/unicode.pf2
#GRUB_FONT=/boot/grub2/fonts/DejaVuSans18.pf2
# グラフィカルメニュー
GRUB_THEME=/boot/grub2/themes/fedora/theme.txt
※GRUB_FONT= で指定したフォントがデフォルトとして反映されるが、 GRUB_THEME= を指定すると theme.txt 内で指定しているフォントが適用される

/boot/grub2/grub.cfg の作成

grub_cfg.png

grub.cfg ファイルは grub2-mkconfig コマンドを使用して作成する。
grub2-mkconfigを実行すると次のファイルがincludeされてgrub.cfgに反映される。
  /etc/default/grub
  /etc/grub.d フォルダ内に有る実行可能な設定ファイル
grub2-mkconfig オプション無しで実行すると処理結果は画面に表示されるので確認用として使うことができる。
grub2-mkconfig -o /boot/grub2/grub.cfg でファイルに出力する。

unicode.pf2 フォントファイル
デフォルトで /boot/grub2/fonts フォルダに作成されている。
※unicode.pf2を使用しないで任意のフォント(例えば DejaVuSans18.pf2 など・・・ )を使用することができる。
unicode.png
※ 各種のフォントファイル作成例については「参考:3」grub2-mkfontの使用例を参照。


レガシーメニューへのフォント反映


1. 任意のフォントファイルを作成する。
※ ここでは DejaVuSans.ttf より DejaVuSans18.pf2 を作成するものとする。
grub2-mkfont --verbose --size=18 --output=/boot/grub2/fonts/DejaVuSans18.pf2 /usr/share/fonts/dejavu/DejaVuSans.ttf
--verbose を指定して作成するとフォント名:DejaVu Sans Regular 18 が表示されるので、フォント名を指定する用途に使用できる。

2. 基本設定ファイル(/etc/default/grub)にフォントファイル名を記述する。
GRUB_FONT=/boot/grub2/fonts/DejaVuSans18.pf2

3. カスタム設定ファイル(/etc/grub.d/40_custom)に loadfont を記述して、grub2起動時に load するようにする。
ただし、すでに /etc/default/grubファイルで GRUB_FONT=/boot/grub2/fonts/DejaVuSans18.pf2 のように指定している場合は、loadfont しなくてもいい。
留意事項
/etc/grub.d/40_customでのPath指定は先頭の /boot は不要なので /grubから指定する
loadfont /grub2/fonts/DejaVuSans18.pf2
/bootは grub.cfg 内で rootとして定義済みなので /boot/grub2/fonts/DejaVuSans18.pf2 のように指定すると /boot が余計なので正しく反映されなくなる。

4.grub2-mkconfig で設定を反映させる。
grub2-mkconfig -o /boot/grub2/grub.cfg


グラフィカル メニューの作成

1. /etc/default/grubファイルにグラフィカルメニューのテーマを記述した theme.txt を使用することを記述する。
GRUB_THEME=/boot/grub2/themes/fedora/theme.txt

2. テーマ作成に必要な環境作成
/boot/grub2フォルダに次のようなフォルダを作成する。
grub2-folder.png

(1)/boot/grub2/fonts フォルダを作成し、使用したいpf2 フォントファイルを置いておく。
※ pf2フォントファイルを作成する各種の ttfフォントは /usr/share/fontsフォルダに在る。
fontを使用する場合は loadfont コマンドでフォントファイル(たとえば /boot/grub2/fonts/DejaVuSans18.pf2 )を load して使用する。
/etc/grub.d/40_custom ファイルにて指定する場合は次のようになる。( /boot を付けないことに留意する)
loadfont /grub2/fonts/DejaVuSans18.pf2
loadfont /grub2/fonts/DejaVuSans-Bold18.pf2
loadfont /grub2/fonts/DejaVuSans-BoldOblique18.pf2

(2)/boot/grub2/images フォルダを作成し、背景画像やメニュー枠のデザインに使用する イメージファイルを置いておく。

(3)/boot/grub2/themes フォルダを作成し、メニューテーマの各種設定ファイルを置いておく。
このフォルダ内のtheme.txtでグラフィカルメニューの配置などを定義する。

たとえば /boot/grub2/themes/fedora フォルダを作成し、下記のようなメニューテーマの設定ファイルを置いておく。

設定ファイルには次のファイルがある。

(1) theme.txt (GRUB gfxmenuの設定ファイル)
※theme.txtのサンプルは後述の「theme.txt ファイルのサンプル」参照。
theme_txt.png

(2) デスクトップ画面の背景
desktop-image.png

(3) menubox(メニュー表示枠)としての9分割の画像
menubox.png

(4) select(メニューアイテム選択枠)としての9分割の画像
select.png

(5) /boot/grub2/themes/fedora/icons フォルダを作成しメニューに表示するicon用の xxx.png ファイルを置いておく。
icons.png

3. theme.txtファイルにグラフィカルメニューのデザインを設定する。
※参照マニュアル:http://www.gnu.org/software/grub/manual/grub.html#Theme-file-format

theme.txt ファイルのサンプル
ここでは boot_menu セクションのみの設定例を示す。
/boot/grub2/themes/fedora/theme.txt
theme.txtでのフォントは grub2-mkfont で作成した際の「フォント名」で指定する。(ファイル名 pf2ではない)
theme.txtで指定したフォントにエラーがある場合は、/etc/default/grubファイルの GRUB_FONT= で指定したデフォルトのフォントが適用される。
# GRUB gfxmenu theme "fedora"
# Designed for 640x480 resolution

title-text: ""
title-font: "DejaVu Sans Bold 18"
title-color: "salmon"
message-font: "DejaVu Sans Bold 10"
message-color: "white"
message-bg-color: "black"
desktop-image: "default_blue.jpg"
terminal-box: "select_blue_*.png"

+ boot_menu {
   left = 50
   width = 540
   top = 100
   height = 280
   item_font = "DejaVu Sans Regular 18"
   selected_item_font = "DejaVu Sans Bold Italic 18"
   item_color = "linen"
   selected_item_color = "orange"
   menu_pixmap_style = "menubox_*.png"
   selected_item_pixmap_style = "select_blue_*.png"
   icon_width = 32
   icon_height = 32
   item_height = 32
   item_padding = 0
   item_icon_space = 3
   item_spacing = 10
   max_items_shown = 7
}

4. テーマ作成に必要な環境が完成したらgrub2-mkconfigコマンドで設定ファイル(grub.cfg)を作成する。



参考:1
項目
fedora16
fedora15までのgrub2情報
設定ファイル
/boot/grub2/grub.cfgファイル
/boot/grub/grub.cfgファイル
基本設定ファイル /etc/default/grubファイル
/usr/local/etc/default/grubファイル
メニュー設定用ファイル
/etc/grub.dフォルダ内に置く
/usr/local/etc/grub.d フォルダ内に置く
フォント作成 コマンド
grub2-mkfont
grub-mkfont
grub.cfg作成 コマンド
grub2-mkconfig grub-mkconfig
インストール コマンド
grub2-install
バージョン確認は grub2-install -v
grub-install
バージョン確認は grub-install -v
※fedora15までのgrub2については http://ftlabo.sakura.ne.jp/linux/grub2/grub2.html 参照。

参考:2
メニュー項目(エントリ)の追加
fedoraが認識したデバイスのbootについては grub2-mkconfig コマンドで自動作成してくれるので、手作業で記述する必要は無い。
あえて記述する場合は /etc/grub.d/40_customファイルに記述する。
grub_d.png

/etc/grub.d/40_customファイルの設定例
--class windows、--class redo、--class exitなどの指定はiconを表示する指定なので
/boot/grub2/themes/fedora/icons ディレクトリ内のアイコン(xxx.png)に対応するファイル名(xxx)を記述しておく。
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
#
# フォントファイルのPathの先頭の /boot はカットして指定する。
loadfont /grub2/fonts/DejaVuSans18.pf2
loadfont /grub2/fonts/DejaVuSans-Bold18.pf2
loadfont /grub2/fonts/DejaVuSans-BoldOblique18.pf2
#
menuentry "Windows8" --class w8-48 {
    insmod chain
    set root=(hd0,1)
    chainloader +1
}
menuentry "reboot" --class redo {
    echo "System rebooting..."
    reboot
}

menuentry "halt" --class exit {
    echo "System shutting down..."
    halt
}

# 1台目のhddのパーティション1にWindowsがある場合はremappingは不要。
# この記述例ではWindows8 ブートローダー(bootmgr)が起動する。
menuentry "Windows 8" --class windows {
    insmod chain
    set root=(hd0,1)
    chainloader +1
}

# 2台目のhddのパーティション1にWindowsがある場合はremappingをおこなう。
menuentry "Windows 8" --class windows {
    insmod chain
    set root=(hd1,1)
    drivemap -s hd0 hd1
    chainloader +1
}

# WindowsのMBRが設定されているデバイスの場合はパーティション番号は省略できる。remappingも不要。
menuentry "Windows 8" --class windows {
    insmod chain
    set root=(hd1)
    chainloader +1
}

# メモリーテスト
# memtest86+ のzipファイルをダウンロードして展開して memtest.bin を /boot/memtest86plus フォルダに置く。
menuentry "Memtest86+" --class memtest {
    insmod bsd
    linux16 /boot/memtest86plus/memtest.bin
}

例:レガシーメニューの背景画像を反映させる
/etc/grub.d/40_customファイルに追記しておけばメニューのテキストカラーを設定できる。
if文の判定に使うbackground_imageは/etc/default/grubファイルで指定してある背景画像に合わせておくこと。
if background_image /usr/share/backgrounds/tiles/default_blue.jpg ; then
set color_normal=white/black
set color_highlight=magenta/black
else
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
fi

参考:3

grub2-mkfontの使用例
構文は grub2-mkfont [OPTIONS] FONT_FILES
※詳しくはヘルプ参照

例1:DejaVuSans.ttfからfontを作成

/usr/share/fonts/dejavu/DejaVuSans.ttf、dejavu/DejaVuSans-Bold.ttf、DejaVuSans-BoldOblique.ttf ファイルからサイズ、ファイル名を指定してfontファイルを作成する。
出力先は/boot/grub2/fontsフォルダとする。
--verbose を指定すると、下記のような「フォント名」が表示される。
レギュラーフォント
grub2-mkfont /usr/share/fonts/dejavu/DejaVuSans.ttf --verbose --size=18 --output /boot/grub2/fonts/DejaVuSans18.pf2
フォント名:DejaVu Sans Regular 18
太字フォント
grub2-mkfont /usr/share/fonts/dejavu/DejaVuSans-Bold.ttf --verbose --size=18 --output /boot/grub2/fonts/DejaVuSans-Bold18.pf2
フォント名:DejaVu Sans Bold 18
太字イタリックフォント
grub2-mkfont /usr/share/fonts/dejavu/DejaVuSans-BoldOblique.ttf --verbose --size=18 --output /boot/grub2/fonts/DejaVuSans-BoldOblique18.pf2
フォント名:DejaVu Sans Bold Italic 18

※アスキー文字指定は --range=0x0-0x7F を付ける。
grub2-mkfont /usr/share/fonts/dejavu/DejaVuSans.ttf --verbose --range=0x0-0x7F --size=18 --output /boot/grub2/fonts/DejaVuSans18.pf2

例2:ダウンロードした ipagp.ttf ファイルからfontを作成

grub2-mkfont --verbose --range=0x0-0x7F --size=10 --output=/boot/grub2/ipagp-10.pf2 /root/ipagp.ttf
Font name: IPAPGothic Regular 10

grub2-mkfont --verbose --range=0x0-0x7F --size=18 --bold --output=/boot/grub2/fonts/ipagp-18-bold.pf2 /sda2/ipa-font/ipagp.ttf
Font name: IPAPGothic Bold 18

参考:4
日本語表示
japanese-menu.png

日本語表示にするには次のようにする。
(1) 日本語を表示できるフォントファイルを作成する。
たとえば VL-Gothic-Regular.ttf から VLGothic18.pf2 ファイルを作成するものとする。
grub2-mkfont /usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf --verbose --size=18 --output /boot/grub2/fonts/VLGothic18.pf2
Font name: VL Gothic Regular 18
(2) 作成したフォントファイルを loadfont にて load しておく。
/etc/grub.d/40_custom ファイルにloadfontを追加する。
loadfont /grub2/fonts/VLGothic18.pf2
(3) menuentry や theme.txt の中の文字列を日本語で記述する。
※ 日本語を表示できるフォントファイルを loadfont で取り込んでおけば、theme.txt や menuentry でフォント名を指定しなくても日本語表示部分を自動的に変換してくれる。
(4) grub.cfg に反映させる。( grub2-mkconfig -o /boot/grub2/grub.cfg )

end of list