試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

ヘルパースクリプトを使用した場合のGRUB 2(1.96)の設定方法(背景・色関係)

ヘルパースクリプトを使用した場合のGRUB 2(1.96)の設定方法(全般とカーネル関係)」の続き。ここでは背景画像と画面の色設定についてを扱う。

画面の解像度について

以下の「gfxmode」の後ろの部分を必要に応じて変更する。
ファイル名: /etc/grub.d/00_header

  pc:gfxterm) cat << EOF
set gfxmode=640x480
insmod gfxterm
insmod vbe
EOF

背景画像と色の指定

Debian/Ubuntuでは/etc/grub.d/05_debian_themeファイルの中で、指定された場所からの自動検出・設定が行われる。
Gentooではこのファイルは存在しないため、このDebian版を少しいじったファイルを用意することにした。
ファイル名: /etc/grub.d/05_theme

#! /bin/bash -e

bgfile=/boot/grub/bg.png
color_normal="black/black"
color_highlight="magenta/black"
menu_color_normal="cyan/blue"
menu_color_highlight="white/blue"

prefix=/
exec_prefix=${prefix}
libdir=/lib
platform=pc

# for convert_system_path_to_grub_path()
. ${libdir}/grub/update-grub_lib

set_color_theme()
{
  cat << EOF
set menu_color_normal=${menu_color_normal}
set menu_color_highlight=${menu_color_highlight}
EOF
}

# check for usable backgrounds
use_bg=false
if [ "$GRUB_TERMINAL" = "gfxterm" ] ; then
  for i in ${bgfile} ; do
    if bg=`convert_system_path_to_grub_path $i` ; then
      case ${bg} in
        *.png)		reader=png ;;
        *.tga)		reader=tga ;;
        *.jpg|*.jpeg)	reader=jpeg ;;
      esac
      if test -e /boot/grub/${reader}.mod ; then
        echo "Found background image: `basename ${bg}`" >&2
        use_bg=true
        break
      fi
    fi
  done
fi

# set the background if possible
if ${use_bg} ; then
  cat << EOF
insmod ${reader}
if background_image ${bg} ; then
  set color_normal=${color_normal}
  set color_highlight=${color_highlight}
else
EOF
fi

# otherwise, set the color theme
if ${use_bg} ; then
  set_color_theme | sed -e "s/^/  /g"
  echo "fi"
else
  set_color_theme
fi

環境によっては変数libdirなどを変更する必要があるかもしれない。
使用できる画像形式はPNG/TGA/JPEGだが、その中でもある程度の制約はあるようだ。
http://wiki.debian.org/Grub/grub.cfg.manpage
の「background_image」を参照。

前景色と背景色、透明色

設定項目

色の指定は
http://wiki.debian.org/Grub/grub.cfg.manpage
の「where FB and BG can be one of :」以下の一覧の中から「前景色/背景色」の形式で指定する。
背景画像が使用されているときには

  • color_normal
  • color_highlight

が、背景画像が使用されていないときには

  • menu_color_normal
  • menu_color_highlight

が設定・使用されるようになっている。

背景画像使用時の透明色

背景画像が使用されているときの背景色を「black」にすると背景が透明になる。逆に言えば、背景画像使用時に「black」でない背景色を指定すると、背景が見えなくなる。選択項目(color_highlight)ではそのほうが目立つのでよいのだが、color_normalで「black」以外の背景色指定をするのはおすすめできない。

上の画像は

set color_normal=black/brown
set color_highlight=white/dark-gray

で設定したもの(背景画像がほとんど見えない)。これを

set color_normal=black/black
set color_highlight=white/dark-gray

にすると下のようになる。

Debian/Ubuntuでの背景画像の設定

Debian/Ubuntuで背景画像を変更するには、/etc/grub.d/05_debian_theme内の

/usr/share/images/desktop-base/debian-blueish-wallpaper-640x480.{png,tga}

の部分を、使用したいファイルの場所に置き換える。*1ここに書かれているファイルは、Debian/Ubuntuの「desktop-base」というパッケージに含まれるもの。上の画像の背景がその画像。
ここでは、試しに、Ubuntu Hardy(8.04)のデスクトップ背景画像を800x600に縮小したものを使用して、解像度も800x600にしてみた。

この画像の色設定は以下。

set color_normal=light-cyan/black
set color_highlight=light-green/black

背景画像は、色(色相)や明るさ(明度)をよく見て選ばないと、字が読みにくくなる。今回の画像は縦方向に明るさが変化していることもあり、文字を乗せる背景としては向いていないのかもしれない。

背景画像を使用しない場合、メニュー内の色が付けられるのだが、color_normalの指定を追加*2することで、画面全体の背景色を付ける(黒から変更する)こともできる。

この画像の設定は

set color_normal=dark-gray/white
set menu_color_normal=black/light-gray
set menu_color_highlight=black/yellow

となっていて、画面の背景色を白にしている。

(「ヘルパースクリプトを使用した場合のGRUB 2(1.96)の設定方法(他のOSの起動、電源オフなど)」に続く)

関連記事:

使用したバージョン:

*1:背景画像を切りたい場合は、ファイルが存在しない場所を指定する

*2:先に扱った/etc/grub.d/以下のファイルの中の該当部分に追加