Wayland

提供: ArchWiki
2021年5月1日 (土) 22:40時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎トラブルシューティング: === root でグラフィカルアプリケーションを実行 === と=== LLVM assertion failure === を削除)
ナビゲーションに移動 検索に移動

関連記事

Wayland は Linux の新しいウィンドウプロトコルです。GNOMEKDE などの主要な Linux デスクトップは Wayland に対応しており、"Weston" という名前のコンポジタのリファレンス実装も存在します。Wayland で昔の X11 アプリケーションを動作させるための互換レイヤーとして XWayland があります。

要件

ほとんどの Wayland コンポジタは KMS を利用しているシステムで動作します。

また、Wayland はただのライブラリなので、それだけでは使い物になりません。X サーバーを置き換えるには、(WestonSway などの) コンポジタあるいは (GNOMEKDE など) デスクトップ環境が必要です。

GPU ドライバーと Wayland コンポジタは同一のバッファ API に対応している場合に互換性があります。主要な API は2つ存在します: GBMEGLStreams です。

バッファ API GPU ドライバーのサポート Wayland コンポジタのサポート
GBM NVIDIA 以外の全てのドライバー 全てのコンポジタ
EGLStreams NVIDIA GNOME, KDE (Plasma 5.16+)

コンポジタ

タイル型とスタック型の違いは、ウィンドウマネージャ#種類を参照してください。

タイル型

https://github.com/project-repo/cagebreak || cagebreakAUR cagebreak-binAUR
  • Cardboard — スクロールコンポジタ。wlroots をベースに、PaperWM にインスパイアされています。
https://gitlab.com/cardboardwm/cardboard || cardboard-gitAUR
  • dwl — wlroots ベースの dwm ライクな Wayland コンポジタ。
https://github.com/djpohly/dwl || dwlAUR
  • japokwm — wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。
https://github.com/werererer/japokwm || japokwm-gitAUR
  • river — dwm bspwm にインスパイアされた動的なタイル型 Wayland コンポジタ。
https://github.com/ifreund/river || river-gitAUR
  • Swayi3-compatible Wayland compositor based on wlroots.
https://github.com/swaywm/sway || sway
  • Velox — swc ベースのシンプルなウィンドウマネージャです。dwmxmonad の影響を受けています。
https://github.com/michaelforney/velox || veloxAUR
  • waymonadHaskell で書かれた xmonad にインスパイアされた Wayland コンジタ。
https://github.com/waymonad/waymonad || パッケージが存在しないか AUR で検索

スタック型

https://www.enlightenment.org/ || enlightenment
  • Greenfield — Web ブラウザーで実行され、リモートアプリケーションを表示できます。
https://greenfield.app/ || パッケージが存在しないか AUR で検索
  • Grefsen — 最小限のデスクトップ環境を提供する Qt/Wayland コンポジタ。
https://github.com/ec1oud/grefsen || パッケージが存在しないか AUR で検索
  • hikari — FreeBSD で活発に開発されている cwm にインスパイアされた wlroots ベースのコンポジタ。Linux もサポートしている。
https://hikari.acmelabs.space/ || hikariAUR
https://userbase.kde.org/KWin || kwin
  • Liri ShellLiri の一部、しかし、QtQuick と QtCompositor を使って Wayland 用のコンポジタとして作られています。
https://github.com/lirios/shell || liri-shell-gitAUR
  • labwc — Openbox にインスパイアされた wlroots ベースのコンポジタ。
https://github.com/johanmalm/labwc || labwc-gitAUR
https://gitlab.gnome.org/GNOME/mutter || mutter
  • wayfireCompiz にインスパイアされ、wlroots に基づく 3D コンポジタ。
https://wayfire.org/ || wayfireAUR
  • Weston — Wayland コンポジタのリファレンス実装。
https://gitlab.freedesktop.org/wayland/weston || weston
  • wio — Plan 9 のリオデスクトップのルックアンドフィールを複製することを目的とする wlroots ベースのコンポジタ。
https://wio-project.org/ || パッケージが存在しないか AUR で検索

その他

  • Cage — キオスクのような単一のフルスクリーンアプリケーションを表示します。
