ウェブサイト検索

LinuxにおけるWaylandとは何ですか、そしてそれはXとどのように異なりますか?


Waylandがどのように動作しているのか考えたことがありますか?

重要なポイント

WaylandはLinuxディストリビューションのための置き換えウィンドウシステムです。古くなったX11標準を置き換えます。それはアプリケーションがそれと連携するために変更される必要があるため、これまでの採用は遅れています。執筆時点では、X11に対する主な利点はセキュリティの向上です。

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

Waylandとは何ですか?

Waylandは、数十年にわたりLinuxの標準ウィンドウシステムであったX11の現代的な置き換えです。Waylandは通信プロトコルであり、X Windowディスプレイサーバーとクライアントアプリケーション間のメッセージのやり取りを定義します。Waylandプロジェクトは、アプリケーションがこのプロトコルを使用できるようにするクライアントおよびサーバーライブラリを提供しています。

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

Xの多くの名前

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

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

名前の「X」はローマ数字の10を意味するわけでも、「Xtra」や「Xtended」などを示すわけでもありません。以前のウィンドウシステムは「W」と呼ばれていましたが、それは「windows」の頭文字であり、新しいプロジェクトを始める際に、彼らは単にアルファベットの次の文字に移動したのです。

X Window Systemは「X」、「X11」、「Xorg」、「X Windows」、および「X Window System」と呼ばれることがあります。

X11の動作原理

Xウィンドウシステムは、マウスとの対話やウィンドウの描画と移動など、低レベルのイベントやプリミティブを処理します。アプリケーションは視覚とインターフェースデザインを担当します。ウィンドウの外観、持っているボタン、そしてそれらのボタンがどこに配置されているかは、アプリケーションプログラマーが決定する選択肢です。Xウィンドウシステムは、その結果得られたデザインを画面に描画します。

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

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

それはまた、ウィンドウマネージャーとアプリケーション間のコミュニケーションにおいて仲介者として機能し、メッセージを相互に仲介します。ウィンドウマネージャーは、アプリケーションが開いているウィンドウのリスト、画面上の位置、サイズ、重なりの有無などを管理しています。

コンポジットウィンドウマネージャは、各ウィンドウのためにオフスクリーンバッファを維持します。これらのバッファを合成して、最上位のウィンドウを表す単一の画像を作成します。これが全デスクトップを表し、画面に書き込まれます。

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アプリケーションです。

関連:NvidiaがオープンソースのLinux GPUドライバーをリリース、ただし条件あり

XWaylandミドルウェアは通常は問題なく機能しますが、スクリーン録画などの低レベルの画面関連機能を実行するいくつかのX11アプリケーションには問題がある場合があります。NVIDIAを使用したWaylandは、X11と同様に悩ましいことがありますが、私のデイリードライバーでNVIDIA GeForce GT 1030 GPUを使用する際には問題がありませんでした。

X11アプリケーションのいくつかの著者は、自分たちのアプリケーションがXWaylandで問題なく動作することを期待している可能性が高く、Waylandアプリケーションに再構築する必要がないことを望んでいます。Waylandの普及と移行が長く遅いものであることに驚かないでください。新しいアプリケーションがそれを採用する一方で、既存のX11アプリケーションの大多数はそのままとなり、XWaylandに希望を託するでしょう。

関連: Ubuntu 21.04 'Hirsute Hippo' の新機能

あなたは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ウィンドウシステムを使用し、言及されていないものはWaylandを使用します。

関連: Linuxで環境変数をリストする方法

関連記事: