Wayland
Wayland はディスプレイサーバープロトコルです。X Window System の後継となることを目指しています。Wikipedia に Wayland と Xorg の比較 が掲載されています。
Wayland プロトコルを使用するディスプレイサーバは、コンポジット型ウィンドウマネージャ としても機能するため、コンポジタ と呼ばれます。以下にWayland コンポジタのリストを示します。
レガシーな X11 アプリケーションをシームレスに動かすための後方互換性として、XWayland を使うことができます。これは Wayland に X サーバを提供します。
要件
ほとんどの Wayland コンポジタは KMS を利用しているシステムで動作します。
また、Wayland はただのライブラリなので、それだけでは使い物になりません。X サーバーを置き換えるには、(Weston や Sway などの) コンポジタあるいは (GNOME や KDE など) デスクトップ環境が必要です。
GPU ドライバーと Wayland コンポジタは同一のバッファ API に対応している場合に互換性があります。主要な API は2つ存在します: GBM と EGLStreams です。
バッファ API | GPU ドライバーのサポート | Wayland コンポジタのサポート |
---|---|---|
GBM | NVIDIA 以外の全てのドライバー | 全てのコンポジタ |
EGLStreams | NVIDIA | GNOME, KDE (Plasma 5.16+) |
コンポジタ
タイル型とスタック型の違いは、ウィンドウマネージャ#種類を参照してください。
タイル型
- Cardboard — スクロールコンポジタ。wlroots をベースに、PaperWM にインスパイアされています。
- dwl — wlroots ベースの dwm ライクな Wayland コンポジタ。
- japokwm — wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。
- river — dwm bspwm にインスパイアされた動的なタイル型 Wayland コンポジタ。
- waymonad — Haskell で書かれた xmonad にインスパイアされた Wayland コンジタ。
- https://github.com/waymonad/waymonad || パッケージが存在しないか AUR で検索
スタック型
- Enlightenment — Enlightenment#Enlightenment を手動で起動する を参照してください。詳細: [1] [2]
- Greenfield — Web ブラウザーで実行され、リモートアプリケーションを表示できます。
- https://greenfield.app/ || パッケージが存在しないか AUR で検索
- Grefsen — 最小限のデスクトップ環境を提供する Qt/Wayland コンポジタ。
- https://github.com/ec1oud/grefsen || パッケージが存在しないか AUR で検索
- hikari — FreeBSD で活発に開発されている cwm にインスパイアされた wlroots ベースのコンポジタ。Linux もサポートしている。
- KDE KWin — KDE#Starting Plasma を参照。
- Liri Shell — Liri の一部、しかし、QtQuick と QtCompositor を使って Wayland 用のコンポジタとして作られています。
- labwc — Openbox にインスパイアされた wlroots ベースのコンポジタ。
- Mutter — GNOME#Starting を参照してください。
- wayfire — Compiz にインスパイアされ、wlroots に基づく 3D コンポジタ。
- https://wayfire.org/ || wayfireAUR
- Weston — Wayland コンポジタのリファレンス実装。
- wio — Plan 9 のリオデスクトップのルックアンドフィールを複製することを目的とする wlroots ベースのコンポジタ。
- https://wio-project.org/ || パッケージが存在しないか AUR で検索
その他
- Cage — キオスクのような単一のフルスクリーンアプリケーションを表示します。
- Maze Compositor — Qt を使用して 3D 迷路ウィンドウをレンダリングします。
- https://github.com/imbavirus/mazecompositor || パッケージが存在しないか AUR で検索
- Motorcar — バーチャルリアリティを使用して 3D ウィンドウを探索する Wayland コンポジタ。
- https://github.com/evil0sheep/motorcar || パッケージが存在しないか AUR で検索
上記のいくつかは ディスプレイマネージャ をサポートする場合があります。
それらがどのように開始されるかを /usr/share/wayland-sessions/compositor.desktop
を見て確認してください。
ディスプレイマネージャ
Wayland コンポジタの実行をサポートしたディスプレイマネージャは以下の表の通りです。種類の列にはディスプレイマネージャが Wayland 上での実行をサポートしているかどうかが示されています。
名前 | 種類 | 説明 |
---|---|---|
GDM | Wayland/X11 上で動作 | GNOME ディスプレイマネージャ。 |
greetdAUR | ログインデーモン | 最小でありながら柔軟なログインデーモン。 |
LightDM | Wayland/X11 上で動作 [3] | 様々なデスクトップに対応したディスプレイマネージャ。 |
LyAUR | コンソール上で動作 | TUI ディスプレイマネージャ。 |
SDDM | X11 上で動作 [4] | QML ベースのディスプレイマネージャ。 |
tbsmAUR | コンソール上で動作 | bash のみに依存するシンプルな CLI セッションランチャー。 |
GUI ライブラリ
公式ウェブサイト も参照してください。
GTK+ 3
公式リポジトリの gtk3 パッケージは Wayland バックエンドが有効になっています。
Wayland と X 両方のバックエンドが有効になっているとき、GTK+ ではデフォルトで Wayland バックエンドを使いますが、GDK_BACKEND=x11
環境変数を設定することで Xwayland を使うように上書きできます。
Qt5
qt5 パッケージは Wayland をサポートしています。qt5-wayland をインストールしてください。
Wayland プラグインを使って Qt 5 アプリケーションを動作させるには、[5] にあるように、-platform wayland
を使用するか、環境変数 QT_QPA_PLATFORM=wayland-egl
をセットして下さい。一方、Wayland セッション上で X11 を使用させるには、QT_QPA_PLATFORM=xcb
とセットします。
これは、zoomAUR など、システムの Qt の実装を使用しない一部のプロプライエタリアプリケーションで必要になる場合があります。
sway などの一部のコンポジターでは、ネイティブに実行されている Qt アプリケーションの機能が不足している場合があります。 たとえば、 KeepassXC はトレイに最小化できません。 これは、アプリケーションを実行する前に qt5ct をインストールし、 QT_QPA_PLATFORMTHEME=qt5ct
を設定することで解決できます。
Clutter
Clutter ツールキットには Wayland バックエンドがあり、Clutter を Wayland のクライアントとして動作させることが可能です。このバックエンドは clutter パッケージで有効になっています。
Clutter アプリを Wayland 上で動作させるには、環境変数 CLUTTER_BACKEND=wayland
を設定する必要があります。
SDL
SDL アプリケーションを Wayland 上で動作させるには、環境変数 SDL_VIDEODRIVER=wayland
を設定する必要があります。一方、XWayland を使うようにするには、SDL_VIDEODRIVER=x11
を指定します。
GLFW
GLFW で Wayland バックエンドを使用するには、(glfw-x11 の代わりに) glfw-wayland パッケージをインストールしてください。
GLEW
GLEW で Wayland バックエンドを使用するには、(glew の代わりに) glew-wayland パッケージをインストールしてください。
EFL
EFL は Wayland を完全にサポートしています。Wayland で EFL アプリケーションを動かすには、Wayland の プロジェクトページ を見て下さい。
winit
Winit は Rust で書かれたウィンドウ管理ライブラリです。デフォルトでは Wayland が X11 より優先される仕様ですが、明示的に設定することもできます。XINIT_UNIX_BACKEND
環境変数の値を x11
や wayland
としてください。
Electron
electron ベースのアプリケーションを Wayland でネイティブに使用するには、${XDG_CONFIG_HOME}/electron-flags.conf
を作成または編集して、次のオプションを追加します。
~/.config/electron-flags.conf
--enable-features=UseOzonePlatform --ozone-platform=wayland
古いバージョンの electron には独自の electron-flags.conf
ファイルが必要であることに注意してください。electron12 パッケージがインストールされている場合は、次のようにします。
$ ln -s electron-flags.conf ~/.config/electron12-flags.conf
from within your ${XDG_CONFIG_HOME}
directory (or maintain a separate ${XDG_CONFIG_HOME}/electron12-flags.conf
file if you want different electron versions to use different runtime options).
XWayland
XWayland は、Wayland の下で実行される X サーバーです。 レガシー X11 アプリケーションに下位互換性を提供します。
これを使用するには、xorg-xwayland パッケージを インストール します。
XWaylandはコンポジターを介して開始されるため、選択したコンポジターを使用して、XWayland の互換性と XWayland の開始方法の説明を確認して下さい。
NVIDIA ドライバ
XWayland のグラフィックスアクセラレーションのサポートは、nvidia-betaAUR パッケージとともにインストールできる Nvidia Beta Driver version 470.42.01 に追加されました。
以下のその他の要件に留意して下さい。
また、 公式ドキュメント およびお使いのディスプレイマネージャ (例:GDM) に関する追加情報も見て下さい。
Tips and tricks
Detect Xwayland applications visually
To determine whether an application is running via Xwayland, you can run extramausAUR. Move your mouse pointer over the window of an application. If the red mouse moves, the application is running via Xwayland.
Alternatively, you can use xorg-xeyes and see if the eyes are moving, when moving the mouse pointer over an application window.
トラブルシューティング
Color correction
バックライト#色補正を参照。
動作が遅い、表示がおかしい、クラッシュする
Gnome-shell で X から Wayland に切り替えるとグラフィック表示に問題が発生することがあります。原因として Xorg ベースの gnome-shell 用に CLUTTER_PAINT=disable-clipped-redraws:disable-culling
が設定されている可能性があります。/etc/environment
などの rc ファイルから該当箇所を削除してみてください。
Electron ベースのアプリケーションでは、ディスプレイ::0を開けません
GDK_BACKEND = wayland を設定していないことを確認してください。グローバルに設定すると、 Electron アプリが機能しなくなります。
リモートディスプレイ
いくつか選択肢が考えられます:
- Sway など wlroots ベースのコンポジタでは wayvncAUR VNC サーバーが利用できます。
- Weston には RDP バックエンドが含まれています。weston-rdp(7) を参照してください。
- mutter ベースの場合は gnome-remote-desktop が使えます。公式サイト を参照してください。
- waypipeAUR や waypipe-gitAUR は Wayland アプリケーションの透過プロキシです。SSH を組み合わせることで外部から操作できます。詳細は公式サイトを参照してください。
ゲームやリモートデスクトップ、仮想マシンウィンドウでの入力
Xorg と異なり、Wayland では入力デバイスを独占 (グラブ) することができません。キーボードショートカットやポインタデバイスをアプリケーションウィンドウに渡すのは Wayland コンポジタの役目となっています。
入力グラブが変わったことで以下のように既存のアプリケーションで問題が発生します:
- ホットキーや修飾キーがコンポジタによって認識されてしまい、リモートデスクトップや仮想マシンのウィンドウに送信されなくなります。
- マウスポインタがアプリケーションウィンドウに制限されなくなるため、仮想マシンやリモートデスクトップのウィンドウ内のマウスポインタの位置がホスト環境のマウスポインタとずれるようになります。
Wayland と XWayland にプロトコル拡張を追加することで解決を図っていますが、Wayland コンポジタが拡張をサポートしている必要があり、ネイティブの Wayland クライアントの場合、ウィジェットツールキット (例: GTK, Qt) やアプリケーション自身が拡張に対応していなければなりません。X上で動作するアプリケーションの場合、対応は不要です。
関連する拡張:
- XWayland keyboard grabbing protocol (XWayland のサポートは xorg-server 1.20 開発ツリーに追加されています [6])
- Compositor shortcuts inhibit protocol
- Relative pointer protocol
- Pointer constraints protocol
サポートしている Wayland コンポジタ:
- Mutter, GNOME のコンポジタ (リリース 3.28 以上)。
- wlroots (Relative pointer protocols と Pointer constraints protocol に対応)
サポートしているウィジェットツールキット:
- GTK (リリース 3.22.18 以上)。
GTK themes not working
See https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland.