Raspberry Pi 5のブート画面をカスタマイズする方法

多くのRaspberry Piユーザーは、カーネルログやシステムメッセージが長々と表示されるブート画面ではなく、クリーンでプロフェッショナルな起動体験を望んでいます。

コミュニティではfbi(フレームバッファ画像ビューア)がよく推奨されますが、根本的な制限があります。フレームバッファデバイス/dev/fb0はシステムサービスが開始する前には利用できないため、ブートプロセスの早い段階で画像を表示することができません。

このガイドでは、Plymouthを使用して、ブートの初期段階からカスタムスプラッシュスクリーンを表示する信頼性の高い方法を紹介します。


フェーズ1:カーネル出力の非表示化

ブート中にカーネルログが画面上にスクロールされると、カスタムスプラッシュの表示を妨げます。

以下のパラメータをブートコマンドラインに追加してください:

sudo sed -i '$s/$/ logo.nologo quiet loglevel=0/' /boot/firmware/cmdline.txt

各パラメータの説明:

  • logo.nologo
    左上隅のRaspberry Piロゴ(またはディストリビューションのロゴ)を削除します。

  • quiet
    カーネル出力の量を減らします。

  • loglevel=0
    致命的なエラーメッセージのみを表示し、カーネルの出力をほぼ完全に抑制します。

:warning: 重要:

cmdline.txtは、スペースで区切られたパラメータを持つ1行のテキストファイルでなければなりません。フォーマットが誤っていると、システムが起動できなくなる可能性があります。


点滅カーソルの非表示化

カーネル出力を抑えた後でも、一部のシステムでは点滅する端末カーソルが表示されることがあります。

同じ行の末尾に以下のパラメータを追加してください:

vt.global_cursor_default=0

フェーズ2:ブート用リソースの準備

画像の最適化

推奨仕様:

  • 形式: PNGまたはJPG(透過が必要ならPNG推奨)
  • 解像度: 最大1920×1080
  • カラーパレット: 224色以下(読み込み速度向上に寄与)
  • ファイル名: splash.png

以下の場所に画像を配置してください:

/boot/splash.png

この場所であれば、カーネルが早期ブート中にアクセスできます。


ディスプレイドライバー設定の確認

以下のファイルで、正しいディスプレイドライバーが有効になっていることを確認してください:

/boot/firmware/config.txt

例:

dtparam=vc4-kms-v3d

HDMIの再初期化を引き起こす可能性のあるパラメータ(例:以下)は避けてください:

hdmi_force_hotplug=1

フェーズ3:Plymouthテーマシステムの導入

1. 必要なパッケージのインストール

sudo apt update
sudo apt install plymouth plymouth-themes -y

2. 最小限のテーマ作成

テーマ用ディレクトリを作成:

sudo mkdir -p /usr/share/plymouth/themes/silent

テーマ設定ファイルを作成:

/usr/share/plymouth/themes/silent/silent.plymouth
[Plymouth Theme]
Name=silent
Description=静的スプラッシュスクリーン
ModuleName=script

[script]
ImageDir=/usr/share/plymouth/themes/silent
ScriptFile=/usr/share/plymouth/themes/silent/silent.script

3. 描画スクリプトの作成

以下のファイルを作成:

/usr/share/plymouth/themes/silent/silent.script
wallpaper_image = Image("splash.png");
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
wallpaper_sprite = Sprite(wallpaper_image);
wallpaper_sprite.SetPosition(0, 0, -100);

スクリプトの処理内容:

  • 事前に用意したブート画像を読み込む
  • 現在のディスプレイ解像度を取得
  • 全画面サイズのスプライトオブジェクトを作成
  • 画像が最下層になるようにレイヤー順序を設定

4. リソースの配置とテーマの有効化

画像をコピー:

sudo cp /boot/splash.png /usr/share/plymouth/themes/silent/

テーマを有効化:

sudo plymouth-set-default-theme -R silent

重要な注意点:

-Rオプションはテーマの設定だけでなく、以下のコマンドも実行します:

update-initramfs -u

これによりテーマがinitramfsに組み込まれ、Plymouthがカーネルの初期ブート段階からスプラッシュスクリーンを表示できるようになります。


技術的な解説

Raspberry Pi 5のブートシーケンス

Raspberry Pi 5のブートプロセスは、以前のモデルとは大きく異なります。

  1. ファームウェア段階
    PCIeやHDMIなどのハードウェアを初期化。

  2. systemd-boot段階
    カーネルとinitramfsを読み込む。

  3. 基本システム段階 (basic.target)
    フレームバッファデバイスが完全に利用可能になる。

これがfbi方式が失敗する理由です。fbiはシステムサービスとして起動しますが、その時点ではフレームバッファがまだ準備できていない可能性があります。一方、Plymouthはブートプロセスのより早い段階で動作します。


ビジュアルレイヤーの制御

スクリプト内の以下のコード:

SetPosition(0, 0, -100)

負のZ軸値により、画像が最下層に配置されます。これにより、後のUI要素が画像を覆うことが防がれます。

このレイヤー制御は、クリーンなスプラッシュスクリーンを実現するために不可欠です。


確認とテスト

システムを再起動:

sudo sync
sudo reboot

期待される結果:

  • :white_check_mark: 虹色のブート画面(rainbow boot square)が表示されない
  • :white_check_mark: カーネルログが出力されない
  • :white_check_mark: 点滅カーソルが表示されない
  • :white_check_mark: ブート全体を通してカスタム画像が表示される

ファームウェア段階で文字が残る場合、これはstart.elfからの出力です。これを削除するにはブートローダーロゴリソースの置き換えが必要ですが、より深い修正を伴います。


:white_check_mark: この設定を完了すると、電源投入直後からRaspberry Piが完全にカスタマイズされたスプラッシュスクリーンを表示するようになり、洗練されたプロフェッショナルな起動体験が得られます。