Linux 上の Wayland とは何ですか? X との違いは何ですか?
公開: 2023-07-17X11 (X Window System) を使用すると、グラフィカル デスクトップ環境でウィンドウを表示および制御できます。 Wayland は X11 の代替品です。 より高速かつ安全になるように設計されています。 それらについて知っておくべきことは次のとおりです。
ウェイランドとは何ですか?
Xの多くの名前
X11 の仕組み
Wayland の仕組み
Wayland のアプリケーションへの導入の遅れ
Wayland または X11 を使用していますか?
Wayland と X11 のどちらを使用するべきですか?
ウェイランドとは何ですか?
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 を意味するものではなく、「Xtra」や「Xtended」などを意味するものでもありません。 以前のウィンドウ システムは「Windows」を表す「W」と呼ばれていましたが、新しいプロジェクトを開始するときに、単純にアルファベットの次の文字に移動しました。
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 で Wayland を使用して毎日のドライバーに問題はありませんでした。
X11 アプリケーションの作成者の中には、自分のアプリケーションが XWayland で正常に動作し、Wayland アプリケーションに作り直す必要がなくなることを期待している可能性があります。 新しいアプリケーションが Wayland を採用する一方で、既存の X11 アプリケーションの大部分は現状のままであり、XWayland に期待を抱いているため、Wayland への取り込みと移行が長くて遅いとしても驚かないでください。
関連: Ubuntu 21.04「Hirsute Hippo」の新機能
Wayland または X11 を使用していますか?
主要な Linux ディストリビューションのいずれかを使用している場合は、すでに Wayland を使用している可能性があります。 以下のコマンドを発行することで確認できます。
エコー $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
からの出力を「表示」設定に関する情報に制限し、 --value
オプションを使用して値のみを返します。 loginctl
からの応答に「Display=」文字列が含まれることは望ましくありません。 これらすべてによりセッション ID が得られます。
セッション ID を外部のloginctl
に渡し、 show-session
コマンドを使用してセッションの属性を表示します。 -p
(プロパティ) オプションを使用して出力をセッション タイプに関する情報に制限し、 --value
オプションを使用して「Type=」ラベルなしで値を表示します。
Wayland を使用しているコンピューターでは、次のように表示されます。
X Window System を実行している場合は、次のように表示されます。
Wayland と X11 のどちらを使用するべきですか?
問題がない限り、すでに使用しているものを使い続けることもできます。 ただし、不安定になったり、画面の更新がぎくしゃくしたりする場合は、使用していない方に移行してみてください。
GNOME で他のシステムを切り替えて試したい場合は、ログイン画面でユーザー名をクリックし、ディスプレイの右下隅にある歯車のアイコンをクリックします。
メニューにはさまざまなバージョンの GNOME が表示されます。 「Xorg」と記載されているオプションは X Window System を使用し、オプションは Wayland を使用しません。
関連: Linux で環境変数を一覧表示する方法