先週、Ubuntu 13.10の標準のディスプレイサーバが、X Window SystemからMirに変更されると発表されました。そこで今回は、このMirについての簡単な説明と、手元の環境で試してみる方法を紹介します。
MirとXMirとは
Mirとは
「Mir」はUbuntuの中でX Window Systemが担っている部分を置き換えることを目的とした「次世代ディスプレイサーバ」です。
X Window Systemは簡単に言うとディスプレイへのウィンドウの描画やユーザの入出力を扱うプロトコルです。そのプロトコルを実装したものの一つがX.Org Serverです。X Window System自体は互換性に配慮した設計思想と拡張機能を持っており、長い年月に渡ってUbuntuに限らず数多くのOSやソフトウェアで使われてきました。しかしながら古いものを改修・拡張しながら使い続けることは、とくに日進月歩なソフトウェアにはどうしても限界があります。
たとえばX Window Systemはウィンドウの配置や描画というGUIの中核部分のみを担当し、より高度なウィンドウの重ね合わせ(Composite)はMutterやCompizといったウィンドウマネージャに任せてきました。ただ、最近の3Dアクセラレーションの効いた洗練されたUIを提供するのであれば、これらの処理はより緊密に連携する必要があります[1]。
MirはX Window Systemの新しい実装(Xサーバ)ではなく、X Window Systemを置き換える存在として「ディスプレイサーバ」と名乗っています。Mirの長期的な目標は、「スマートフォンやタブレットといったモバイルデバイスからPCやTVといった家電に至るまで、すべての環境でUnityのユーザインターフェースを実現できるディスプレイサーバ」を作ることです。
Waylandとの関係
同じような位置付けの次世代ディスプレイサーバとして「Wayland」が存在します。WaylandはMirよりも歴史が古く、既に各種ツールキットの多くはWaylandをサポートするようになりました。さらには、KDEは現在ベータ版である4.11でWaylandのサポートに向けての準備を始めていますし、GNOMEも2014年4月のリリースではWaylandに移行する予定です。Xの置き換えとしてWaylandを採用するLinuxディストリビューションも少しずつ増えてきました。
今のところ、Waylandの実装目標や実現できることはMirのそれとほとんど違いがありません[2]。違いがないのであれば、Unity自身も他のデスクトップ環境と情報を共有でき、開発者も充実しているWaylandを採用したほうが良いのではないかと考えるのが一般的でしょうし、Mirの発表時はそのような意見が大半を占めました[3]。しかしUnityとしてはWaylandの良さを認めつつも、Waylandのプロトコルの拡張性に対して不満があったために、新しいディスプレイサーバを作ることにしたようです[4]。
ちなみに、「Waylandの代わりにMirを使う」というのはあくまでUnityとUnityを標準採用するUbuntuのみの話です。Waylandのパッケージはこれまでと同様に提供されますし、Unity以外を採用するUbuntuのフレーバー[5]については、各フレーバーの開発コミュニティに一任することになります。今回の話は広義のUbuntuというシステム上でWaylandが使えなくなるというものではないことに注意してください。
XMirとは
XMirはMirに対応したXサーバーです[6]。といっても実態はこれまで使っていたX.Org ServerにMir対応パッチをあてただけのものです。これにより事実上、MirのうえでXサーバが動いていることになるので従来のXクライアントであるアプリケーションもMir上で動作することになります。
もちろん他のデスクトップ環境も例外ではなく、UnityだけでなくKDEやGNOME Shell、Xfce、LXDEをMirとXMirのうえで動作させている動画をMirの開発者が公開しています。
Mir/XMirを試す
そんなMirですが、冒頭にもあるように2013年10月リリースの13.10から、標準のディスプレイサーバとして採用されることになりました。もともと2013年3月の時点で、13.10から導入する目標であることを公にしていたので、今回の発表はスケジュールどおり開発が進んでいることを意味しています。
これは少し前から、他のフレーバーにおけるMirの扱いについてML上で議論が活発になっていたこと、その中で他のデスクトップ環境を実際に動作させてみたところ予想以上にちゃんと動いたこと、そして何より次期LTSとなる2014年4月リリース予定の14.04よりも前にできるだけ多くの環境でMirを試してみて欲しいことからの判断です[7]。
必要な環境
Mirは現在のところ、Intel、AMD、NVIDIAのオープンソースグラフィックドライバにしか対応していません。例えばRadeon/GeForceのオープンソースではないバイナリドライバでしか動作しない環境やVirtualBoxなどの仮想マシン上だとMirの起動に失敗し、従来のXが起動するモードに自動的にフォールバックします。
次のコマンドを実行して、「i9xx」「radeon」「nouveau」などの文字列が表示されたら動作する可能性があると考えれば良いでしょう。
$ sudo pmap `pidof X` | grep dri.so
さらに、次期13.10として開発中のUbuntuである「Saucy Salamander」の環境が必要です。13.04用のMirもパッケージとしては存在するため動作を確認することはできるのですが、今後も13.04用のパッケージをメンテナンスするかどうかは不明です。Saucyはまだアルファ版な段階であり、Mirを導入するしないに関わらず不安定な部分が多々ありますので、実環境での導入は避けましょう[8]。
よってMirを試すためには、Intel、AMD、NVIDIAいずれかのオープンソースドライバでUbuntuが動作するテスト専用の物理マシンが必要になります。
インストール方法
手順は公式ドキュメントのインストール方法が参考になります。まずはあらかじめ、バイナリドライバを削除しておきましょう。
$ sudo apt-get remove --purge fglrx*
$ sudo apt-get remove --purge nvidia*
次にMir用のPPAを追加してパッケージリストを更新します。
$ sudo add-apt-repository ppa:mir-team/system-compositor-testing
$ sudo apt-get update
さらに、PPAのパッケージの優先度を公式リポジトリのパッケージよりも高くなるように設定し、公式リポジトリの更新によって不整合が発生しないようにします。「/etc/apt/preferences.d/50-pin-mir.pref」を作成し、次の内容を記述してください[9]。
Package: *
Pin: origin "private-ppa.launchpad.net"
Pin-Priority: 1001
Package: *
Pin: release o=LP-PPA-mir-team-system-compositor-testing
Pin-Priority: 1002
最後にシステム全体をアップグレードします。PPAのLightDMはMirディスプレイサーバであるunity-system-compositorに依存しているため、このとき必要なパッケージも追加インストールされます。またxserver-xorg-*のいくつかのパッケージもMir対応版にアップグレードされるはずです。
$ sudo apt-get dist-upgrade
Mirの起動
Mirの起動はLightDMが行います。そのためインストール後、一度LightDMを再起動する必要があります。環境によっては、システム全体を再起動したほうが良いかもしれません。再起動すると、ログイン画面やログイン後の画面はそれほど変わっていないことがわかるでしょう。
そこでプロセスツリーを見て、LightDMから何が起動しているか確認してみましょう。
$ ps afx
(中略)
1193 ? SLsl 0:00 lightdm
1262 ? Sl 6:24 \_ /usr/bin/unity-system-compositor --from-dm-fd 8 --to-dm-fd 13 --vt 7
14072 ? Sl 2:28 \_ /usr/bin/X :0 -core -auth /var/run/lightdm/root/:0 -mir 2 -mirSocket /tmp/mir_socket -nolisten tcp
(後略)
LightDMから起動しているunity-system-compositorがMirの実体です。ただしunity-system-compositor自体は単純にMirを実行するためのAPIを呼び出している小さなプログラムで、本体はlibmirserver.soのほうになります。
さらに現在はXMirを動かすために/usr/bin/XをMirとの通信用オプション付きで起動しています。/usr/bin/X自体はMir用に改変されておらず、そこから内部的に呼び出している/usr/bin/XorgがMir版となります。この環境ではたとえばXeyesのようなXアプリケーションもそのまま動作します。
もしMirが起動できずにXにフォールバックする場合は、上記の出力結果から、unity-system-compositorがなくなり、XはMirのオプションなしで起動することになります。
Mirのログを確認する
うまく起動できないときや動作がおかしいときは、/var/log/lightdm/以下に保存されているMirのログを確認することになります。Mirの起動まではlightdm.logに、Mirの起動以降のログはunity-system-compositor.logに残っています。すべてのログを出力したい場合は、/etc/lightdm/ligthdm.confに以下の行を追加してください。
unity-compositor-command=unity-system-compositor --glog --glog-stderrthreshold=0 --display-report=log
ちなみに、現在のMirはCtrl+Alt+Fxなどで他のVTへスイッチすることはできません[10]。UIが固まったら電源ボタンで強制的に再起動するしか方法はありませんので注意してください[11]。
Mirを無効化する
Mirを一時的に無効化するには、LightDMの設定を変更します。/etc/lightdm/lightdm.conf.d/10-unity-system-compositor.confのtype行の先頭に「#」を追加してコメントアウトするだけです。
[SeatDefaults]
# type=unity
システムを再起動すると、Mirを起動せずに普通のXが起動します。ただし使用されるXはMir版のままですし、各種パッケージの優先度もそのままになります。
Mirを完全にアンインストールするなら、PPAごと削除してしまいましょう。まずは上記の方法で無効化し、さらに再起動を行ったうえで、次のコマンドを実行します。
$ sudo apt-get install ppa-purge
$ sudo ppa-purge ppa:mir-team/system-compositor-testing
(Mir用のパッケージが削除もしくはダウングレードされる)
これによりPPAからインストールしたパッケージの削除や更新されたパッケージのダウングレードが行われ、PPAを導入する前の状態に近い形に戻されます。インストール時に手動で作成した「/etc/apt/preferences.d/50-pin-mir.pref」も削除してしまってかまいません。
今後の予定
実際に動く状況に到達できたことで、Mirの今後のスケジュールも少しずつ詳しくなっています。まずMirの短期的目標は、Mirの各種パッケージをPPAから公式リポジトリに移動することです。これは2013年7月中、遅くともFeatureFreezeである2013年8月後半までには行われるはずです。また、PhoronixのテストでXMirの予想以上のパフォーマンスの低下が見られましたので、これの調査も優先度の高い事項になっています。
Ubuntu 13.10のリリースのタイミングでは、「Mirが標準で使われ、ほぼすべてのアプリケーションはXMir上で動作する」「バイナリドライバを使う場合は、従来のXサーバにフォールバックする」という状態になる予定です[12]。後者についてはバイナリドライバのMir対応が間に合えば、変わるかもしれません。
Ubuntu 14.04 LTSまでにはバイナリドライバの対応も終えている予定ですので、UnityとしてはXMirは必要なくなります。ただし、他のフレーバーの対応状況も踏まえて、LTSとしてXMirをメンテナンスし続ける予定です。
スマートフォンやタブレット向けのUbuntu Touchは、13.10でMirが導入される予定です。現在の開発版ではまだインストールされていませんが、別途PPAを追加することで動作確認できます。これも2013年7月中には移行する見込みです。
まとめ
MirはUbuntuの中でもとりわけ若く、かなり挑戦的なプロジェクトです。まだ「ユーザに広くテストを募る」段階ですらなく、今回紹介した方法もおそらくすぐに古くなってしまうでしょう。
それだけに「新しいモノを作っている・それに関わっている感」は味わえます。Mirのコードリポジトリの履歴を視覚した動画を見ると、頻繁に全体への変更が加わっていることや、プロジェクトの開始からずっとほぼ数人で作業を行っていることがわかるでしょう。
そして腕に自信のある人はただ試すだけでなく、ソースからビルドしてみたり、Canonicalに雇われてみたりするのも良いかもしれませんね。