Ubuntu起動画面(splash画面)が崩れてしまうときは

Ubuntuが起動するときには、「Ubuntu」の文字とロゴがしばらくの間表示され、その後ログイン画面、あるいは直接ログインする場合にはデスクトップ画面へ移行する。このシンプルだが美しい画面のことを「スプラッシュ画面」(splash画面)という。

昔のLinuxディストリビューションでは、起動時にはいろいろなサービスが起動する様子が延々と表示されていたので、それに比べるとシンプルで一般向けといえるだろう。さらに、このスプラッシュ画面は、いろいろなアプリのテーマのように着せ替えることもできるので、自分が気に入ったものを利用することも可能だ。

ところが、困ったことにこのsplash画面が非常にみにくいものに変わってしまうことがある。特に、起動時に画像ではなく、文字で「Ubuntu」と表示されるようなケースがある。
これは、ビデオドライバをプロプライエタリなものに変えた場合によく発生する。典型的なのがNvidiaのドライバで、これを利用するとたいてい、文字表示に変わってしまう。
もちろん、文字表示でもUbuntuの利用に実害は発生しないが、せっかく美しいデザインを誇るUbuntuのこと、できればもとの美しいスプラッシュ画面が出てくれるようにしたい。
このようなときに、以下のような方法にすると修復が可能なようである。

以下、Ubuntu 14.04でテストしている。なお、以下編集するファイルはいずれもシステム設定ファイルなので、慎重に編集すること。また、管理者権限でないと書き込みできないので注意する。端末を開き、

sudo gedit /etc/default/grub

のようにするとよいだろう。

<その1>

  1. 最初のUbuntu起動画面(grubの画面。背景が紫色)のところで、「C」を押して起動を止める。
  2. プロンプトが出るので、ここで「vbeinfo」と入力する。
  3. 数多くの解像度の組み合わせが出てくる。例えば「640x480x32」とあれば、640×480ピクセル、32ビット解像度での表示をサポートしているということである。この中から1つを選んで記録しておく。自分のディスプレイの解像度になるべく近いもの、そしてなるべく高い解像度のものを選んでおく。
  4. 「exit」と入力してgrubの起動画面に戻るか、Ctrl+Alt+Delを押して再起動する。
  5. このままコンピュータをブートし終わったら、作業開始である。まず、grubの設定を変更する。/etc/default/grubで、以下のようにある行

    #GRUB_GFXMODE=640×480

    の次の行に、以下のように書き足す。

    GRUB_GFXPAYLOAD_LINUX=1920×1080-32

    ここで、=のあとの部分は解像度と色のビット数である。先ほど起動時に調べた解像度と色のビット数を上の数字に当てはめて書いておく。この数字を間違えるとスプラッシュ画面がうまく起動しないので、もしうまくいかない場合はgrubでの解像度と色の数値をいろいろと試し、ここの部分を書き換えてみよう。なお、解像度と色の数値はできるだけ高いもののほうがよいようだ。

  6. 次に、/etc/initramfs-tools/conf.d/splashというファイルを編集する。ここにはただ1行、

    FRAMEBUFFER=y

    とだけ書く。

  7. 以下のコマンドを実行して、initramfsへの変更を有効にする。

    sudo update-initramfs -u -k all

  8. 以下のコマンドを実行して、grubへの変更を有効にする。

    sudo update-grub

  9. 再起動し、スプラッシュ画面が出てくるかどうかを確認する。

<その2>

「その1」の方法でスプラッシュ画面が出ない時には、先ほどのファイルに書いた解像度と色の数値が間違っていないことを確認した上で、さらに次のような変更を加えてみる。

  1. 先ほどと同様、/etc/default/grubを再度編集する。今度は、

    GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”

    と出ている行の先頭に「#」を加えてこの設定を無効化し、その下に以下のように書く。以下は1行である点に注意。

    GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash nomodeset video=uvesafb:mode_option=1920×1080-32,mtrr=3,scroll=ywrap”

  2. 同じく/etc/default/grubにおいて、

    GRUB_GFXMODE=1920×1080-32

    とある行があり、その先頭に「#」が入っていたら、それをとって、この行の設定を有効にする。なお、数値は先ほど述べた通り、grubでサポートされている解像度と色の数値のうち、いちばん高いものを選んでおく。

  3. 続いて、/etc/initramfs-tools/modulesファイルを編集する。このファイルの最後に、以下の1行を加える。

    uvesafb mode_option=1920×1080-32 mtrr=3 scroll=ywrap

  4. 「その1」の6.で行った、/etc/initramfs-tools/conf.d/splashファイルの作成を行っていない場合は、それを行う。
  5. 以下のコマンドを実行して、initramfsへの変更を有効にする。

    sudo update-initramfs -u

  6. 以下のコマンドを実行して、grubへの変更を有効にする。

    sudo update-grub

  7. 再起動し、スプラッシュ画面が出てくるかどうかを確認する。

<その3>
上記2つでもうまくいかない場合には、そもそもスプラッシュ画面が出せる状態になっているのかどうかを確かめよう。スプラッシュ画面を表示しているソフトはPlymouthというものである。これを実行してみる。

sudo plymouthd ; sudo plymouth –show-splash

これで画面が出るはずである。画面が出たことを確認できたら、Unityで端末を選んでおいて、

sudo plymouth quit

でPlymouthを終了する。

これで画面が出ない場合、plymouthの一部パッケージを追加する必要がある。追加して出るかどうかを確認しよう。

sudo apt-get install plymouth-x11

これで上記のPlymouth画面表示を試し、それでもダメであれば、さらに/etc/default/grubを以下のように編集する。
まず、

#GRUB_GFXMODE=640×480

という行があれば、その行の下に

GRUB_GFXPAYLOAD_LINUX=auto

という1行を加える。grubへの変更を有効にするため、update−grubを実行する。

sudo update-grub

再起動し、スプラッシュ画面が出るかどうか試して欲しい。

私の場合は、「その1」「その3」の組み合わせ、あるいは全てのケースを投入した結果うまく行っている。おそらくは「その1」「その2」だけで、解像度を正しく記述すればうまくいくかも知れないが、それぞれに違いがある可能性もあるので、上で記述した方法をいろいろ試してみて欲しい。

<参考>