今回は、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] 。
[2] 過去はElectronだったようですが、いくつかの理由から Qtに移行したようです。Qt版はqmlブランチで開発しているため、masterブランチにはElectron版のコードが残っているようです。
公式のダウンロードサイト では各種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が鉄板ですが、他のデスクトップ環境を使いたい際に使えるはずです。
[3] ライブ配信ではGitHubにプロジェクトページを作るところから始まっています。チュートリアルというよりは作業の様子を見せる類の配信で、( おそらくシェルスクリプトにはあまり慣れていない)配信者の試行錯誤の様子と視聴者が「そこはそう修正するんじゃないんだ」ともどかしくチャットでコメントしている様が楽しめます。あと、作業の合間に配信機材の紹介も適宜行われているので、Ubuntuで配信する際の参考にもなるでしょう。
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ドライバーがなかったことが主な理由です。
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向けのデスクトップ版イメージが公式に提供されることになるかもしれません。