Ubuntu Weekly Recipe

第439回 LibreOfficeとUbuntu Phone

この記事を読むのに必要な時間:およそ 6 分

Ubuntu PhoneのDesktop Apps機能

Ubuntu Phoneでは,いくつかの制約があるものの既存のUbuntu上で動いていたデスクトップソフトウェアをインストールする仕組みが存在します。この仕組みを使うと,⁠普通のLinux向けLibreOffice」をスマートフォン上で起動できるのです。

まずUbuntu Touchは次の点で,既存のPC向けUbuntuとは異なります。

  • X Window System/Unity7ではなく,Mir/Unity8を採用している
  • アップデート時はルートファイルシステムをごっそり入れ替える
  • ルートファイルシステムは原則として書き込み不可
  • アプリのパッケージフォーマットはClickフォーマット

ディスプレイサーバーがMirであるため,既存のデスクトップ向けソフトウェアはそのままでは動きません。Mir上で動くXサーバーであるXMirを経由して動かす必要があります※3⁠。つまりMir非対応のGUIアプリを動かしたければ,XMirを経由するように起動スクリプトを調整する必要があります。

※3
Mirと同じく次世代ディスプレイサーバーであるWaylandと同様に,ツールキット等が将来的にMirをサポートするようになればこの限りではありません。

デバイスのアップデートの簡素化・確実化の都合から,ルートファイルシステムは書き込み不可になっています。このためaptコマンドによるパッケージのインストールは行えません。ただし禁止しているだけであって,技術的に行えないわけではありません。実際,Ubuntu Touchのデバッグ目的でルートファイルシステムを書き込み可能な状態でリマウントし,aptコマンドで必要なパッケージをインストールすることは日々行われています。また,それをadb経由で行うヘルパースクリプトも存在します。ちなみにルートファイルシステムを書き換えたとしても,OTAと呼ばれるメジャーアップデート時にはその変更内容が削除されてしまいますので注意してください※4⁠。

※4
もともとは「通算3度目のOver The Air Update」「OTA-3」などと呼称していたのですが,いつのまにかUbuntu Phoneまわりでは「OTA」がアップデートそのものを指す単語として使われるようになってしまいました。アップデートそのものは有線経由でも行えます。

Ubuntu Phone上のアプリは「Click」と呼ばれるパッケージフォーマットを採用しています。これはアプリを動かすために必要なライブラリをすべて同梱したパッケージフォーマットであり,現在Ubuntuで開発中のsnapパッケージフォーマットの元となったフォーマットでもあります。Clickには,AppArmorを利用したセキュリティポリシーの設定や隔離機能が実装されています。要するにAndroidで言うところの「アプリの権限」と同等の機能を実装するための仕組みです。

これらの「違い」により,Ubuntuのリポジトリに存在する既存のソフトウェアをUbuntu Phone上で動かすことは困難です。しかしながらUbuntuの名のついたOSであるのなら,PC向けのUbuntuと同じソフトウェアを動かしたいところです。また,これが可能になれば他のモバイル向けOSに対する大きなアドバンテージになります。そこでUbuntu Touchでは,Libertineと呼ばれるX Window SystemベースのGUIアプリを動かすための隔離システムを導入しました。

Libertineでは,chrootもしくはLXCを使用しUbuntuのルートファイルシステムをデバイス上の書き込み可能領域に隔離システムとして用意し,その中で既存のソフトウェアを動かす仕組みです。原則としてデバイス上の他のリソースにはアクセスしません。唯一,ホームディレクトリのファイルにのみアクセス可能です。Libertineを用いて隔離システム上にパッケージをインストールすると,そのdesktopファイルがUbuntu Phone用にカスタマイズされます。⁠Desktop Apps Scope」というアプリをインストールすれば,そこから隔離システム上のソフトウェアを起動できるのです。Ubuntu Phoneでは12番目のメジャーアップデートであるOTA-12から,⁠Early Preview」という位置づけではあるもの,この仕組みが組み込まれるようになりました※5⁠。

※5
仕組みの名前は「Libertine」ですが,デスクトップアプリを動かす機能という意味では「Desktop Apps」と呼ばれています。また以前は「Xapps」という名前でした。このあたりは名前がころころ変わる上に,厳密な定義や使い分けがされているわけではないので,他のドキュメントを読む時は注意してください。

Desktop Appsの準備

