Ubuntu Weekly Recipe

第624回Raspberry Pi 4にデスクトップ版Ubuntuをインストール

今回は、GNOME Shellが搭載されたデスクトップ版のUbuntu 20.04 LTSをRaspberry Pi 4にインストールしてみましょう。

ということで今回は最近登場した「Raspberry Pi Imager」でサーバー版のUbuntuをRaspberry Pi 4にインストールした上で、⁠Desktopify」を用いてデスクトップ版に変更する手順を解説しましょう。

Raspberry Pi ImagerとDesktopify

Raspberry Pi 4が発売されると同時に買ったはいいものの、特に使いみちがあるわけでもなく旧機種と一緒に死蔵しているラズパイコレクターの皆さま、こんにちは。

Ubuntu Weekly Topicsの2020年6月12日号でも少し触れているように、先日Ubuntu開発者のポッドキャストにおいて、デスクトップ版のUbuntuが将来的にRaspberry Piをサポートする可能性に言及し、話題になっていました。そこで今回は、実際に最新のUbuntuをRaspberry Piにインストールする手順を紹介しつつ、デスクトップ版のUbuntuをサポートするための流れについて解説しましょう。

まずはじめに「Ubuntu」自体は「公式にRaspberry Piをサポート」しています。これは具体的にはRaspberry Piの第二世代以降のモデル向けに、Ubuntu Serverのプリインストールイメージを配布しているということです。あと少し毛色は違いますが、IoT向けのUbuntu CoreもRaspberry Piをサポートしています。UbuntuはARMv7世代以降のアーキテクチャーしかサポートしていないため、第一世代のRaspberry PiやCompute Module、それにRaspberry Pi Zeroはサポートしていません。

つまり一般的なUbuntuとして公式に配布しているのはサーバー版のイメージのみであり、AMD64向けのようにデスクトップ版のインストーラーは配布していません。ただし公式リポジトリにarm64向けのパッケージは存在するので、手作業でサーバー版からデスクトップ版パッケージ一式をインストールすることは可能なのです。

また、Ubuntu MATEなど各フレーバーごとにRaspberry Pi用デスクトップ版イメージを配布している例も存在しますが、今回はGNOME Shellを採用しているUbuntu Desktopを使うことにします。

公式イメージ書き込みツール「Raspberry Pi Imager」

Raspberry Piに何かOSをインストールするときは、一般的にインストーラーやインストール済みのイメージをダウンロードした上で、SD/microSDカードに書き込むところから始まります[1]⁠。これはRaspberry Piの公式OSとなったRaspberry Pi OS(旧称:Rasbian)であっても例外ではありません。

方法はCLIのddコマンドから、GUIのEtcherまでさまざまな手順が存在します。特にEtcherはシンプルなUIから、本連載でも何度となく活用してきました。しかしいずれの方法にせよ、⁠イメージを書き込む」ことに対してそれなりの知識が必要になります。

それに対してRaspberry Pi本家では、⁠OSを書き込む」のではなく「OSを展開するためのツールをファイルブラウザー上からSDカードへコピーする」という初心者向けの手段も提供していました。いわゆるNOOBSです。ただしNOOBSはイメージのダウンロードもストレージへの書き込みもRaspberry Piが担うため、PC上でイメージをダウロード・書き込むのに比べると速度に難がありました。

そこで3月にリリースされたのが、公式のSDカード書き込みツールであるRaspberry Pi Imagerです。これはいわゆる「イメージのダウンロード」「SDカードへの書き込み」の両方に対応したツールであり、ダウンロードしながら直接SDカードに書き込むために「高速に動作する」ことを謳っています。ちなみにソフトウェアはQt製です[2]⁠。

公式のダウンロードサイトでは各種OS向けのバイナリパッケージが配布されています。Ubuntuの場合はdebファイルをそのままダウンロードしてインストールできますが、非公式のsnapパッケージをインストールするほうが簡単でしょう。

$ sudo snap install rpi-imager

「Super + A」などでアプリケーション検索画面から「raspberry」で検索すると「Imager」とラベルの付いたアイコンが表示されるはずです。それがRaspberry Pi Imagerです。起動してください。

図1 ⁠CHOOSE OS」でOSを、⁠CHOOSE SD CARD」で書き込み先を選択して、⁠WRITE」で書き込むだけのシンプルなUI
画像
図2 Raspbery Pi OS(旧称Raspbian)だけでなくUbuntuや他のOSも選択可能
画像

