89
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Waylandとは?

Last updated at Posted at 2016-10-06

X11に替わるものとして、いよいよGnomeやKDEの対応も完了し実用段階に入ったと言えるWaylandですが、「Wayland」という語が表すものが複数あるため混乱を招きやすいようです。
ここでは簡単に「Wayland」が持つ3つの意味を解説したいと思います。
(なおこの3つというのは公式が謳っているわけではなく筆者が観測した範囲で「Wayland」という語がどのように使われているかを独自にカテゴライズしたものであることをご了承ください)

ライブラリとしてのWayland

Waylandのリポジトリはここに有りますが、ビルドしてもいくつかのツールと、ライブラリが出来上がるのみで、これだけでX11サーバの代わりをしてくれるようなものではありません。

では、この「ライブラリとしてのWayland」は何者かというと、一言で表すと「プロトコル作成フレームワーク」です。

ビルドしてできるwayland-scannerコマンドはXMLファイルに書かれたプロトコルの定義を読み取り、サーバー/クライアント双方のソースを生成します。ユーザーは生成されたソースとWaylandのライブラリを用いれば、エンディアンやアライメントに悩まされること無く通信するサーバー/クライアントアプリが作成できるというわけです。

なおWaylandリポジトリにはprotocol/wayland.xmlというプロトコルが定義されておりこれは「Waylandプロトコル」と呼ばれています。

プロトコルとしてのWayland

「Waylandプロトコル」といったとき前述のwayland.xmlで定義された狭義の「Waylandプロトコル」と、Waylandにより生成されたプロトコル全体を指す広義の「Waylandプロトコル」を表す場合の2通りの場合があります。

wayland.xmlで定義されたWaylandプロトコルは、Waylandコンポジタに対してクライアントアプリから、ウィンドウの作成や描画の要求。逆にWaylandコンポジタからクライアントアプリに対してマウス、キーボード、タッチなどのイベントの通知などが定義されています。

WaylandリポジトリにはWaylandプロトコル1種類しか定義されていませんが、例えばWaylandコンポジタのリファレンス実装であるwestonでは10種類を超えるプロトコル(xdg-shellプロトコル、desktop-shellプロトコル等)が定義されています。

アーキテクチャとしてのWayland

記事の冒頭でも書きましたが、Waylandはよく「X11を置き換えるもの」という説明がなされることが有ります。
その場合はこのアーキテクチャとしてのWaylandを指しています。

waylandアーキテクチャ

上図はWaylandのサイトにあるアーキテクチャ図です。②、③でWaylandプロトコルが使用されます。
この図のWaylandコンポジタが各アプリケーションの描画をコンポジションして実際の画面に描画する役割を果たします。

Waylandコンポジタには様々な実装があり、Waylandプロジェクトによるリファレンス実装がwestonです。

また最近はGnomeやKDEもWayland対応しており、それぞれMutter, KWinがWaylandコンポジタの役割を果たしています。

より学ぶために

実際に手を動かしてWaylandを学ぶための入門記事を書きました。参考にしてください。

作って学ぶWayland

89
62
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
89
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?