LinuxのWaylandとは何か?Xとの違いは?

Waylandは、Linuxディストリビューション用の代替ウィンドウシステムです。古いX11規格に代わるものです。アプリケーションが動作するように変更する必要があるため、これまでの導入は遅れています。執筆時点では、X11に対する主な利点はセキュリティの向上です。

X11またはX Window Systemは、グラフィカルデスクトップ環境でウィンドウを表示および制御できるようにします。Waylandは、X11に代わるものです。より高速で安全になるように設計されています。これらについて知っておくべきことを紹介します。

Waylandとは?

Waylandは、数十年にわたってLinuxのデフォルトのウィンドウシステムであったX11の最新の代替品です。Waylandは通信プロトコルであり、X Windowのディスプレイサーバーとクライアントアプリケーション間のメッセージングを定義します。Waylandプロジェクトは、アプリケーションがプロトコルを使用できるようにするクライアントとサーバーのライブラリを提供します。

Waylandプロジェクトは、2008年にRed Hatの開発者によって開始されました。

Xの多くの名前

X Window Systemはウィンドウシステムであり、1984年にマサチューセッツ工科大学によってUnixオペレーティング用に最初にリリースされました。アプリケーションは、ウィンドウシステムによって提供される機能に基づいて構築し、ユーザーインターフェイスを生成できます。

1987年までに、X Window Systemはバージョン11に達し、X11として知られるようになりました。現在はX.Org Foundationによって管理されています。1987年以降、多くの小規模なリリースがありましたが、バージョン11のままです。執筆時点では、現在の安定バージョンはX11R7.7です。

名前の「X」はローマ数字の10を示すものではなく、「X-tra」、「Xtended」またはその類を示唆するものでもありません。以前のウィンドウシステムは「W」と呼ばれ(「windows」の略)、新しいプロジェクトを開始したときに単にアルファベットの次の文字に移動しました。

X Window Systemは、「X」、「X11」、「Xorg」、「X Windows」、および「X Window System」と呼ばれています。

X11の仕組み

X Window Systemは、マウスとの対話、ウィンドウの描画と移動など、低レベルのイベントとプリミティブを処理します。アプリケーションは、ビジュアルとインターフェイスデザインを処理します。ウィンドウの外観、ボタンの種類、ボタンの場所などは、アプリケーションプログラマーが行う選択です。X Window Systemは、その結果のデザインを画面に描画します。

X11は、動作しているX Window Systemのさまざまなコンポーネント間で渡す必要がある通信の定義を提供します。この通信は、X対応アプリケーションがウィンドウとインターフェイス要素を描画するために使用するコードがアプリケーション内にないため、必要です。その作業は、Xサーバーとウィンドウマネージャーで共有されます。

アプリケーションは、Xサーバーのクライアントです。ウィンドウマネージャーは、特別なタイプのクライアントです。Xサーバーは、リソースの管理、描画要求の実行、およびキーの押下やマウスのクリックなどのイベントを適切なアプリケーションにマーシャリングする役割を担っています。

また、ウィンドウマネージャーとアプリケーション間の通信の中継者としても機能し、メッセージを相互に仲介します。ウィンドウマネージャーは、アプリケーションが開いているウィンドウのリスト、画面上の位置、サイズ、重なっているかどうかなどを保持しています。

合成ウィンドウマネージャーは、ウィンドウごとにオフスクリーンバッファを保持します。これらのバッファを1つの画像に合成して、最上位のウィンドウ(デスクトップ全体を表す)を表し、画面に書き込まれます。

GNOMEやKDEを含むすべての最新のグラフィカルデスクトップ環境は、合成ウィンドウマネージャーを使用しています。

Waylandの仕組み

Waylandは、X11の問題を解決することを目的としています。X11アーキテクチャには、多くのメッセージングが必要です。Xサーバーは、クライアントとウィンドウマネージャーの間にあります。また、すべてと(カーネルを介して)グラフィックハードウェアの間にも存在します。メッセージングの量が多すぎると、待ち時間やカクカクした視覚的な体験につながる可能性があります。

コードベースも大きすぎます。サーバーアプリケーション、ウィンドウマネージャーアプリケーション、クライアントが使用するX11ライブラリがあります。コードベースが大きい(および古い)ほど、維持が難しくなり、レガシーコードに苦労することが多くなります。

Waylandはアーキテクチャを変更することで、コードベースを最新化し、合理化し、パフォーマンスの向上とセキュリティの強化を実現しました。

実際には、サーバーとウィンドウマネージャーを1つのアプリケーションに統合しました。現在カーネルによって実行されている機能を実行するコードを削除しました。作業を複製するのではなく、カーネルの機能を活用しました。