Raspberry Pi Imagerは、Raspberry公式サイトにあるJSONファイルからダウンロード可能なOSの一覧を取得しています。UbuntuそのものはUbuntuのサイトにあるRaspberry Pi用のイメージリストを元にダウンロードするファイルなどを決定しているようです。

また任意のイメージファイルを指定することも可能です。他にもEEPROM上のデータの修復、SDカードのフォーマット機能もあります。

図3 Ubuntuはサーバー版とUbuntu Coreのそれぞれ32bit版と64bit版が用意されている
画像

今回は64bit版の「Ubuntu 20.04 LTS (Raspberry Pi 3/4)」を選択します。単にデスクトップを動かすだけなら32bit版でも問題ありません。

図4 書き込み先のmicroSDカードの選択
画像

上記の例だとUSBカードリーダー経由のmicroSDカードになります。また、当該カードにはすでにUbuntuインストーラーが書き込まれていたため、⁠system-boot」「writable」のパーティションが存在することが示されています。言い換えると、本ツールでイメージを書き込むとこれらSDカード上の既存のデータは消去されます。本当に消して良いかはあらかじめ確認しておきましょう。

デスクトップ版のUbuntuを使いたい場合、できるだけ高速でなおかつ容量の大きい(最低でも8GB以上の)microSDカードを選択してください。

図5 書き込みはファイルをダウンロードしつつ直接SDカードに書き込まれる
画像
図6 書き込みが完了した
画像

ダウンロードしたイメージは~/snap/rpi-imager/common/.cache/Raspberry Pi/Imager/lastdownload.cacheとして保存されます。snap版以外のパッケージならsnap/rpi-imager/common/が省かれたディレクトリになります。よって2回目以降に同じOSを書き込む場合はさらに高速になるはずです。

これでUbuntuイメージのダウンロードと書き込みが完了しました。

Ubuntu Serverの動作確認とアップデート

とりあえずSDカードに書き込んだUbuntu Serverを起動してみましょう。先ほど作成したmicroSDをRaspberry Pi 4に接続してください。原理上はRaspberry Pi 3でも動くはずですが、デスクトップを動かす場合は、性能的に期待する動作にはならないでしょう。4GBモデルか8GBモデルかも特に気にしなくてかまいません。今回は4GBモデルを使用しました。

Raspberry Piでデスクトップ環境を動かすためには次のデバイスが繋がっている必要があります。

  • LANケーブル
  • USB type-Cに対応したUSBケーブル(充電用)
  • 片方がmicroHDMIに対応したHDMIケーブル
  • HDMI対応のディスプレイ
  • マウス
  • キーボード

microHDMIは「HDMI0」と書かれた端子に接続してください。ちなみにUSB type-CとHDMIのかなり近くにあります。通常サイズの端子なら問題はありませんが、変換コネクタによってUSB type AやHDMIのサイズにする場合は干渉する可能性があるので注意してください。

無事に起動したら「黒い画面に白い文字」でログインプロンプトが表示されるはずです。ただし、そのあとにcloud-initによるアカウントの作成などが動きますので、もう少しだけ待ってください。

cloud-initの完了メッセージが表示されたらアカウント名「ubuntu⁠⁠、パスワード「ubuntu」でログインします。初回ログイン時は「You are required to change your password immediately」と表示されパスワードの変更が要求されます。メッセージに従って新しいパスワードを設定してください。SSHサーバーも起動しているので、リモートログインできるかどうかも試しておくと良いでしょう。

デスクトップ化の前に、最新のアップデートを適用しておきます。

$ sudo apt update
$ sudo apt full-upgrade -y

もしくはunattended-upgradeによる自動アップデートが動いているかもしれないので、しばらく放置しておくのも良いかもしれません。

Raspberry Pi上のUbuntu Serverのデスクトップ化ツール「Desktopify」

それではRaspberry Pi上のUbuntuをデスクトップ化していきましょう。実は本質的には次のコマンドさえ実行すればUbuntuデスクトップがインストールされます。

$ sudo apt install ubuntu-desktop

ただし、この方法だと「実際のUbuntuデスクトップ」とは若干異なる状態になります。たとえばUbuntu 20.04 LTSからはアプリケーションストアアプリが、snap版のsnap-storeに変更されました。つまりいくつかのsnapパッケージを追加でインストールする必要があります。

他にもサーバー版ではcloud-init経由で、ネットワークバックエンドとしてsystemd-networkdを使う設定になっています。しかしながらデスクトップ版ではこれをNetworkManagerに変更したほうが便利です。

このあたりの「細かい調整」を担ってくれるのが、今回紹介するDesktopifyです。

