前回、インストーラの更新に合わせて起動時のgrubのメニュー画面を一新したことを紹介しました。その際grubのテーマについて調べてみたところ、作成済みのテーマやそれらを適用する方法に関する解説はたくさんあるものの、テーマ設定ファイル
加えて、grubのメニュー画面はシステム起動時にしか表示されないので、変更箇所の確認が面倒です。何かいい方法はないかな…… と考えているうち、USBメモリ上のレスキューシステムの応用で、VirtualBoxの仮想マシンとUSBメモリを使ってメニュー画面を簡単に表示する方法を思いつきました。この方法を使えばテーマの設定ファイルの修正も効率よくなります。そのあたりの経験を元に、今回からgrubのテーマで遊ぶ方法を紹介してみましょう。
grub.cfgとtheme.txt
Plamo Linuxの標準的な起動メニュー画面は図1のようになっています。この画面はテーマ機能を使わずgrub.

grubのメニュー画面は
Plamo Linuxの場合、
$ ls /usr/share/grub/themes/starfield/ COPYING.CC-BY-SA-3.0 boot_menu_s.png dejavu_bold_14.pf2 terminal_box_ne.png README boot_menu_se.png slider_c.png terminal_box_nw.png ... boot_menu_nw.png dejavu_16.pf2 terminal_box_n.png
メニュー画面にテーマ設定を適用するにはgrub.
/etc/
$ cat -n /etc/default/grub 1 # Default menu entry 2 GRUB_DEFAULT=0 ... 15 # Distributor 16 GRUB_DISTRIBUTOR="Plamo" ... 24 # GRUB_BACKGROUND="/usr/share/grub/plamo_bg01.png" 25 # GRUB_FONTS="/usr/share/grub/unicode.pf2" 26 GRUB_THEME="/usr/share/grub/themes/starfield/theme.txt"
/etc/
$ sudo grub-mkconfig -o theme_tst.cfg Generating grub configuration file ... テーマを見つけました: /usr/share/grub/themes/starfield/theme.txt Linux イメージを見つけました: /boot/vmlinuz-6.12.21-plamo64 Found initrd image: /boot/initrd.img-6.12.21-plamo64 Warning: os-prober will not be executed to detect other bootable partitions. Systems on them will not be added to the GRUB boot configuration. Check GRUB_DISABLE_OS_PROBER documentation entry. Adding boot menu entry for UEFI Firmware Settings ... 完了
作成されたtheme_
$ sudo cat -n theme_tst.cfg 1 # 2 # DO NOT EDIT THIS FILE 3 # 4 # It is automatically generated by grub-mkconfig using templates 5 # from /etc/grub.d and settings from /etc/default/grub ... 91 insmod gfxmenu 92 loadfont ($root)/usr/share/grub/themes/starfield/dejavu_10.pf2 93 loadfont ($root)/usr/share/grub/themes/starfield/dejavu_12.pf2 94 loadfont ($root)/usr/share/grub/themes/starfield/dejavu_14.pf2 95 loadfont ($root)/usr/share/grub/themes/starfield/dejavu_16.pf2 96 loadfont ($root)/usr/share/grub/themes/starfield/dejavu_bold_14.pf2 97 insmod png 98 set theme=($root)/usr/share/grub/themes/starfield/theme.txt 99 export theme ...
こうして作った新しい設定ファイル
$ sudo mv /boot/efi/grub/grub.cfg{,.org} $ sudo cp ./theme_tst.cfg /boot/efi/grub/grub.cfg
grub.

テーマ画面テスト環境の準備
さて、それではテーマ設定を簡単にテストするための環境を作成しましょう。今回は、
「拡張機能パック
この環境を作るための実際の手順を紹介してみましょう。まずは前回紹介したレスキューシステム
仮想マシンはUEFI経由でgrubを読み込むだけなので、CPU数や仮想HDDのサイズ等を気にする必要はありません。
そして、

