Grub2をめぐるあれこれ。テーマ、背景、フォント。それが Cute Grub 計画

No Copyright Girl ノーコピーライトガール
No Copyright Girl /ノーコピーライトガール

Grubと戯れるという意味のない日常:: Cute Grub 計画

コンピューターの電源オン後、OS オペレーティングシステムを起動するためのブートローダーが先ず動きだす――ほぼすべてのLinuxディストリビューションにはGRUB(GRand Unified Bootloader)というブートローダで起動します。GNUのプロダクトになります。

誤解されやすいのですがGrubはLinuxを起動するためだけのものではなく、Windowsも起動できます。 汎用の非常に高機能なブートローダーです。

SSDに複数OSを導入し共存させるためには必須の働き者、ソフトウェアです。とても地味です。地味ゆえにすこしだけプリティにしてあげたいなというのが本稿の狙いです。 

さて、最近急にアクセスが増えだした記事です。
おそらく4Kモニターを導入してGrubメニューの文字が小さすぎるから、ここにたどり着いているのはないかと推察しています。
もし、そうならあまりおすすめはしませんが、grub-customizer がカンタンでよろしいかと思います。4K用にはどうしたらいいのかなど含め近いうちに別稿にします。

地味でよければ、この記事は不必要。だけど間違うと起動不能になります。

さて、話は戻って、だらだら、とLinux運用上、[不必要なこと]を述べていきます。まず、Debian/ubuntuなどのデフォルトブートメニューの「四角の罫を抜きたい」、そう思い立ちました。最初は些細な動機だったのです。


とても素敵なイラスト、ノーコピーライトガールさんの絵を使わせてもらってイメージを作ります。だいたいこんな風になるというのを示します。著作者:NCG @nocopyrightgirl
実際には、この女の子が不在のイメージ絵をOS選択メニューには表示しています。もったいなくないかですか。そこはもう何年も使っているのにブログにもかかない秘密の技を提示しないとご理解いただけないかもしれません。偶然発見したのです。3年前のことです。

これについては別稿にします。今日でお盆休みも終わりました。時間がなくなりました。今日から新しい日常です。



こういう風に、素朴にしたかっただけなんですが、シンプルな方法に至るまでが思いの外めんどくさかったという記録です。わかってしまえば簡単でした。現在はこのように表示されます。

手抜きなので、実際のブートメニューの絵ではありませんが、こんなかんじです。

下にヘルプ。自作テーマを利用すれば絵の中心オブジェクト(たとえば人物)の位置に応じて、メニュー位置(文字)を調整したりができるようになります。

当方は壁紙は原則使わない #000233 な生活25年ですが、ブートメニューの一瞬だけはまぁまぁ印象的にしたい派です。

枠線がはいらないのでシンプルで、地のイラストが引き立つというのがミソです。また可能な限りシステムファイルをいじらないのでカスタマイズに起因するgrubの不調可能性を極力排除します。

検証の記録 :: Cute Grub を意識していなかった初期

14.04LTS及び16.04LTSで検証開始。その後18.04LTS,20.04LTS, Manjaro,antegosでも問題なし。


昨日失敗して気を取り直して、Grubが生成に使うもとになるフォントを再生成しました。今日は、14.04LTSです。うまく行きました。フォント名を間違えていたのかもしれないですね。ともかく、狙いどおりです。目標は、

  • 基本的に、/etc配下のファイルは可能な限り書き換えない。
  • できれば自作テーマも使いたくない。
  • デフォルト表示から文字だけのシンプルなものに。罫線消したい
  • 日本語の文字列表示も化けさせたくない。
  • 日本語の文字の表示間隔もずらしたくない。適正なものに。
  • 背景画像は自由に設定するので、置き場所は、/home配下に。
です。これらの条件は、すべてクリアできました。今日は目視しつつ作業。

ただ新たな問題がひとつ。空グリフになっただけなのでレイアウトは変わらないと思ったのですが何か微妙に、ほんと微妙に変わっている気がする。気のせいかも。

結果、ほぼ、理想的なブートメニュー及びその更新環境が完成しました。 メンテナー提供ファイルが変わっても基本的に常にそれを受け入れてもだいじょうぶ。あまり凝ったことをしても仕方ない。管理がめんどうになるだけです。

特に、moebuntuな方々におすすめします。debian系のデフォルトから罫線抜いたほうが、絵が引き立つと思いませんか。