Desktopify自体はただのシンプルなシェルスクリプトです。サーバー版のUbuntu 20.04 LTSがインストールされたRaspberry Pi上で実行することで、さまざまなデスクトップ環境をインストールできます。

  • Ubuntu
  • Ubuntu MATE
  • Ubuntu Budgie
  • Ubuntu Kylin
  • Ubuntu Studio
  • Kubuntu
  • Lubuntu
  • Xubuntu

実際のところUbuntu MATEがメインターゲットで、それ以外はオマケのような感じもしますが、それでも最低限必要な処理は行ってくれます。

また、Raspberry Pi固有の設定として、無線LANのパフォーマンスを改善させるためにパワーセーブをオフにするとか、Bluetoothを使うためのpi-bluetoothパッケージや、GPIO関連パッケージもインストールします。

このスクリプトは、もともとUbuntu Desktop Teamのメンバーであり、Ubuntu MATEのインストールイメージのメンテナーでもあるMartin Wimpressが5月頭に自身のYouTubeチャンネルでスクリプトを作る様子をライブ配信していたところから始まります[3]⁠。Raspbperry Pi向けのUbuntu系デスクトップイメージとしてはUbuntu MATEが鉄板ですが、他のデスクトップ環境を使いたい際に使えるはずです。

Desktopifyはまだパッケージ化されていないため、Raspberry Pi上でGitHubのリポジトリからcloneします。とはいえ、現時点でスクリプトファイルがひとつだけなので、それを直接ダウンロードしても良いでしょう。

$ git clone https://github.com/wimpysworld/desktopify.git
$ cd desktopify

実行には管理者権限が必要です。また--deオプションでインストールするデスクトップ環境を指定します。ちなみに--oemも指定すると、次回起動時にOEMインストールモードになります。つまりインストーラーが行っている初期設定を行えるようになるので、作成したイメージを使いまわしたいならOEMモードで作成することをおすすめします。

$ sudo ./desktopify --de ubuntu
specified ubuntu desktop
[+] Configuring your Raspberry Pi 4 Model B Rev 1.2
[+] Will now install ubuntu-desktop and pi-bluetooth libgpiod-dev python3-libgpiod python3-gpiozero
Reading package lists... Done
Building dependency tree
Reading state information... Done
(中略)
[+] Will now configure network

600MB前後のデータをダウンロード・インストールするためそれなりに時間がかかります。途中で問い合わせが発生することはないはずなので、そのまま放置しておきましょう。電力はそこまで消費しませんが、SoCがそれなりに熱くなることには注意してください。

インストールが完了したらシステムを再起動しましょう。

$ sudo reboot

あとは普通のログイン画面が表示されるはずです。

図7 こうなるともうただのUbuntuデスクトップ
画像