設定が終れば仮想マシンを起動します。新規に作成した仮想マシンには起動可能なHDDは存在しないため、上記で指定したUSBメモリが起動デバイスと認識され、レスキューシステムのメニュー画面が表示されるはずです。
新規に仮想マシンを用意するのが面倒な場合、既存の仮想マシンを流用してテストすることもできます。ただし、その場合はインストール済みのHDD上のgrubが優先的に起動されるので、いったんUEFIのメニュー画面に入って

VirtualBoxでは、仮想マシンの電源ONやリセットと同時にESCキーを押すとUEFIのメニュー画面に入れるものの、タイミングを合わせるのは結構難しいので、いったんHDD上のgrubのメニュー画面を出し、
theme.txtの更新
さて、前節の設定でOS無しの仮想マシンからUSBメモリ上のgrubメニュー画面を表示できるようになったので、次にtheme.
本来、grubテーマを変更する場合、利用する画像やフォント一式を用意しないといけませんが、今回試している"starfield"サンプルテーマはレスキューシステムにもそのまま入っているので流用できます。
$ ls /run/media/kojima/11B4-4E49/ # USBメモリのルートパーティション EFI/ Plamo8_USBboot_img.zip boot/ grub/ $ ls /run/media/kojima/11B4-4E49/grub/ fonts/ grub.cfg grubenv locale/ themes/ x86_64-efi/ $ ls /run/media/kojima/11B4-4E49/grub/themes plamo_bg01.png starfield/ theme.txt
レスキューシステム上でも先に作ったtheme_
$ mv /run/media/kojima/11B4-4E49/grub/grub.cfg{,.org} $ cp theme_tst.cfg /run/media/kojima/11B4-4E49/grub/grub.cfg
実のところ、grub-mkconfigで作ったgrub.

今回はテーマ設定に関する部分が動けばいいので、必要な部分のみを手動で修正することにします。USBメモリから起動した場合、grub的には
$ cat -n /run/media/kojima/11B4-4E49/grub/grub.cfg ... 85 #set root='hd0,gpt3' 86 set root='hd0,msdos1' ... 92 insmod gfxmenu 93 #loadfont ($root)/usr/share/grub/themes/starfield/dejavu_10.pf2 94 #loadfont ($root)/usr/share/grub/themes/starfield/dejavu_12.pf2 95 #loadfont ($root)/usr/share/grub/themes/starfield/dejavu_14.pf2 96 #loadfont ($root)/usr/share/grub/themes/starfield/dejavu_16.pf2 97 #loadfont ($root)/usr/share/grub/themes/starfield/dejavu_bold_14.pf2 98 loadfont ($root)/grub/themes/starfield/dejavu_10.pf2 99 loadfont ($root)/grub/themes/starfield/dejavu_12.pf2 100 loadfont ($root)/grub/themes/starfield/dejavu_14.pf2 101 loadfont ($root)/grub/themes/starfield/dejavu_16.pf2 102 loadfont ($root)/grub/themes/starfield/dejavu_bold_14.pf2 103 insmod png 104 #set theme=($root)/usr/share/grub/themes/starfield/theme.txt 105 set theme=($root)/grub/themes/starfield/theme.txt ...
これでUSBメモリ上のテーマ設定を利用できるようにはなったものの、このままだと先に示した
$ cd /run/media/kojima/11B4-4E49/grub/themes $ ls plamo_bg01.png starfield/ theme.txt $ cp plamo_bg01.png starfield
starfield/
$ cat -n starfield/theme.txt 1 # Default theme for GRUB2 2 # ... 29 #desktop-image: "starfield.png" 30 desktop-image: "plamo_bg01.png" ...
設定編集後、再度VirtualBoxの仮想マシンをUSBメモリから起動すると、Plamoの背景画像とstarfieldテーマが混ったメニュー画面が表示できました。

このメニュー画面はUSBメモリ上のgrub.
実のところ、grubのメニュー画面を着せ替える各種テーマの存在には気づいてはいたものの、メンテナの性か、
しかしながら改めて調べてみると、起動時のわずかな時間しか表示されない画面の装飾用にずいぶん多彩な機能が用意されていることに驚かされました。次回では、そのような開発者のこだわりの一端を紹介してみようと思います。