具体的な導入手順を見ていきましょう。まずLibertineの管理ツールであるlibertine-container-managerを使って,隔離システムを構築します。Ubuntu Phoneには最初からターミナルアプリがインストールされているのですが,ターミナルアプリそのものの権限の都合で,そこからlibertine-container-managerを実行しても失敗してしまいます。そこで,Ubuntu PhoneのSSHサーバーを起動し,外部からSSHログインしてそこにログインして作業を行います。

まずはターミナルアプリを起動し,SSHサーバーを立ち上げます。ちなみにターミナルアプリを動かすためには,システム設定の「セキュリティとプライバシー」から「ロックとセキュリティ」「4桁のパスコード」ないし「パスフレーズ」にする必要があります。このパスコード,ないしパスフレーズがsudoコマンドのパスワードになります。

(SSHサーバーを起動する)
phablet@ubuntu-phablet:~$ sudo start ssh
[sudo] password for phablet:
ssh start/running, process 4753

(Ubuntu PhoneのIPアドレスを確認する)
phablet@ubuntu-phablet:~$ ip addr show wlan0 | grep inet
    inet 192.168.0.3/24 brd 192.168.0.255 scope global wlan0

(公開鍵を追加する)
phablet@ubuntu-phablet:~$ cat id_rsa.pub >> ~/.ssh/authroized_keys

Ubuntu PhoneのSSHサーバーはパスワードログインを許可しない設定になっています。よって何らかの方法で,PC側の公開鍵を~/.ssh/authorized_keysに登録する必要があります。公開鍵をLaunchpadに登録済みであればhttps://launchpad.net/people/+me/+sshkeysで取得できますし,GitHubなら「https://api.github.com/users/ユーザーID/keys」で取得できます。またシステム管理の「About」にある「開発者モード」を有効にすればadb経由でファイルを送ることも可能です。

SSHサーバーが起動し公開鍵を登録したら,確認したIPアドレスに対して適当なPCからSSHログインしてください。次のコマンドで隔離システムを作成します。

phablet@ubuntu-phablet:~$ libertine-container-manager create -i vivid -t chroot -n 'Vivid'

-tオプションは隔離システムをchrootで作成するか,LXCで作成するか選択できます。しかしながらOTA-13の時点では,ほとんどのデバイスのカーネルでLXCの非特権コンテナをサポートしていません。よって今のところはchrootで作る方が無難でしょう。chrootで作る場合,Libertine側の制約により隔離システムとホストのUbuntuのバージョンをあわせる必要があります。よって,現時点で作れるシステムはvivid(15.04相当)のみとなります※6⁠。chrootでは,まずdebootstrapコマンドを用いてミニマルなルートファイルシステムを~/.cache/libertine/container/以下に作成します。作成完了まで30分ぐらいはかかります。

※6
Ubuntu Phoneにおけるvividは,正確には「vivid + Overlay PPA」と呼ばれるリリースになります。すでにサポートの切れた15.04ベースではあるものの,Overlay PPAを用いてUbuntu Phone用にセキュリティパッチを当てたパッケージや最新のUbuntuからバックポートされたパッケージが提供されています。これは隔離システム側も同じです。

-iオプションは隔離システムのIDを,-nオプションは隔離システムのラベルを設定します。いずれも任意の文字列を指定可能です。隔離システムは容量が許す限り複数作成できます。最初に作った隔離システムが標準の隔離システムとして扱われます。標準の隔離システム以外を使用したい場合は,IDを指定子てlibertine-container-managerコマンドを実行する必要があります。

その他のコマンドオプションについてはlibertine-container-manager --helpmanページを参照してください。

アプリケーションのインストール

隔離システムができたら,そこにアプリケーションをインストールします。

phablet@ubuntu-phablet:~$ libertine-container-manager install-package -p libreoffice

隔離システムはミニマルな状態なので,LibreOfficeをインストールしようとすると大量のパッケージをインストールすることになります。高速でなおかつデータ通信量の制約がない環境で実行しましょう。

さらに隔離システムに日本語フォントのパッケージをインストールしておきます。

phablet@ubuntu-phablet:~$ libertine-container-manager exec -c "apt install -y fonts-takao"

残念ながらvividだとNotoフォントパッケージには日本語関連のグリフが含まれていません。ちなみにexecサブコマンドにbashを渡すと,隔離システム内部に入ってさまざまな変更を加えることができます。

phablet@ubuntu-phablet:~$ libertine-container-manager exec -c "bash"

ここまででアプリケーションのインストールは完了です。もちろんLibreOfficeの代わりに,FirefoxやMikutterをインストールすることも可能です。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。