Waylandクライアントからウィンドウの移動が可能に
「Mir」の「Wayland」サポートが改善され、Waylandクライアントからウィンドウを移動できるようになりました。これは例えば、GNOMEアプリ(GTK+アプリ)でよく使われる「CSD」でウィンドウを移動できるようになった、ということです。
- This Week in Mir (23rd Feb, 2018)
- Allow Window movement to be initiated by Wayland clients (Fixes #61)
NVIDIAドライバーでX11バックエンドがクラッシュする問題の修正
他にもNVIDIAドライバーでX11バックエンドがクラッシュする問題が修正されました。wayland_connector.cppのリファクタリング
巨大でモノシリックなソースコードになった「wayland_connector.cpp」のリファクタリング作業も行われています。X11クライアントのサポート方法のアイデア
MirサーバーでX11クライアントをサポートする方法に関し、以下でアイデアが紹介されています。今週、X11クライアント(X11アプリ)をMirサーバーでどのようにサポートすべきか、その手法について議論が行われました。
この議論は、「UBports」や「MATE」及び「mir-kiosk」上で動作する”Core ”Snapsの関係者と共に行われました。
「MATE」に関しては以前紹介したように、「Mir」を「Wayland」コンポジターとして利用できないか、「MATE」の開発者が関心を示しています。
現状あくまでアイデアを纏めたものであり、サポート方針に関しまだ何も決まっていません。
XwaylandとXmir
MirサーバーでX11クライアントをサポートする既存の仕組みが2つあります。「Xwayland」と「Xmir」です。
いずれもホストシェル上で実装されたX11サーバーです。
Xwayland
「Xwayland」は、「Wayland」を使用してホストシェルに接続します。また「Xwayland」は、外部のXウィンドウマネージャーを必要とします。
Xmir
「Xmir」は「libmirclient」を使用してホストシェルに接続します。また「Xmir」は、シンプルなXウィンドウマネージャーを提供しています。
「Canonical」時代の「Unity 8」では、各X11アプリごとに「Xmir」インスタンスを実行し、強力なアプリの隔離環境を提供していました。
これによりセキュアな環境を提供していましたが、その利点よりもトラブルのほうが多いとの意見が「UBports」から寄せられています。
Internet of Things(IoT)
IoTの観点から見てみると、「Mir」のIoTに対するアプローチは、Snapsがベースになっています。またSnapで提供される「mir-kiosk」をディスプレイサーバーとして使用しています。
「Wayland」プロトコルはこのアプローチと親和性が高く、クライアントのSnapsに対しても推奨されるアプローチです。
(ところで現在「Mir」プロトコルは、既存のユーザー向けにサポートが継続されていますが、将来的に推奨するプロトコルではありません。)
$DISPLAY環境変数
Classic Snapsで提供されるX11クライアントアプリケーションは、X11デスクトップ上で動作し、ホスト環境の環境変数から「$DISPLAY」を参照します。一方”Core”上で動作し、Confined Snapsで提供されるクライアントアプリケーションは、振る舞いが異なります。
”Core”では、Confined SnapsにX11サーバーを提供するためのプロトコルがありますが、クライアントはソケットを標準的な場所から検索し、「$DISPLAY」を設定しなければなりません。
開発チームはIoT環境でX11の利用を推奨したくはないのですが、その一方で「Wayland」を直接サポートしていないアプリをサポートするために、X11環境が必要であるとの認識を持っています。
X11のコネクションのサポート
開発チームの現在の考えでは、「mir-kiosk」でX11のコネクションのサポートは行いません。そのため、X11を必要とするクライアントアプリケーションは、自身でそのコネクションを提供する必要があります。
つまり以下のような処理が必要になります。
- $DISPLAYが設定されていなければソケットを検索し、ソケットが見つかれば$DISPLAYを設定する
- ソケットが見つからなければ、Xwaylandを利用してソケットを作成する
- アプリを実行する
「mir-kiosk」のターゲットとなる”Core”環境において、SnapのクライアントでX11サーバーの隔離を行うことは、不便という程のものでもなく、プロトコルに由来する潜在的なセキュリティーの問題を抑えることにつながります。
デスクトップ(モバイルデバイス含む)
デスクトップでも同様に開発チームは、X11の利用を推奨したくはないのですが、その一方で「Wayland」を直接サポートしていないアプリをサポートするために、X11環境が必要であるとの認識を持っています。デスクトップにおいて、すでに存在するWaylandサーバーの実装状況や、UBportsから寄せられたフィードバックから分かることは、単一のX11サーバーの提供及びその要望です。
X11で発生し得るセキュリティーの課題は、避けられないものとして認識されています。
Xウィンドウマネージャー
開発チームが「Xmir」から得られた経験は、Xウィンドウマネージャーをクライアント側で実装する手法は、イベントの解釈時にコンテキストの欠如が発生しうるため、問題があるということです。この問題に対する解決策は、特権を持つプロトコルを通じてそのコンテキストを提供するか、Xウィンドウマネージャーをサーバーに埋め込んでしまうことです。
X11クライアントのサポート
X11クライアントのサポートが必要ならば、すべての「Mir」ベースのサーバーで利用できるようにする必要があります。これは「MirAL」の一部として提供するか、追加のサポートライブラリーの提供により実現することになります。
ただ開発チームは、「miral-kiosk」のようにいくつかのシナリオではサポートを避け、また、最終的にこのような状況はなくなって欲しいと考えています。
サーバー側の実装は以下のようになります。
- X11ソケットを生成し、イベントのリッスンを行う
- イベントが発生したら、ソケットの処理を行うXwaylandインスタンスをスポーンする
- Xウィンドウマネージャーとして接続する
- Xwaylandが終了したら、1に戻る
- 閉じる時にすべてのXwaylandインスタンスを終了させる
「3.」の実装が完了するまで、「XMir」を一時的な実装として利用できるでしょう。