ただしOEMモードを有効化していない場合、ローカライゼーション周りの対応が行われていません。つまり英語環境になります。よって最低でも次の対応は行っておくと良いでしょう。

  • 「システム設定(System Settings⁠⁠」から「地域と言語(Region & Language⁠⁠」を選択し、⁠インストールされている言語の管理(Manage Installed Languages⁠⁠」を起動する
  • 「言語のインストールと削除(Intall/Remove Languages⁠⁠」ボタンを押して、Japaneseにチェックを入れ、⁠適用(Apply⁠⁠」ボタンを押す
  • 追加のパッケージのインストールを問われるので、指示に従ってインストールする
  • 「メニューとウィンドウの言語(Language for menus and windows⁠⁠」にある「日本語」をドラッグアンドドロップで先頭に移動する
  • 一度ログアウトした上で、再度ログインし、⁠システム設定(System Settings⁠⁠」から「地域と言語(Region & Language⁠⁠」を選択する
  • 「言語」「フォーマット」がそれぞれ日本語になっていることを確認し、なっていなければ変更する
  • 日本語キーボードなら入力ソースから「英語」を削除し「日本語」を追加する
  • さらに入力ソースに「日本語(Mozc⁠⁠」を追加する
  • 「Super + Space」「日本語(Mozc⁠⁠」を選択して日本語入力できることを確認する
  • 「日付と時刻」からタイムゾーンを日本(JST)に変更する

手順を詳細に書いているため大変そうに見えますが、実際はほぼ画面の指示通りに操作するだけです。

図8 Japaneseを選択するとフォントなどをインストールするためそれなりに時間がかかる
画像

アプリケーション起動時に若干もたつきますが、これはおそらくストレージI/Oの性能がボトルネックになっていると思われます。一度起動してしまえば、それなりに動くようです。

ただしグラフィックはllvmpipeで描画しているため、少し重めのアニメーションを描画しようとすると一気にかくつく感じはあります。ライトな用途であればそこまで性能は問題ではないものの、本格的に使うとなるとまだまだ修正が必要そうです。

あとGNOME Shell/Mutterの描画のどこかに問題があるようで、たまに画面が暗転したり、ノイズが発生したりします。これはどちらかというとRaspberry Piの問題というよりはGNOME Shell/Mutterとllvmpipeの組み合わせに問題があるように見えます。

デスクトップ版のUbuntuがRaspberry Piをサポートするかも?

Ubuntu Weekly Topicsの2020年6月12日号にある、⁠デスクトップ版のUbuntuが将来的にRaspberry Piをサポートする可能性」に言及したのは、実はこのDesktopifyを開発したMartin Wimpressです。MartinはRaspberry Pi 4の8GBモデルをいち早く入手し、自身のYouTubeチャンネルでUbuntu 20.04 LTSを動かす様子を配信していました。おそらくそこから、デスクトップ版のサポートの可能性を感じ取ったのでしょう。

これまで本連載では何度となくRaspberry PiにUbuntuのデスクトップ環境をインストールする記事を紹介していましたが、今回のように「Ubuntu Desktop」を使う例は存在しませんでした。

第376回と第450回・第451回は「Ubuntu」とタイトルにあるものの、実際に動いているのは3Dアクセラレーションを必要としないGNOME Flashbackです。それ以外はXubuntuだったり、公式にRaspberry Pi向けイメージを提供しているUbuntu MATEだったりします[4]⁠。これはUnityやGNOME Shellをまともに使うためには3Dアクセラレーションが必要なものの、当時はRaspberry Piで動くまともなGPUドライバーがなかったことが主な理由です。

4
2020年6月20日時点ではRaspberry Pi向けのUbuntu MATE 20.04 LTSがリリースされていませんが、先週あたりから「イメージを作った」という話が聞こえているので、間もなくリリースされるものと思われます。

Raspberry Piシリーズで採用しているBroadcomのSoCには、VideoCoreと呼ばれるGPUが組み込まれています。Raspberry Pi 4がVideoCore VIで、それ以外がVideoCore IVです。少しわかりにくいですが、⁠6(VI⁠⁠」と「4(IV⁠⁠」です。⁠5(V⁠⁠」も存在するようですが、Raspberry Piでは採用されていません。

Raspberry Pi 3以前で採用されていたVideoCore IVについては、Eric Anholt[5]がFLOSSなドライバーを開発していました。これはVC4ドライバーと呼ばれるもので、最新のRaspberry Pi 4向けのUbuntuイメージであればカーネルモジュールとして有効化されています。しかしながら、Eric自身がブログで言及しているように、たとえ3Dアクセラレーションが有効化されたとしても、Raspberry Pi 3の性能でGNOME Shellをストレスなく動くかというと微妙でした。これはGPUの性能よりはGNOME Shellのアーキテクチャーの問題ではあるようですが。

それに対して、Raspberry Pi 4で採用されているVideoCore VIは大幅に性能が強化されています。ドライバーもErich Anholtから作業を引き継いだ、Igalia社のIago ToralらがV3Dドライバーとして開発しています。もともVideoCore V向けだったのでVC5という名前だったようですが、VideoCore VI以降もサポートするようになったために名前が変わったようです。

V3Dドライバーの現状とゴールは最近Raspberry Pi Blogに掲載されたレポートによくまとまっています。VideoCore VIの性能を引き出すための多数の施策が行われており、Vulkanのサポートだけでなく将来的にはGPGPU向けにコンピュートシェーダーをサポートすることも目指しているようです。

さて、残念なことにUbuntu 20.04 LTS向けのUbuntuカーネルではV3Dドライバーは有効化されていません。一度19.10の開発段階で有効化されたものの、5.3カーネルのそれはあまりにも不安定だったために無効化されたという経緯が存在します。その後、5.4カーネルだとそれなりに安定化しているということで、UbuntuカーネルでもV3Dドライバーを有効化する流れになりつつあります。

よってUbuntuデスクトップに対応するためには、まずはV3Dドライバーの有効化と動作確認から行う必要があります。Ubuntu 20.04 LTSのポイントリリースで対応するかどうかは不明ですが、ひょっとすると20.10あたりにはRaspberry Pi向けのデスクトップ版イメージが公式に提供されることになるかもしれません。

おすすめ記事

記事・ニュース一覧