現在開発中のUbuntu Touchでは、Android SDKと同様にPC上で実行可能なエミュレーターを開発者向けに提供する予定です。そこで今回はその「Ubuntu Emulator」を操作する方法について紹介します。
Ubuntu Emulator
Ubuntu Touchは今のところ、スマートフォンやタブレットをメインターゲットにして開発を行っています。このため、これまではNexus 4やNexus 7といったターゲットデバイス上でイメージをインストールし、各種アプリを実行する形で開発を行ってきました。
ただしすべての開発者がUbuntu Touchが動作する実デバイスを持っているとは限りません。そこで上記と並行して、実デバイスを持っていない開発者やテストの自動化のために、エミュレーターも開発が行われていました。2013年6月ぐらいには、Androidエミュレーターベースのものができあがってはいたのですが、Mirへの移行やUbuntu Touchのホスト・ゲストの切り替え、その他もろもろの事情により、より実デバイスに近い形で動作するようになったのは同年11月になってからだったのです。
エミュレーターの開発に目処が立ったことを受けて、イメージの作成や起動を行うGo言語で作成されたヘルパーツールを作成し、同年12月にはUbuntu Server上でエミュレーターを使ったTouchとコアアプリの継続的な機能テストがスタート、2014年1月にはUbuntu Touchのメイン開発プラットフォームが「armhf/x86エミュレーター」と「Nexus 4、Nexus 7 2013」になる旨のアナウンス(日本語記事)も行われています。さらにアプリの翻訳者向けにクイックスタートガイドも公開されました。
これによりAndroidやUbuntu上のマルチアーキテクチャ、クロスコンパイラに詳しくない利用者でも、簡単にUbuntu Touchとそのアプリを試せるようになったのです。ここからは、この「Ubuntu Emulator」のインストール方法やその使い方を説明します。
必要条件
Ubuntu Emulatorを動かすために必要な条件は次のとおりです。
- エミュレーターに512Mバイトのメモリを割り当て可能なこと
- エミュレーターのディスク容量として4Gバイト割り当て可能なこと
- ホスト上でOpenGLが動作可能なこと
後述するように、このエミュレーターはQEMUを用いてARMバイナリをエミュレートする形で実現しています。そのためよりスムーズに動かすためには、できるだけ高速なCPUも必要です。
インストール方法
現在開発中のTrustyであれば、Ubuntu Emulatorのインストールは非常に簡単です[1]。
Android部分のライセンス上の制約からMultiverseは有効にしておいてください。またAndroid SDKをベースにしたエミュレーターであるため、amd64マシンでもi386版のパッケージがインストールされます。android-tools-adbパッケージによってudevルールが更新される場合は、インストール後の再起動も要求されるでしょう。
CanonicalのDavid Planellaが公開しているクイックスタートガイドでは、Ubuntu 13.10へのインストール方法も記載されています。しかしこれはTrustyのバイナリパッケージをダウンロードしてきてインストールするという方法なので、環境によっては正しく動かない可能性もあります。マシンスペックに余裕があるようなら、この方法よりは仮想マシンにTrustyをインストールして実行する方が良いでしょう。ただしゲスト上で3Dアクセラレーションが有効になっている必要はありますので、たとえばVirtualBoxではGuest Addtionsを導入した環境を用意してください。ホストがTrustyのときと比べてリソースの消費が多くなりますが、もともととても緩慢な動作であるため、そこまで違いは気になりません。
イメージの作成と起動
最初にエミュレーターのイメージを作成します。このコマンドを実行するためには管理者権限が必要です。
ubuntu-emulatorコマンドのcreateサブコマンドを実行することで、Ubuntu Touchのシステムイメージを提供するサーバから、必要なイメージファイルをダウンロードし、「testimage」という名前のイメージを作成します。オプションを指定しない場合は、devel-proposedの最新版を取得します。イメージのリビジョンやチャンネルを指定したい場合は、「ubuntu-emulator create --help」を参考にオプションを指定してください。
ダウンロードしたファイルは「~/.cache/ubuntuimage」に、作成したイメージファイルは「~/.local/share/ubuntu-emulator」に保存されます。
ダウンロードしたファイルのうち、「version-」は使用しているイメージのバージョンなどを保存するメタデータ、「device-」はブート領域やリカバリー領域、デバイスに依存するAndroidのイメージファイルが保存されています。「ubuntu-」がUbuntuのルートファイルシステムそのものです。ここまでは、通常の実機にインストールする時にダウンロードするイメージファイルと同じです。
作成したイメージファイルは、Android Boot Imageだったりただのシステムパーティションだったりします。前者についてはabootimgコマンドで展開できますし、後者はローカルにマウントすることで中身を見ることができます。
Ubuntu Emulatorの起動はrunサブコマンドに作成したイメージ名を指定するだけです。
PCで起動する場合はarmバイナリをx86上でQEMUを用いてエミュレーションすることになるので、かなり動作が緩慢です。さらに、端末にログインプロンプトが表示されたあとも、各種サービスの立ち上げや、必要なClickパッケージを別途インストールする作業も行われるので、実際には起動完了まで10分から20分ぐらい経過します。
最終的に次のようなウェルカムスクリーンが表示されたら起動完了です[2]。もしログインプロンプトが表示されたものの、暗い画面のままで20分以上たっているようであれば、Unity 8がクラッシュしている可能性があります。「Ctrl-C」で一旦エミュレーターを終了したうえで、再度起動してみてください。
操作方法
操作方法は通常のUbuntu Touchとほぼ同じですので、第263回の記事が参考になるでしょう。指のタップやスワイプはマウスのクリックやドラッグで代用できます。とくに設定しなくてもホストのネットワーク経由で外部に接続できるので、Webブラウザを使ってページを表示することも可能です。
デバイスへログイン
エミュレーター起動後に表示されるログインコンソールには、ユーザー名「phablet」、パスワード「phablet」でログインできます。ここからログインすれば普通のUbuntuと同じように操作可能です。ただし、どんな状態でも「Ctrl-C」を入力するとエミュレーターそのものが終了してしまいます。普段「Ctrl-C」をよく使う人は、このコンソールを使わないほうが良いでしょう。
Ubuntu Touchは内部でadbdを起動しているため、普通のAndroidデバイスと同様にadbコマンドで通信できます。たとえば次のコマンドを実行すれば、adbシェルが立ち上がります。
ただしエミュレーターの起動を繰り返していると、adbでエミュレーターを見つけられなくなることがあるようです。その場合は一度、PCのほうのadbサーバを再起動してください。
Ubuntu Touchのイメージには最初からsshサーバがインストールされていますが、Upstartの機能によって自動的な起動が抑制されています。もしsshを使いたいなら、以下のコマンドをコンソールかadbシェルから実行してください。
エミュレーター起動時は常にsshサーバも立ち上げたい場合は、自動起動を有効にします。
外からエミュレーターに接続するにはadbを経由しないといけないので、次のようにポートフォワードしたうえで、アクセスします。
ちなみにUbuntu Touchの中では、AndroidのいくつかのサービスがLXC上で起動しています。
日本語化
Ubuntu Touchには日本語フォントや翻訳ファイルはインストールされていません。そのためWebブラウザで日本語のページを表示しても、何も表示されないか標準で入っている中国語フォントかDroidフォントで表示されてしまいます。そこで、Ubuntu Touchを日本語化してみましょう。
まずエミュレーターにログインした上で、フォントや翻訳ファイルをapt-getでインストールします[3]。
中国語フォント(UKaiフォント)パッケージとDroidフォントの設定を削除しているのは、日本語フォントをインストールしただけだと、中国語フォントが優先されてしまうための対応です。この操作でubuntu-touchパッケージも削除されますが、これはただのメタパッケージなので削除されても問題ありません。本来はfontconfigで設定するのが筋なのですが、どうも優先順位がうまく変更できなかったためこのような対応を行いました。
実行後は一度、エミュレーターを再起動してください。起動が完了したら今度はエミュレーターのGUIのほうから、Applications Scopeを選択(画面を左に1回スワイプ)したうえで、「Settings」を選択し、次の画像に従って設定していきます。
タイムゾーンも設定する場合は「Time & Date」を選択したうえで、「UTC/Etc」をクリックして日本の地名を入力します。ただし、この検索部分はイクリメンタル検索で、しかも処理が重いため、入力後実際に表示されるまで時間がかかるので注意してください。
再びエミュレーターを再起動すると、ウェルカムページの日本の時刻が、日本語で表示されるようになっているはずです。
ちなみに、日本語入力はいまのところできません。
アプリのインストール
Ubuntu Touchは従来のDebianパッケージとは別に、「Clickパッケージ」と呼ばれるAndroidやiPhoneのようなパッケージ管理システムも備えています。「アプリケーション」に表示される「さらに提案」をタップすると、このClickパッケージの一覧が表示されるので、その中から好きなものがインストールできます。
ただ、このClickパッケージはUbuntu Emulatorの起動時に重くなっている要因の1つで、たびたびDBが落ちて「さらに提案」自体が表示されなくなることがありました。実機だとそこまで酷くはなかったので、ひょっとするとエミュレーターの重さが一番の問題なのかもしれません。
ちなみにClickパッケージをインストールするにはUbuntu Oneのアカウントが必要です。System SettingsのOnline Accountsからあらかじめアカウントを登録しておきましょう。また、パッケージファイルはすべて/opt/click.ubuntu.com/以下に保存されます。
アップグレード
システム設定からのシステムイメージアップグレードにはまだ対応していないようです。ubuntu-emulatorコマンドのcreateサブコマンドを再度実行することで、イメージを置き換えることができます。ただしこの場合は、/userdata(やユーザのホームディレクトリ)に保存されたデータ以外の設定や変更は破棄されます。
PCと同じように、apt-getコマンドでアップグレードすることも可能ですが、Ubuntu Touchとしてはシステムイメージアップグレードのほうをメインにテストしていることと、いくつかのシステムコンポーネントはapt-getではアップグレードできないので、適宜使い分けるようにしてください。