Waylandでは、合成器とクライアントアプリケーションが直接通信します。合成器は、デスクトップ上のウィンドウの場所、サイズ、状態に関する内部マッピングを維持します。キーボード、マウス、ウィンドウの変更イベントを仲介し、それらのウィンドウを所有するアプリケーションに送信します。

アプリケーションは、それに応じてユーザーインターフェイスを更新します。大きな違いは、リンクされたWaylandライブラリを使用して、アプリケーション自体内でレンダリングを実行することです。

アプリケーションは、ウィンドウを保持するために使用されるバッファを更新するか、新しいバッファを作成して古いバッファを破棄します。次に、クライアントアプリケーションは合成器に通知を送信し、ウィンドウマッピングを更新し、新しいまたは更新されたビデオバッファを使用するように指示します。

この単純化されたアーキテクチャと最新のコードデザインにより、パフォーマンスが向上し、特にウィンドウのサイズ変更とドラッグがスムーズかつ流動的に表示されます。

Waylandのアプリケーションの遅い導入

Waylandは、Debian 10以降、Fedora 34以降、Ubuntu 18.04以降、およびArch Linuxなどの他のディストリビューションのデフォルトのウィンドウシステムです。それにもかかわらず、Waylandはほとんどの場合、X11アプリケーションを実行します。

XWaylandと呼ばれる互換性レイヤーがあり、X11アプリケーションをWaylandで実行できます。これは、X11アプリケーションの大部分が変更されず、Waylandに移植されていないことが必要だったためです。

GNOMEのようなWayland合成器を提供するデスクトップ環境では、GNOMEテキストエディターやマップ、ファイル、カレンダーなどの公式アプリケーションはすべてWaylandネイティブアプリケーションです。しかし、X11アプリケーションの大部分は、依然として手を加えられておらず、ネイティブのX11アプリケーションです。

XWaylandミドルウェアは通常は問題なく動作しますが、画面録画などの低レベルの画面関連機能を実行する一部のX11アプリケーションで問題が発生することがあります。NVIDIAでWaylandを使用することは、X11を使用する場合と同じくらい面倒になる可能性がありますが、NVIDIA GeForce GT 1030 GPUで使用して、日常的に問題なく使用しています。

X11アプリケーションの作者の中には、自分のアプリケーションがXWaylandで問題なく動作することを期待しており、Waylandアプリケーションに作り直す作業を避けようとしている人もいます。新しいアプリケーションがWaylandを採用しても、既存のX11アプリケーションの大部分はXWaylandに期待を寄せて現状のままの場合、Waylandの導入と移行が長くて遅くなることに驚かないでください。

Waylandを使用していますか、それともX11を使用していますか?

主要なLinuxディストリビューションのいずれかを使用している場合、すでにWaylandを使用している可能性があります。以下のコマンドを実行して確認できます。

echo $XDG_SESSION_TYPE

Waylandを使用しているシステムでは、出力が次のようになります。

X Window Systemを実行しているシステムでは、次のように表示されます。

まれに、XDG_SESSION_TYPE環境変数が設定されていません。その場合は、代わりにこのコマンドを使用できます。

loginctl show-session $(loginctl show-user $(whoami) -p Display --value) -p Type --value

内側のネストされたloginctlコマンドは、show-userコマンドを使用して指定されたユーザーのプロパティを表示します。whoamiコマンドは、現在のユーザーの名前を返します。-p(プロパティ)オプションは、loginctlからの出力を「Display」設定に関する情報に制限し、--valueオプションを使用して値のみを返します。loginctlからの応答に「Display=」文字列は必要ありません。これらすべてにより、セッションIDが得られます。

セッションIDを外側のloginctlに渡し、show-sessionコマンドを使用してセッションの属性を表示します。-p(プロパティ)オプションを使用して出力をセッションの種類に関する情報に制限し、--valueオプションを使用して「Type=」ラベルなしで値を表示します。

Waylandを使用しているコンピューターでは、次のように表示されます。

X Window Systemを実行している場合は、次のように表示されます。

Waylandを使用すべきですか、それともX11を使用すべきですか?

問題が発生しない限り、すでに使用しているものを使い続けることができます。しかし、不安定性や画面の更新のぎくしゃくが気になる場合は、使用していないものに切り替えてみてください。

GNOMEで、別のシステムに切り替えて試したい場合は、ログイン画面でユーザー名をクリックしてから、画面の右下隅にある歯車アイコンをクリックします。

メニューにはさまざまなバージョンのGNOMEが表示されます。「Xorg」と記載されているオプションはX Window Systemを使用し、記載されていないオプションはWaylandを使用します。