https://www.hjdskes.nl/projects/cage/ || 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 を使うように上書きできます。

ノート: GTK+ 3.0 から、GTK+ は実行時に複数のバックエンドをサポートできるようになり、Qt の lighthouse と同じ方法でバックエンドを切り替えることができるようになりました。

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 を指定します。

ノート: Wayland 未対応の古い SDL が内部に含まれたゲームでは、SDL_VIDEODRIVER=wayland を指定すると動作が壊れる場合があります。

GLFW

GLFW で Wayland バックエンドを使用するには、(glfw-x11 の代わりに) glfw-wayland パッケージをインストールしてください。

GLEW

GLEW で Wayland バックエンドを使用するには、(glew の代わりに) glew-wayland パッケージをインストールしてください。

EFL

EFL は Wayland を完全にサポートしています。Wayland で EFL アプリケーションを動かすには、Wayland の プロジェクトページ を見て下さい。

winit

WinitRust で書かれたウィンドウ管理ライブラリです。デフォルトでは Wayland が X11 より優先される仕様ですが、明示的に設定することもできます。XINIT_UNIX_BACKEND 環境変数の値を x11wayland としてください。

XWayland

XWayland は、Wayland の下で実行される X サーバーです。 レガシー X11 アプリケーションに下位互換性を提供します。

これを使用するには、xorg-xwayland パッケージを インストール します。

XWaylandはコンポジターを介して開始されるため、選択したコンポジターを使用して、XWayland の互換性と XWayland の開始方法の説明を確認して下さい。

ノート:
  • セキュリティについて: XWaylandはX サーバーであるため、 Wayland のセキュリティ機能はありません。
  • 現時点では、 Nvidia 独自のドライバーは XWayland の GPU アクセラレーションをサポートしていません。 [6] または [7] の pull request を参照してください。

トラブルシューティング

Color correction

See Backlight#Color correction.

Slow motion, graphical glitches, and crashes

Gnome-shell users may experience display issues when they switch to Wayland from X. One of the root cause might be the CLUTTER_PAINT=disable-clipped-redraws:disable-culling set by yourself for Xorg-based gnome-shell. Just try to remove it from /etc/environment or other rc files to see if everything goes back to normal.

Electron ベースのアプリケーションでは、ディスプレイ::0を開けません

GDK_BACKEND = wayland を設定していないことを確認してください。グローバルに設定すると、 Electron アプリが機能しなくなります。

動作が遅い、表示がおかしい、クラッシュする

Gnome-shell で X から Wayland に切り替えるとグラフィック表示に問題が発生することがあります。原因として Xorg ベースの gnome-shell 用に CLUTTER_PAINT=disable-clipped-redraws:disable-culling が設定されている可能性があります。/etc/environment などの rc ファイルから該当箇所を削除してみてください。

リモートディスプレイ

いくつか選択肢が考えられます:

ゲームやリモートデスクトップ、仮想マシンウィンドウでの入力

Xorg と異なり、Wayland では入力デバイスを独占 (グラブ) することができません。キーボードショートカットやポインタデバイスをアプリケーションウィンドウに渡すのは Wayland コンポジタの役目となっています。

入力グラブが変わったことで以下のように既存のアプリケーションで問題が発生します:

  • ホットキーや修飾キーがコンポジタによって認識されてしまい、リモートデスクトップや仮想マシンのウィンドウに送信されなくなります。
  • マウスポインタがアプリケーションウィンドウに制限されなくなるため、仮想マシンやリモートデスクトップのウィンドウ内のマウスポインタの位置がホスト環境のマウスポインタとずれるようになります。

Wayland と XWayland にプロトコル拡張を追加することで解決を図っていますが、Wayland コンポジタが拡張をサポートしている必要があり、ネイティブの Wayland クライアントの場合、ウィジェットツールキット (例: GTK, Qt) やアプリケーション自身が拡張に対応していなければなりません。X上で動作するアプリケーションの場合、対応は不要です。

関連する拡張:

サポートしている Wayland コンポジタ:

サポートしているウィジェットツールキット:

  • GTK (リリース 3.22.18 以上)。

参照