Mir 1.2.0がリリースされました
2019年5月28日、「Mir 1.2.0」がリリースされました。Mirとは
「Mir」は次世代のディスプレイサーバーです。デスクトップやモバイルデバイス、そしてIoTまで、幅広い分野をサポートするディスプレイサーバーです。
デスクトップPCから見れば、既存のXサーバーを置き換えるソフトウェアになります。
「Mir」に関する詳細は、以下を参照してください。
- 公式サイト:Mir Display Server
- ユーザー向けドキュメント:Getting and Using Mir
- 開発者向けドキュメント:Welcome to Mir
- GitHub:MirServer/mir
- コミュニティー:Mir category
Mirを採用するデスクトップ環境
現在作業中及び方針含め、以下のデスクトップ環境で「Mir」が採用されます。- MATE(Ubuntu MATE)
- LXQt(Lubuntu)
- Unity 8(Ubuntu Touch/Debian/Ubuntu)
「Mir」は「Wayland」コンポジターを実装し、「Wayland」上で動作するシェルを開発できます。
注目
wlcsによるテスト
「Mir 1.2.0」は、最近リリースされた「Wayland Conformance test Suite(wlcsパッケージ)」 を使用してテストが行われた「Mir」の初リリースです。Mirベースのシェル開発のサポート改良
「Mir 1.2.0」は、Wayland拡張を利用したシェル開発のサポート改良に焦点をあてたリリースです。シェル独自のWayland拡張をサポートするため、必要なAPIを実装した新しい「libmirwayland-dev」パッケージが提供されています。
またこれに関連して「MirAL API」にも変更が加えられています。
もちろん本リリースでは、その他不具合の修正も行われています。
MirAL
WaylandExtensions
「MirAL(Mir Abstraction Layer)」では、「WaylandExtensions」にシェル独自のWayland拡張を登録する機能が追加されました。MinimalWindowManager
「MinimalWindowManager」は、デフォルトのウィンドウ管理ポリシーを提供する新しいクラスです。また「MinimalWindowManager」は、「Wayland」クライアントがウィンドウのタッチジェスチャーによる移動及びリサイズを開始できるようにするため、必要な機能の実装が行われました。
X11サポートの改良
必要に応じて「Xwayland」を起動できるようになりました。これにより「X11-via-Xwayland」のサポートを試験的なサポートから本サポートへ切り替える準備が整いつつあります。
この作業は可能であれば「Ubuntu 19.10」の開発期間中に完遂する予定です。
Wayland
世の中にはある特定の要求をサポートするために特化した様々なWayland拡張プロトコルが存在します。サポートするWayland拡張プロトコル
「Mir」ではこれらすべてのWayland拡張プロトコルをサポートするのではなく、クライアントアプリケーションの要求やセキュアな環境を維持するために必要なWayland拡張プロトコルを厳選してサポートしています。本リリースでサポートしているWayland拡張プロトコルは、以下のとおりです。
プロトコル | デフォルトで有効? |
---|---|
wl_shell | 有効 |
xdg_wm_base | 有効 |
zxdg_shell_v6 | 有効 |
zwlr_layer_shell_v1 | 無効 |
zxdg_output_v1 | 無効 |
ほとんどのデスクトップ及びIoTアプリケーションでは、上記のサポートで十分要求を満たします。
もちろんこれら以外にもWayland拡張プロトコルが存在していることをMirの開発者は認識しています。
しかし誰でも独自のWayland拡張プロトコルを定義できるため、あらゆるWayland拡張プロトコルをサポートすることは現実的ではありません。
独自の拡張を追加する仕組み
そこで「Mir」では、「Mir」で開発されたシェルに独自の拡張を追加できるようにする仕組みを作成しました。これを行うために開発者は以下の作業が必要になります。
- libmirwayland-devのインストール
- プロトコルジェネレーターを使用し、ベースクラスを生成する
- 必要な関数の実装を派生クラスで行う
- ”builder”を登録し、Mirがプロトコルを利用できるようにする
サンプルコードは以下を参与してください。
この仕組みはまだ安定版ではなく、フィードバックを募集しています。
フィードバック内容によっては改良のために後方互換性がない変更が行われる可能性があります。
Mirで開発
「Mir」上で動作するシェルを開発する開発者なら、「Mir」が優れたデフォルトの振る舞いと、その振る舞いをカスタマイズする簡素だが強力なAPIを提供していることに注目してください。キオスク、タイリング、そしてデフォルトのフローティングウィンドウスタイルのウィンドウ管理をカスタマイズするサンプルが提供されています。
「Ubuntu」「Fedora」「Arch」でパッケージ化されたサンプルを見つけ出すことができるでしょう。
最新版のMir
現在サポート中の「Ubuntu」では、「Mir」の「Release PPA」を通じて最新版の「Mir」をインストールできます。
sudo add-apt-repository -yu ppa:mir-team/release
sudo apt install mir-graphics-drivers-desktop # Drivers for Mesa "open" drivers
sudo apt install mir-graphics-drivers-nvidia # Drivers for Nvidia binary drivers
sudo apt install mir-demos # Demo programs
sudo apt install libmiral-dev # Development libraries & headers
sudo apt install libmirwayland-dev # Library & code generator for Wayland extensions
sudo apt install wlcs # Wayland Conformance Test harness & headers
sudo apt install mir-graphics-drivers-desktop # Drivers for Mesa "open" drivers
sudo apt install mir-graphics-drivers-nvidia # Drivers for Nvidia binary drivers
sudo apt install mir-demos # Demo programs
sudo apt install libmiral-dev # Development libraries & headers
sudo apt install libmirwayland-dev # Library & code generator for Wayland extensions
sudo apt install wlcs # Wayland Conformance Test harness & headers
変更点一覧
「Mir 1.2.0」の変更点一覧です。
- ABI summary:
. mirclient ABI unchanged at 9
. miral ABI unchanged at 3
. mirserver ABI bumped to 48
. mircommon ABI unchanged at 7
. mirplatform ABI unchanged at 16
. mirprotobuf ABI unchanged at 3
. mirplatformgraphics ABI unchanged to 16
. mirclientplatform ABI unchanged at 5
. mirinputplatform ABI unchanged at 7
. mircore ABI unchanged at 1
. mircookie ABI unchanged at 2
- Enhancements:
. [Wayland] Split out a new mirwayland package to enable shell
implementors to add protocol extensions.
. [Wayland] Initial support for XDG output protocol
. [Wayland] Disconnect clients when Mir exceptions are raised in
processing requests
. [MirAL] Extend MirAL API for managing Wayland extensions
. [MirAL] Provide a new MinimalWindowManager strategy. (Fixes #761, #816)
. [MirAL] Improve miral-shell help text rendering. (Fixes #799)
. [benchmarks] Generate USDT tracepoints from LTTNG tracepoints
. [benchmarks] Add a commit-top-present latency script
. Support multi-output in Mir-on-X
- Bugs fixed:
. [Wayland] Better handle window role state changes (fixes #836)
. [X11] Improve listen/x-client sockets (Fixes: #478)
. Additional symbol needed for g++8.3/ld/Alpine. (Fixes #771)
. [X11] Make sure Xwayland exits to ensure a clean shutdown. (Fixes: #796)
. [MirAL] Ensure internal clients don't hang because of queued requests.
(Fixes #753)
. Don't lock KeyRepeatDispatcher::repeat_state_mutex unnecessarily in a
callback. (Fixes: #818)
. Use drmIsMaster() from libdrm when it is provided. (Fixes: #813)
. Ensure an already focussed surface really gets input focus. (Fixes #823)
. mirclient ABI unchanged at 9
. miral ABI unchanged at 3
. mirserver ABI bumped to 48
. mircommon ABI unchanged at 7
. mirplatform ABI unchanged at 16
. mirprotobuf ABI unchanged at 3
. mirplatformgraphics ABI unchanged to 16
. mirclientplatform ABI unchanged at 5
. mirinputplatform ABI unchanged at 7
. mircore ABI unchanged at 1
. mircookie ABI unchanged at 2
- Enhancements:
. [Wayland] Split out a new mirwayland package to enable shell
implementors to add protocol extensions.
. [Wayland] Initial support for XDG output protocol
. [Wayland] Disconnect clients when Mir exceptions are raised in
processing requests
. [MirAL] Extend MirAL API for managing Wayland extensions
. [MirAL] Provide a new MinimalWindowManager strategy. (Fixes #761, #816)
. [MirAL] Improve miral-shell help text rendering. (Fixes #799)
. [benchmarks] Generate USDT tracepoints from LTTNG tracepoints
. [benchmarks] Add a commit-top-present latency script
. Support multi-output in Mir-on-X
- Bugs fixed:
. [Wayland] Better handle window role state changes (fixes #836)
. [X11] Improve listen/x-client sockets (Fixes: #478)
. Additional symbol needed for g++8.3/ld/Alpine. (Fixes #771)
. [X11] Make sure Xwayland exits to ensure a clean shutdown. (Fixes: #796)
. [MirAL] Ensure internal clients don't hang because of queued requests.
(Fixes #753)
. Don't lock KeyRepeatDispatcher::repeat_state_mutex unnecessarily in a
callback. (Fixes: #818)
. Use drmIsMaster() from libdrm when it is provided. (Fixes: #813)
. Ensure an already focussed surface really gets input focus. (Fixes #823)