「Unity 8」はUbuntuの次世代インターフェースとして開発しているデスクトップUIです。先日リリースされたUbuntu 16.10では、最初からインストールされるようになりました。そこで今回はこのUnity 8を使う方法を紹介します。
Unity 8の進捗どうですか
「次世代インターフェースとして開発している」とか「次のリリースからUnity 7から移行する見込み」なんて言われてから幾星霜、ようやく「Unity 8」がUbuntu 16.10では最初からインストールされるようになりました。ただ、最初からインストールされているとは言っても、標準の環境になったわけではなく、あくまで「お試しできる」状態でしかありません。しかも試せる環境は原則として、IntelかNvidiaのGPU向けのオープンソースドライバーを使っている環境、もしくはKVM上の仮想マシンのみとなります。
Unity 8は次世代ディスプレイサーバーである「Mir」とセットで開発中のデスクトップインターフェースです。MirはLinuxのディスプレイサーバーとしてデファクトスタンダードの位置を確立している「X Window System 」を置き換えるために開発中のソフトウェアです。X Window Systemは登場から30年以上が経過して仕様やコードは複雑になり、現在のコンピューターの要件とはそぐわない部分も多々指摘されるようになってきました。2000年代のはじめ頃から、X Window Systemを置き換える機運が立ち上がり、その一つがFedoraをはじめとして様々なディストリビューションで利用できるようになってきたWayland です。Unity 8も当初はWaylandを採用する予定でした。しかしながらスマートデバイス向けにUbuntu Touchを開発するにあたって、当時のWaylandではフォローできない機能がいくつかあったことなどから、結果的に独自開発を行うということでMirプロジェクトを立ち上げます[1] 。
Unity 8はこのMirの上で動くように、フルスクラッチで書きなおされています。組み込みデバイスを意識していたからか、Qt 5/QMLを使って開発することになりました。単にデスクトップPCだけでなく、スマートフォンのような小サイズ・高解像度なデバイスから、タブレットサイズ、さらにはTVのようなサイズは大きいものの距離が遠い表示デバイスにいたるまで、あらゆるレンジのデバイスでそれなりに使いやすいUIになるような作りを目指しています。いわゆる「Responsive UI」を開発当初から意識した実装となっているのです。
一般的には「Ubuntu Phone」や「Ubuntu Tablet」と呼ばれる、Ubuntu Touchをインストールしたスマートデバイスは、すでにUnity 8とMirを製品で採用しています。Unity 8とMirの組み合わせは将来的にデスクトップ環境でも適用される見込みで、今回はその一歩です。ちなみに当初の予定では、Ubuntu 14.04 LTSの時点で今回のような「お試し機能」を用意し、Ubuntu 15.10では標準の環境となる予定でした。しかしながら実装の遅れやUbuntu Touchへの注力、systemdへの移行といった様々な要因が絡んで、16.10までずれこんだというわけです。2015年の年始にあわしろいくやさんが執筆された第356回 の「2015年のデスクトップ環境」では「15.10に間に合わせるべく開発することは可能なのかは疑問があります」とありますが、まさにそのとおりの結果となりました[2] 。
[2] さらに1年たった今年2016年の年始に掲載された第404回 の「2016年のデスクトップ環境」では「30%くらいは17.04に先送りされるのではないかと思っていたりもするのですが」と書いてあったりします。はい、16.10での正式採用は諦めて、17.04以降に持ち越されました。
とは言えこれまで開発が停滞していたわけではなく、Ubuntu Touch向けがメインではあるものの開発は続いています。さらに2015年の第394回 でも紹介したように「Ubuntu Personal」として仮想マシン上でUnity 8が使えるになったり、コンテナにインストールしたUnity 8を体験できるスクリプトが用意されたりと、これまでにもデスクトップで簡単に試す手段もいくつか提供されていました。
Ubuntuは比較的多くのユーザーを抱えているからか、開発中の新機能に対して喜んで人柱になるユーザーよりも、保守的なユーザーの割合が大きくなりがちです。そのため実験的な機能を導入してもなかなか試してもらえなかったり、ユーザーの数に見合ったフィードバックがもらえません。しかもいざそれを本番環境に採用した途端、多くの人に影響が出てしまうというジレンマを抱えています。実際、Ubuntu 11.04でGNOMEからUnityへ移行したときも、賛否両論巻き起こる状態でした。Unity 8ではその教訓を糧に、まずは一般ユーザーが簡単に試用できる環境を提供して、数リリース様子を見てから本番環境として採用するというスタンスを維持しています。
言い換えると、今回のリリースでデスクトップ版のUnity 8がようやく一般ユーザーに試してもらえる品質になったということでもあるのです。
すみません、言い過ぎました。安心してください、いつもどおり見切り発車もいいところといった品質です。
Unity 8のテスト環境を用意する
さてここからはメディアキーを押すと固まる ことでも定評のあるUnity 8を実際に試してみることにしましょう。前述のとおりUnity 8を試すには、Ubuntu 16.10とIntelかNvidiaのGPUとオープンソースドライバーの組み合わせが必要です。ただ手元の環境はUbuntu 16.04 LTSを使い続けたいとか、Unity 8が固まった時に再起動しないといけないのは怖いといった理由で、実機では試しづらいこともあるでしょう。そこでQEMU/KVMを用いて仮想マシン上で試す方法を紹介します[3] 。
QEMU/KVMはたとえば本連載でもここ数回のセキュアブート関係の記事でも利用しているように、マシンエミュレーターであり仮想マシンを構築するために必要なソフトウェアです。仮想マシン管理ソフトウェアのvirt-managerやGNOME BoxesもバックエンドではQEMU/KVMを利用していますし、クラウド環境構築・管理ツールであるOpenStackや第345回 や第430回 でも紹介しているOpenNebula も計算ノードはQEMU/KVM上で動いていることが一般的です。QEMU/KVMの基本的な使い方を覚えておけば、これらのフロントエンドで何かトラブルがあったときに役に立つでしょう。今回はQEMU/KVMのコマンドをそのまま利用しますが、他のフロントエンドでもやり方が異なるだけでそのまま動くと考えてかまいません。
またUnity 8を動かすためには、仮想マシンのグラフィックデバイスとしてQXL(-vga qxl
オプション)を指定する必要があります。QXL は仮想マシンのリモートデスクトッププロトコルとして開発されたSPICE 向けの仮想グラフィックデバイスです。
$ sudo apt install qemu-kvm
$ mkdir unity8 && $_
$ wget http://jp.releases.ubuntu.com/yakkety/ubuntu-16.10-desktop-amd64.iso
$ qemu-img create -f qcow2 unity8.qcow2 40G
$ qemu-system-x86_64 -m 2G -enable-kvm -vga qxl \
-drive if=virtio,file=unity8.qcow2 \
-cdrom ubuntu-16.10-desktop-amd64.iso
Ubuntuを普通にインストールしてください。インストールが完了したら再起動します。「 Please remove the disc ( 中略) press ENTER:」というメッセージが出たら、ウィンドウを閉じて仮想マシンを終了しましょう。以降は、次のコマンドで仮想マシンを起動します。
$ qemu-system-x86_64 -m 2G -enable-kvm -vga qxl \
-drive if=virtio,file=unity8.qcow2
SDLウィンドウ上にUbuntuデスクトップが表示されるはずです。ちなみにSDLではなくSPICEを使いたい場合は、次のようにオプションを変更してください。
$ qemu-system-x86_64 -m 2G -enable-kvm -vga qxl \
-display none -spice port=5910,disable-ticketing \
-drive if=virtio,file=unity8.qcow2
「-display none
」はSDLウィンドウを立ち上げないことを意味します。もしシリアルコンソールは標準出力に出力したい場合、このオプションではなく「-nographic
」を指定してください。「 -spice port=5910,disable-ticketing
」でSPICEの設定を行っています。ポート5910番で待ち受け、接続時には認証を行わないという意味です。SPICEプロトコルで接続するためには、SPICEクライアント が必要です。Ubuntuであればspice-client-gtkパッケージのspicy
コマンドかvirt-managerパッケージに同梱しているremote-viewer
コマンドを利用すれば良いでしょう[4] 。ちなみにspice-html5 のようにWebSocketを使ったクライアントもあります。spice-html5を使えば、ビューワー側はWebブラウザーだけで完結します。
[4] Ubuntu 16.04 LTSのspicy
はGTK+2アプリケーションです。Ubuntu 16.10からGTK+3対応になっています。それに対して、remote-viewer
の方はUbuntu 16.04 LTSの時点でGTK+3に移行済みです。
spicyの場合:
$ sudo apt install spice-client-gtk
$ spicy -h localhost -p 5910
remote-viewerの場合:
$ sudo apt install virt-manager
$ remote-viewer spice://localhost:5910
図1 spicyの場合
図2 remote-viewerは画面上部のグローバルメニューから操作する
Unity 8の基本的な使い方
通常のデスクトップ(Unity 7)からUnity 8への切り替えは、ログイン画面で行います。ログイン済みの場合は、まずログアウトしてください。ログイン画面の名前の右端にUbuntuのロゴマークが表示されています。それをクリックすると、デスクトップセッションを変更できます。
図3 Ubuntuの場合は「Ubuntu(デフォルト) 」と「Unity8」が表示される
「Unity8」を選択してログインしてください。これだけで、Unity8の環境への移行が完了しました。もちろん同様にログイン画面で「Ubuntu(デフォルト) 」を選べばいつもの環境に戻れます。ただし現在のUnity 8は「ログアウト」する術がないので、一度シャットダウンする必要があります。
図4 Unity 8の画面
Unity 8ではスコープアプリ(Scopes)が最初から立ち上がっています。これはAndroidで言うところの「ドロワー」に近い位置づけのアプリです。デスクトップモードなら本来はDashとして格納されるべきものですが、今のところ常に起動した状態になっています。Unity 8の次のリリースからはこのあたりの挙動が変わる見込みです。
またLightDMから起動されるユーザーセッションのプロセスツリーを見てみると、Xサーバーは存在せず、代わりにMirサーバー機能を持っている「unity-system-compositor」が立ち上がっていることがわかります。
719 /usr/sbin/lightdm
1559 \_ lightdm --session-child 12 19
1682 | \_ upstart --user
1735 | \_ upstart-udev-bridge --daemon --user
1759 | \_ sleep infinity
1784 | \_ /bin/sh -e /proc/self/fd/9
1819 | | \_ /usr/lib/x86_64-linux-gnu/url-dispatcher/url-dispatcher
1799 | \_ /usr/bin/mediascanner-service-2.0
1804 | \_ /usr/lib/x86_64-linux-gnu/hud/window-stack-bridge
1873 | \_ gpg-agent --homedir /home/shibata/.gnupg --use-standard-socket --daemon
1949 | \_ upstart-dbus-bridge --daemon --session --user --bus-name session
1950 | \_ upstart-dbus-bridge --daemon --system --user --bus-name system
1951 | \_ upstart-file-bridge --daemon --user
1987 | \_ /usr/bin/fcitx
2044 | | \_ /usr/lib/mozc/mozc_server
2002 | \_ /usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 --config-file /usr/share/fcitx/dbus/daemon.conf
2009 | \_ /usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-vKRH4Kql7s,guid=b70639159f8b3b959ad6e80858346ea2 2002
2095 | \_ unity8 --mode=full-shell
(中略)
2394 | \_ /usr/lib/x86_64-linux-gnu/unity-scopes/scoperegistry
2395 | \_ unity8-dash --desktop_file_hint=/usr/share/applications/unity8-dash.desktop
1572 \_ /usr/sbin/unity-system-compositor --disable-inactivity-policy=true --on-fatal-error-abort --file /run/mir_socket --from-dm-fd 12 --to-dm-fd 21 --vt 8
操作方法はUnity 7と大差ありません。画面左端にカーソルを移動すればLauncher(Superキーと同じ機能)が表示されます。また画面右端にカーソルを持っていけばタスクスイッチャー(Alt+Tabキーと同じ機能)が起動します[5] 。画面右上のインジケーター領域は、クリックすれば表示されます。
図5 インジケーター
図6 すべてのアプリを起動した状態
図7 タスクスイッチャー
残念ながら、最初からインストールされているアプリケーションはスコープに加えて、ウェブブラウザー、端末、システム設定、システムテストを行うCheckboxの5つだけです。将来的にはUbuntu StoreからUbuntu TouchのアプリケーションやSnapパッケージをそのままインストールできるようになるはずです。少なくとも現在開発中の17.04(zesty)にはストアからのSnapパッケージのインストール機能が追加されています。
ちなみに一般的なスマートフォンのインターフェースでは、ひとつのアプリケーションが全画面で表示されます。インジケーターにある「デスクトップモード」のスイッチを切ると、デスクトップ版のUnity 8でも同様のインターフェースになります。逆に言うと、Ubuntu Touchがインストールされたスマートフォンやタブレットで「デスクトップモード」を有効化すると、デスクトップ版のUnity 8のようなマルチウィンドウモードになるのです。
アプリケーションのインストール
アプリケーションの数が少ないのは、単にUnity 8そのものがテクニカルプレビューという位置づけであるためです。将来的にはUbuntuデスクトップと同じように一通り必要なアプリケーションが揃った状態でリリースされます。Ubuntu Touchで使われているアプリケーションのうちいくつかはすでにPPAなどにも存在するので、実際にインストールしてみましょう。
snapパッケージ版
Unity 8向けsnapパッケージは、edgeチャンネルに存在します。Will CookeがUbuntu Insightsに投稿した記事 によると、以下の4つのアプリケーションが動くようです。
画像ギャラリー
$ sudo snap install --edge --devmode gallery-app
カメラ
$ sudo snap install --edge --devmode camera-app
連絡帳
$ sudo snap install --edge --devmode address-book-app
カレンダー
$ sudo snap install --edge --devmode ubuntu-calendar-app
アプリケーションをインストールした場合、アプリスコープを下の方に向けてドラッグして離すことで、アプリ一覧が更新されます。とはいえまともに動くのは画像ギャラリーぐらいです。
図8 画像ギャラリー
PPAからインストール
Convergent Apps Team のPPAには、Ubuntu Touch向けのアプリがいくつか存在します。
$ sudo add-apt-repository ppa:convergent-apps/testing
$ sudo apt update
$ sudo apt install calendar-app music-app reminders-app \
ubuntu-calculator-app ubuntu-clock-app ubuntu-docviewer-app \
ubuntu-filemanager-app ubuntu-weather-app
これらのアプリケーションはタイミングによって動かないどころかインストールできないものもあるかもしれません。比較的安定しているのは電卓アプリケーションぐらいです。
図9 電卓アプリケーション
デスクトップアプリのインストール
Unity 8はディスプレイサーバーとしてX Window SystemではなくMirを採用しています。よってX Window Systemに依存するソフトウェアは動きません。しかしながらMir上で動くXサーバーであるXMirを経由すれば、そのようなソフトウェアを動かすことができます。Ubuntu Touchでは「デスクトップアプリ」という名前で、スマートフォン上でUbuntuリポジトリに存在するGUIアプリケーションを起動する仕組みを提供しています。
しかしながらUbuntu Touch上のシステム領域は読み込み専用であるため特別な設定をしない限り、apt
コマンドでパッケージをインストールできません。そこでデスクトップアプリをインストールするための隔離環境を読み書き可能なホームディレクトリ以下に作成し、そこにパッケージをインストールする方法を採用しています[6] 。それがLibertine です。第439回 で紹介したLibreOfficeをUbuntu Touch上で動かす方法もこの仕組みを使っています。
デスクトップ版のUnity 8でもこの仕組みを使えます。つまりUnity 8上で、LibreOfficeを始めとしたデスクトップアプリケーションを起動できることになります。まずは必要なパッケージをインストールしましょう。このうちlibertineパッケージがLibertine環境をGUIで管理するLibertineアプリで、libertine-scopeはLibertine環境にインストールしたアプリケーションのランチャースコープ、libertine-toolsはLibertine環境をCUIから管理するツールです。
$ sudo apt install libertine libertine-scope libertine-tools
インストールが完了するとアプリスコープに、シルクハットの形をした黒いアイコンがあらわれるはずです。アイコンをクリックするとLibertineアプリが起動しますので、「 Install」ボタンを押します。続いてあらわれる「Container Options」は空のまま「OK」を押してかまいません。空のままだとi386関連のパッケージはインストールされず、コンテナ名は自動的に決定され、パスワードは空の状態となります。以降、環境が作られるまでしばらくかかります。
図10 Libertineアプリ
図11 Container%20Optionsは基本的に空のまま
図12 右端のローディングマークが消えたら作成完了
コンテナは「~/.cache/libertine-container/コンテナ名
」以下に作成されます。コンテナ名は指定していない場合はリリース名(yakkety)になっています。ちなみに複数のコンテナを作成することも可能です。コンテナが完成したらコンテナ名をクリックし、右上にあらわれる「+」ボタンを押してください。以下のように選択肢があらわれるはずです。
図13 パッケージのインストール
「Enter package name or Debian file」はパッケージ名かDebianパッケージファイル名を指定してインストールします。「 Choose Debian package to Install」はダウンロードディレクトリにあるDebianパッケージファイルを選択してインストールします。「 Search archives for a package」はアーカイブから指定したパッケージを検索し、リストアップします。リストをクリックするとそのパッケージをコンテナの中にインストールします。ためしに最初のボタンからLibreOfficeをインストールしてみましょう。
図14 パッケージ名として「libreoffice」を指定する
しばらく待つとローディングマークが消えてインストールが完了します。次はインストールしたデスクトップアプリを表示するスコープを使ってみましょう。スコープはスコープアプリ(Scopes)上の検索プラグインです。スコープを追加することで、さまざまなコンテキストの検索機能を追加できます。アプリのドロワーもアプリスコープとして実装されています。
スコープの管理はスコープアプリの画面下部にあるハンドルを上に引っ張りあげるかクリックすると表示されます。「 Home」にあるスコープがホームから表示されるスコープで、「 Also Installed」にあるスコープがインストール済みのスコープです。星アイコンをクリックすると、インストール済みのスコープがホームに移動します。スコープの管理画面から「Desktop Apps」を有効化しましょう。次にアプリスコープ上でカーソルを右にドラッグします。するとDesktop Appsスコープが表示され、そこにLibreOfficeのアイコンが表示されているはずです。あとはアイコンをクリックするだけでLibreOfficeが起動します[7] 。
図15 スコープの管理
図16 Desktop Appsスコープ
デスクトップアプリケーションでないパッケージをインストールしたい場合、Libertineアプリよりも端末からインストールできたほうが便利です。たとえば日本語フォントや言語パックをインストールするなら、次のようにlibertine-container-manager
コマンドを使うとよいでしょう。
$ libertine-container-manager exec -c "apt install -y fonts-takao language-pack-ja libreoffice-l10n-ja"
図17 画像ギャラリー
えっ、これだけ?
はい、これだけです。「 プレビュー」しようにも、「 デスクトップでもUnity 8が起動しました!」で終わりそうな勢いでしたね。
さて、半年後のリリースに向けて現在開発中のUbuntu 17.04 Zesty ZapusのUnity 8は、もう少しまともになる見込みです。少なくともUbuntu Store機能が追加され、Ubuntu Storeからsnapパッケージを検索・インストールできるようにはなるはずです。
さらにUnity 8そのものをsnapパッケージ化した環境も提供されています。snap版のUnity 8であれば、すでにUbuntu Storeに対応済みです。Ubuntu Personalではsnapからイメージを作成する計画が進行中で、Unity 8のsnapパッケージもそこで使われることになります。つまりテクニカルプレビューのさらにプレビューみたいな位置づけです。
デスクトップでもようやく目に見える動きが出てきたUnity 8、これを機にその先っぽを少しだけ触ってみるのはいかがでしょうか。
図18 zestyのsnap版Ubuntu Store