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 < 495* 以外の全てのドライバー | 全てのコンポジタ |
EGLStreams | NVIDIA | GNOME, KDE Weston (with a third-party patch) |
- *: Nvidia >= 495 は EGLStreams と GBM[1] の両方をサポートします。
コンポジタ
タイル型とスタック型の違いは、ウィンドウマネージャ#種類を参照してください。
タイル型
- Cardboard — スクロールコンポジタ。wlroots をベースに、PaperWM にインスパイアされています。
- dwl — wlroots ベースの dwm ライクな Wayland コンポジタ。
- japokwm — wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。
- Qtile — Python で記述および設定されたフル機能のハッキング可能なタイリングウィンドウマネージャーと Wayland コンポジタ。
- river — dwm bspwm にインスパイアされた動的なタイル型 Wayland コンポジタ。
- waymonad — Haskell で書かれた xmonad にインスパイアされた Wayland コンジタ。
- https://github.com/waymonad/waymonad || パッケージが存在しないか AUR で検索
- newm — ラップトップとタッチパッドを念頭に置いて作成された Wayland コンポジタ
スタック型
- Enlightenment — Enlightenment#Enlightenment を手動で起動する を参照してください。詳細: [2] [3]
- 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 上で動作 [4] | 様々なデスクトップに対応したディスプレイマネージャ。 |
LyAUR | コンソール上で動作 | TUI ディスプレイマネージャ。 |
SDDM | X11 上で動作 [5] | QML ベースのディスプレイマネージャ。 |
tbsmAUR | コンソール上で動作 | bash のみに依存するシンプルな CLI セッションランチャー。 |
GUI ライブラリ
公式ウェブサイト も参照してください。
GTK
gtk3 と gtk4 パッケージは Wayland バックエンドが有効になっています。
Wayland と X 両方のバックエンドが有効になっているとき、GTK+ ではデフォルトで Wayland バックエンドを使いますが、GDK_BACKEND=x11
環境変数を設定することで Xwayland を使うように上書きできます。
Qt
Qt 5 または 6 は Wayland をサポートしています。qt5-wayland または qt6-wayland パッケージをインストールしてください。
Wayland プラグインを使って Qt 5 アプリケーションを動作させるには、[6] にあるように、-platform wayland
を使用するか、環境変数 QT_QPA_PLATFORM=wayland
をセットして下さい。一方、Wayland セッション上で X11 を使用させるには、QT_QPA_PLATFORM=xcb
とセットします。
これは、zoomAUR など、システムの Qt の実装を使用しない一部のプロプライエタリアプリケーションで必要になる場合があります。
また、QT_QPA_PLATFORM="wayland;xcb"
を使用すると、QtがWaylandが利用できない場合、代わりにxcb (X11)プラグインを使用させることができます。[7]
sway などの一部のコンポジターでは、ネイティブに実行されている Qt アプリケーションの機能が不足している場合があります。 たとえば、 KeepassXC はトレイに最小化できません。 これは、アプリケーションを実行する前に qt5ct をインストールし、 QT_QPA_PLATFORMTHEME=qt5ct
を設定することで解決できます。
Clutter
Clutter ツールキットには Wayland バックエンドがあり、Clutter を Wayland のクライアントとして動作させることが可能です。このバックエンドは clutter パッケージで有効になっています。
Clutter アプリを Wayland 上で動作させるには、環境変数 CLUTTER_BACKEND=wayland
を設定する必要があります。
SDL2
SDL2 アプリケーションを Wayland 上で動作させるには、環境変数 SDL_VIDEODRIVER=wayland
を設定します。
GLFW
GLFW で Wayland バックエンドを使用するには、(glfw-x11 の代わりに) glfw-wayland パッケージをインストールしてください。
GLEW
glew-waylandAUR パッケージは現在のところ、多くの GLEW ベースのアプリケーションでまだ動作しませんので、唯一の選択肢は Xwayland で glew を使うことです。FS#62713 を参照してください。
EFL
EFL は Wayland を完全にサポートしています。Wayland で EFL アプリケーションを動かすには、Wayland の プロジェクトページ を見て下さい。
winit
Winit は Rust で書かれたウィンドウ管理ライブラリです。デフォルトでは Wayland が X11 より優先される仕様ですが、明示的に設定することもできます。WINIT_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
${XDG_CONFIG_HOME}
内にコピーしてください、または、異なる electron バージョンで異なるランタイムオプションを使用したい場合は、別の ${XDG_CONFIG_HOME}/electron12-flags.conf
ファイルを使用する必要があります。
XWayland
XWayland は、Wayland の下で実行される X サーバーです。 レガシー X11 アプリケーションに下位互換性を提供します。
これを使用するには、xorg-xwayland パッケージを インストール します。
XWaylandはコンポジターを介して開始されるため、選択したコンポジターを使用して、XWayland の互換性と XWayland の開始方法の説明を確認して下さい。
NVIDIA ドライバ
なお、DRM KMS を有効にする必要があります。また、お使いのディスプレイマネージャ(例: GDM)の公式ドキュメントに記載されている情報も見てください。
ヒントとテクニック
Xwayland アプリケーションであることを視認する
アプリケーションが Xwayland 経由で実行されているかどうかを判断するには、extramausAUR を使用します。 アプリケーションのウィンドウ上にマウスポインタを移動して、マウスポインタが赤くなる場合は、アプリケーションが Xwayland 経由で実行されています。
または、xorg-xeyes を使用して、アプリケーションウィンドウ上でマウスポインタを移動するときに、目が動いているかどうかで確認することもできます。
トラブルシューティング
色補正
バックライト#色補正を参照。
動作が遅い、表示がおかしい、クラッシュする
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 開発ツリーに追加されています [8])
- 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 テーマが動かない
https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland を参照してください。