キャプチャイメージは、 これです。

背景画像のフォーマット種類と色数など

3年前(2013年)は覚えていませんが、現在Grub2はメジャーフォーマットにはフルに対応している気がします。表示できなかった絵はありません。といっても、GIMPで通常オプションで出力したフォーマットのみしか使っていませんが。それで間に合うので自分の中ではフルです。

Grub に扱わせる画像フォーマットは png が最適

トラブルフリーなので png で揃えましょう。jpgではエラーが生じる。

サイズは、10MBを超えていても特に問題なし。習慣的には256色に減色したりもしますが、現代では意味ないですね。たぶん。 GIMPでPNGってのが最近のお決まりの生成コースです。
だいたいFHD全色で2MB程度。10MBというのは、4K用に作成したものでチート(システムリクエストでリブートする手順のメモ行とか、SOS時に思い出したいメモなど)を書き込んだ「絵」です。
その絵を表示させることで知らないうちに刷り込むというわけで。わはは。

Grub用フォントを生成するための予備的考察

まず、Grub用フォントをアンダーコントロールに。Grub用フォントから生成しはじめます。
新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T

サンプル=UbuntuMonoからサイズ24のフォントを作る場合
grub-mkfont --verbose --range=0x0-0x7f --size=24 --output=./ubuntumono-b24.pf2 /usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-B.ttf

ubuntu/mintなら、フォントの配置、フォント名がこれで合致しますので、
たとえば、デスクトップでこのコマンドを発行すると、

ubuntumono-b24.pf2

という、Grub用フォントができます。指定しているオリジナルはおおざっぱにいえば日本語部分を含んでいないフォントです。いい忘れましたが、GrubのフォントはTTFやOTFではないのです。それが前提になります。

上記コマンドを発行する上でのポイント、方針は、

  • アスキー文字だけにして、それ以外は空にします。結果、罫線が化けないし、既存テーマのままでよい。半分嘘です。この作戦はフォントサイズを選ぶ上、ロケールが日本語だとうまくないです。結局、自分のウォンツから、この段階でThemeそのものをあらたに作成しました。笑)*1
  • フォントはモノ(MONO)を選んだほううがいいと思います。いわゆる等幅アルファベットです。罫がずれようが何しようが気にならないひとは、いろいろ試してみてください。今、最終的に自分が使っているのは、Takaoから一部グリフを抜いたGrub用に特化したフォントです。日本語も表示できます。
余談:注*1)デフォルトのテーマのメニューエリアがボックスになっていまして、そこが文字罫線だったりしますね。 この存在がばけなくても私の美意識上許せないので消したい。デフォルトはあまり弄りたくない。そこで

  • 既存フォントそのものから、グリフを削除して、それから生成。--->フォント存在しない印がでる
  • 既存フォントそのもののグリフを空白に置き換えて、それから生成。--->これも意図通りにならず。※指定フォント名を間違えていただけで考えた手順に間違えはなかったです。
よって、めんどくさいので、安直にGrub2テーマそのものを作成しました。罫線/Boxの抑止。文字と背景画像のみ。メニュー配置が右側へ65%ふってある、程度です。いうほどわがままさんじゃありません。
Grubをいじって思うことは、gfxmode 24bitだろうがなんだろうが、フォントのレンダリングが汚いことには代わりはないので、こだわっても仕方ないな、ということですかね。4K導入後にgrubのアップデートがあったので都合設定ファイルをいじってみたのですが、超綺麗!! WindowsのブートマネジャーはXGAなんですがGrubでは3840*2160でフォントも十分綺麗です。 Windowsのブートマネージャでも同じだし、「絵」は十分綺麗に表示されるので、ま、いいか。デフォルトでよいならそれが一番です。  いいたいことは、Grubは美しかったです。

テーマ作り終えてから画像検索でググッて気がついたのですが、ディストリビューションによってはデフォルトのブートメニュでお気に入りになりそうなのがありました。そこから流用すれば速かったかも。Fedra系ですが。

