日本で十数人ぐらいのUbuntu Phoneユーザーの皆様こんにちは。今回のRecipeは、そんなちょっと外れた皆様のためだけにお届けするとてもニッチな特別編です。スマートフォン上でLibreOfficeをはじめとしたデスクトップLinux向けのアプリケーションを起動する方法を紹介します。
日本でUbuntu Phoneを使うには
「Ubuntu Phone」とは「Ubuntu Touch」がインストールされたスマートフォンです。「Ubuntu Touch」とはスマートフォンやタブレットなどのタッチパネルによる操作が主体のスマートデバイス向けに作られているUbuntuフレーバーです。タッチパネルによる操作が主体なので、マウスカーソルは表示されませんし、キー入力はソフトウェアキーボードで代用します。またスマートデバイスは物理的な画面サイズがPCに比べて小さいため、原則として1つのアプリが全画面を占有するようなUIになります。さらにGPSや電話といったスマートデバイスには欠かせない機能への対応やバッテリーの消費量を抑えるための施策などが実装されています。ここではOSとしての「Ubuntu Touch」がインストールされたデバイスであれば、スマートフォンかタブレットかを問わず「Ubuntu Phone」と表現することにします。
Ubuntu Phoneは2013年のMWC前後に具体的な話が登場し、同時期にあらわれたMozilla/Firefox OSやTizen、Jolla/Sailfish OSとともにAndroid/iOSに対抗する「第三のOS」の一角を成すことになりました。「第三って、xxxはなかったことにされたの?」とか「つまりはいずれ倒される運命にある『四天王』ということですね」とか、いろいろ言われること3年。Firefox OSは新天地に旅立ち、Tizenは新興市場やスマートウォッチという形で実績を残しつつあり、Sailfish OSは一時期不穏な噂が流れたもののその後は着実に端末数を増やしているという状況です。Ubuntu Phoneについても、2015年になってようやくBQからヨーロッパ市場向けに一般販売が開始したのを皮切りに、国際出荷の対応や中国のMeizuによるハイエンド版の販売、10インチサイズのタブレットなど、Android/iOSに対抗しているとはとても言えないながらも海外では少しずつ認知度を高めていっています。
残念ながらこれらのUbuntuブランドのデバイスはいずれも今のところは技適を通っていません。そのため日本でこれらのデバイスを使おうとすると、いくつかのハードルを超えなくてはなりません。ただ、Ubuntu PhoneはNexusシリーズのいくつかのデバイスも公式のサポートデバイスとして扱っています[1]。2016年9月時点でのサポートデバイスは次のとおりです(カッコの中はコードネーム)。最後の「Emulator」はAndroid SDK同梱のエミュレーターをベースにした、Ubuntu Phoneのエミュレーターです。これを使えばデバイスを持っていなくても、Ubuntu Touchを体験できます。
- Nexus 4 (mako)
- Nexus 7 2013 WiFi (flo)
- BQ Aquaris E4.5 (krillin)
- BQ Aquaris E5 (vegetahd)
- BQ Aquaris M10 (frieza)
- BQ Aquaris M10 HD (cooler)
- Meizu MX4 (arale)
- Meizu PRO 5 (turbo)
- Emulator (generic)
とはいえNexus 4はLTEに対応しておらず、Nexus 7 2013 WiFiはモバイルネットワークに対応していないため、正直な話をすると国内ではセカンドデバイスのような用途として考えても、使いやすいとは言えない状況です。ちなみにNexus 4はいわゆる「格安SIM」と呼ばれるMVNOのSIMを用いて通信・通話できます[2]。つまり不便ではあるものの、スマートフォンとして最低限のことは行えます。
奇しくも「まもなくGoogleがNexus 7の後継機を発表するのでは?」という噂が流れています。またNexus 4については、もう現役で使われていることはそうそうないでしょう。もしご家庭でNexus 4やNexus 7 2013が余るようなことがあれば、お遊びついでにUbuntu Touchをインストールしてみてはいかがでしょうか。
NexusシリーズへのUbuntu Touchのインストール方法は次のとおりです。
- Android上でデバッグ機能を有効化する
- ブートローダーをアンロックする(サポート対象外になる)
- デバイスをUSBケーブルでUbuntu PCにつなぐ
- Ubuntu PCからインストールコマンド(
ubuntu-device-flash
)を実行する
これだけでUbuntu PCがデバイスの種類を認識し、必要なイメージをダウンロードし、Nexusデバイスに書き込んでくれます。詳細は公式のインストールガイドを参照してください。ちなみにNexus上のデータはすべて削除されます。しかしながらAndroidデバイスにおける、Factory Resetと同じ手順でAndroidイメージの書き込みを行えば、Ubuntu Touchを削除してAndroidに戻すことは可能です。
Ubuntu Phoneでオフィスドキュメントを閲覧する
前置きが長くなりましたが、ようやくLibreOfficeの話となります。LibreOfficeは言わずとしれたオフィススイートです。仕事にしろ私用にしろ普段LibreOfficeを愛用している人であれば、そのドキュメントをスマートデバイスでも閲覧できると何かと便利でしょう。実際、Android向けであればオフィスドキュメントの閲覧や簡単な編集を行えるLibreOffice Viewerが存在しますし、プレゼンテーションツールであるImpressをAndroidデバイスでリモートコントロールするためのImpress Remoteなるツールも存在します。残念ながらUbuntu PhoneはLibreOfficeの公式サポート対象にはなっていませんが、第437回でも紹介したようにLibreOffice Viewerと同じくLibreOfficeKitを利用したubuntu-doc-viewerが存在します。
インストール方法はUbuntuストアで「Document Viewer」で検索し、「インストール」ボタンを押すだけです。ちなみにUbuntuストアを使うためには、Ubuntu Oneのアカウントが必要です。Launchpadのアカウントをすでに持っているのであれば、それを使用できます。
これはLibreOfficeKitを用いてタイル画像に描画しつつ、Qt5/QML用のLibreOffice描画プラグインを作ってその画像データを 画面に表示させているというものです。ピンチイン・アウトで拡大・縮小もできます。ただしLibreOffice Viewerと異なり、編集には未対応です。また動作も緩慢なので、「ちょっと確認する」程度にしか使えないと思っておいたほうが良いでしょう。ちなみにコントラストを変更する「ナイトモード」搭載です。
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を経由するように起動スクリプトを調整する必要があります。
デバイスのアップデートの簡素化・確実化の都合から、ルートファイルシステムは書き込み不可になっています。このためapt
コマンドによるパッケージのインストールは行えません。ただし禁止しているだけであって、技術的に行えないわけではありません。実際、Ubuntu Touchのデバッグ目的でルートファイルシステムを書き込み可能な状態でリマウントし、apt
コマンドで必要なパッケージをインストールすることは日々行われています。また、それをadb経由で行うヘルパースクリプトも存在します。ちなみにルートファイルシステムを書き換えたとしても、OTAと呼ばれるメジャーアップデート時にはその変更内容が削除されてしまいますので注意してください[4]。
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]。
Desktop Appsの準備
具体的な導入手順を見ていきましょう。まずLibertineの管理ツールである「libertine-container-manager
」を使って、隔離システムを構築します。Ubuntu Phoneには最初からターミナルアプリがインストールされているのですが、ターミナルアプリそのものの権限の都合で、そこから「libertine-container-manager
」を実行しても失敗してしまいます。そこで、Ubuntu PhoneのSSHサーバーを起動し、外部からSSHログインしてそこにログインして作業を行います。
まずはターミナルアプリを起動し、SSHサーバーを立ち上げます。ちなみにターミナルアプリを動かすためには、システム設定の「セキュリティとプライバシー」から「ロックとセキュリティ」を「4桁のパスコード」ないし「パスフレーズ」にする必要があります。このパスコード、ないしパスフレーズがsudo
コマンドのパスワードになります。
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ログインしてください。次のコマンドで隔離システムを作成します。
「-t
」オプションは隔離システムをchrootで作成するか、LXCで作成するか選択できます。しかしながらOTA-13の時点では、ほとんどのデバイスのカーネルでLXCの非特権コンテナをサポートしていません。よって今のところはchrootで作る方が無難でしょう。chrootで作る場合、Libertine側の制約により隔離システムとホストのUbuntuのバージョンをあわせる必要があります。よって、現時点で作れるシステムはvivid(15.04相当)のみとなります[6]。chrootでは、まずdebootstrap
コマンドを用いてミニマルなルートファイルシステムを「~/.cache/libertine/container/
」以下に作成します。作成完了まで30分ぐらいはかかります。
「-i
」オプションは隔離システムのIDを、「-n
」オプションは隔離システムのラベルを設定します。いずれも任意の文字列を指定可能です。隔離システムは容量が許す限り複数作成できます。最初に作った隔離システムが標準の隔離システムとして扱われます。標準の隔離システム以外を使用したい場合は、IDを指定子てlibertine-container-manager
コマンドを実行する必要があります。
その他のコマンドオプションについては「libertine-container-manager --help
」かmanページを参照してください。
アプリケーションのインストール
隔離システムができたら、そこにアプリケーションをインストールします。
隔離システムはミニマルな状態なので、LibreOfficeをインストールしようとすると大量のパッケージをインストールすることになります。高速でなおかつデータ通信量の制約がない環境で実行しましょう。
さらに隔離システムに日本語フォントのパッケージをインストールしておきます。
残念ながらvividだとNotoフォントパッケージには日本語関連のグリフが含まれていません。ちなみにexec
サブコマンドにbash
を渡すと、隔離システム内部に入ってさまざまな変更を加えることができます。
ここまででアプリケーションのインストールは完了です。もちろんLibreOfficeの代わりに、FirefoxやMikutterをインストールすることも可能です。
Desktop Apps Scopeの導入とLibreOfficeの起動
隔離システムにインストールしたソフトウェアの起動スクリプトは、Ubuntu Phoneの本体のUIからは見えません。そこでUbuntuストアから「Desktop Apps Scope」をインストールします。この「Scope」はUbuntuの標準UIであるUnityのScopeと同じで、検索インターフェースを追加する仕組みです。Ubuntu Phoneの場合、アプリケーションを検索するApps Scopeや、ローカルやインターネット上の動画を検索するVideo Scopeなどが標準で有効化されています。
ホーム画面の下端の外側からゆっくりと上に向けてスワイプすると、Scopeの設定画面が表示されます。「Also installed」にインストールしたDesktop Apps Scopeがありますので、★マークをクリックして「Home」に移動してください。Homeに移動したScopeは、ホーム画面を左右にスワイプすることで切り替えることができます。Desktop Apps Scopeを表示するとLibreOfficeのアイコンが表示されているはずです。
Desktop Appsでは、GUIアプリケーションを組み込みデバイス向けのX Window System環境であるMatchbox上で起動しています。よってツールキットなどのデザインがUnity7上のそれと異なることに注意してください。ちなみに上記スクリーンショットでは、隔離システムに言語パックをインストールしていないため、UIなどが英語になっています。
Ubuntu Phoneのポケットデスクトップ構想
LibreOfficeをUbuntu Phone上で起動できるものの、使い勝手は非常に悪いです。まずスマートフォンのディスプレイサイズが小さいため、UI上のアイテムのクリックは至難の業です。スタイラスが欲しくなるでしょう。そもそも一般的なデスクトップアプリケーションはあまりタッチデバイスを意識していないという問題もあります。ソフトウェアキーボードの場合、キーボードそのものが画面を占有する上に、ショートカットの入力にひと手間もふた手間もかかります。身も蓋もない言い方をすると、普通のLibreOfficeはUIや機能がスマートフォン向けではありません。
そこで次に出てくるのがUbuntuの「ポケットデスクトップ(Pcoket Desktop)構想」です。LibreOfficeがスマートフォンのUI向けでないのであれば、スマートフォンのUIを普通のPCと同じにしてしまえ、という無理矢理な構想です[7]。
- 通常操作時はスマートフォンのUI(シングルウィンドウモード)で動作する
- 外部ディスプレイに接続したときPCのUI(マルチウィンドウモード)で動作する
- マルチウィンドウモード時は以下の動作となる
- 通常のPCと同じくマウスカーソルを表示する
- 複数のウィンドウが重なりあって表示される
- アクティブでないウィンドウも動作を続ける
- スマートフォン側はタッチパッドやソフトウェアキーボードとして動作する
つまりスマートフォンに、外部ディスプレイとBluetoothマウスやキーボードを接続すると、ちょっとスペックの低いPCに早変わりするというわけです。なお以前はBluetoothマウスを接続した時もマルチウィンドウになっていましたが、いつの間にか挙動が変わったようです。
マウスが使えるようになるとLibreOfficeの操作性は格段に向上します。さらに外部キーボードをつなげばショートカットの入力も簡単になるので、編集作業が現実的になります。つまりポケットデスクトップと組み合わせて初めて、Desktop Apps機能が活きてくるというわけなのです。
Nexus 4のUSBポートはSlimportに対応しています。よって、実際にNexus 4を使ってポケットデスクトップを体感するためには、マイクロBのUSBコネクタをHDMIに変換する「Slimport変換アダプター」が必要になります。ちなみにMeizu PRO 5やBQ Aquaris M10はMiracastに対応しているため、ディスプレイ側がMiracastのSink機能を持っているかSink機能を追加するドングルをディスプレイに接続すれば、HDMIケーブルなしにポケットデスクトップ化が可能です[8]。
これらを組み合わせると、スマートフォンとBluetoothデバイス、それにいくつかのケーブルを持ち歩くだけで、ホテルや会議室といった出先のディスプレイを使ってPC代わりの環境を再現し、LibreOfficeをそこそこ快適に使えるようになるというわけです。