また、Gnome-lookあたりのテーマにしても、けっきょくただ背景画像を変えた「だけ」、フォントを変えた「だけ」が「大半」なのでちょっとおもしろくないです。burgなら設定も含め自由度が少し高いので使っていたのですが、実質ディスコンなのであれ。カスタム支援としての、Grub-Customizerは昔はお世話になったけれど、今は不要。むしろないほうがいいかもです。一時よりエラーが減ったもののまだエラーが多いので信頼に欠ける気が若干します。そんなかんじ。仲のいい友達になら、使うな、と助言します。友達以外なら紹介はする、2枚舌。もっともPPAですしね。そのあたり注意が必要です。

Grub用フォント生成::一括の呪文

結論追記:一括の呪文 bash


mkdir fonts4grub  ; cd fonts4grub

for i in {8..144}; do grub-mkfont --verbose --range=0x0-0x7f --size="$i" --output=./ubuntumono-b"$i".pf2 /usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-B.ttf ; done ;

緑のフォントファイル名をお好みに。outputファイル名も適宜。
これを実行すると1秒後ぐらいには137個のgrub用フォントができます。
サイズは8Kモニターでも満足できると思いますが、16K時代に備えて、なんなら512ぐらいまで生成しておくといいかもしれません。必要なものだけ残してあとは捨てればよいです。

このテストファイルで、 3,342,336バイトです。実際にはくみ込んでいません。使わないフォントなので。

長い割り込みでしたが、話はフォント生成にもどります。
テストする場合は、黄色の3箇所だけ書き換えて試してみてください(冒頭に戻る)。この段階ではGrubに組み込むわけではありません。生成だけですからブートしなくなるなんてことはないです。一旦生成したら、あとはお好きなように。著しく小さなサイズのフォントです。アルファベットプラスアルファ以外は表示できないです。逆にみればそれらは空白なのでいいのです。(困ることもあります。)

サイズは、16、20、24と3種類ぐらいあるといいかも。まとめて作っておけばいいので、数字をかえてみるとよいです。そして、

などといいつつ自分用は、これだけ説明的には用意しています。わはは。
ubuntumono-b16.pf2  ubuntumono-b24.pf2 ubuntumono-b30.pf2  ubuntumono-b48.pf2 ubuntumono-b20.pf2  ubuntumono-b26.pf2 ubuntumono-b32.pf2  ubuntumono-b64.pf2
/boot/grub/fonts にでもコピーしておくといいかも。自分はそうしています。パーミッションは644。

実行例 ひとつづつフォント作成する場合

grub-mkfont --verbose --range=0x0-0x7f --size=24 --output=./ubuntumono-b24.pf2 /usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-B.ttf 
Unknown gsub font feature 0x61667263 (afrc)
 
Font name: Ubuntu Mono Bold 24
Max width: 12
Max height: 21
Font ascent: 17
Font descent: 4
Number of glyph: 100



Rescue mode 4Kコンソール文字サイズをなんとかしたい


自分用メモ 割り込み追記:: 4Kコンソール文字をとりあえずなんとかしたいと試行錯誤中。以下は4Kにする以前の例です。その後も調べてないので判明していません。Rescue mode の時だけ字の小ささを痛感するわけで4k/UHDモニターに更新してから4年強経過しますが必要に迫られたのは一度だけでした。すぐに治せたので特に困ってないわけですが。

/etc/default/grub

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT="saved"
#GRUB_HIDDEN_TIMEOUT="0"
GRUB_HIDDEN_TIMEOUT_QUIET="true"
GRUB_TIMEOUT="10"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL="console"

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE="1920x1080x32"

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID="true"

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

GRUB_THEME="/boot/grub/themes/bootfield/theme.txt"
GRUB_SAVEDEFAULT="true"
export GRUB_COLOR_NORMAL="light-gray/black"
export GRUB_COLOR_HIGHLIGHT="red/black"
export GRUB_MENU_PICTURE="/home/ehhen/Pictures/bootwall/abyss.png"
#GRUB_DISABLE_LINUX_RECOVERY="true"
GRUB_GFXPAYLOAD_LINUX="keep"
GRUB_FONT="/boot/grub/unicode.pf2"




Namida Zone :: 神々は細部に宿る――涙とともに、夜な夜なパンをかじった。

Grub2をめぐるあれこれ。テーマ、背景、フォント。それが Cute Grub 計画

No Copyright Girl / ノーコピーライトガール Grubと戯れるという意味のない日常:: Cute Grub 計画 コンピューターの電源オン後、 OS オペレーティングシステムを起動するためのブートローダーが先ず動きだす――ほぼすべてのLinux...