Wayland

提供: ArchWiki
2022年3月13日 (日) 16:17時点におけるKgx (トーク | 投稿記録)による版 (→‎GUI ライブラリ: Javaを翻訳して追加)
ナビゲーションに移動 検索に移動

関連記事

Wayland はディスプレイサーバープロトコルです。X Window System の後継となることを目指しています。Wikipedia に Wayland と Xorg の比較 が掲載されています。

Wayland プロトコルを使用するディスプレイサーバは、コンポジット型ウィンドウマネージャ としても機能するため、コンポジタ と呼ばれます。以下にWayland コンポジタのリストを示します。

レガシーな X11 アプリケーションをシームレスに動かすための後方互換性として、XWayland を使うことができます。これは Wayland に X サーバを提供します。

要件

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

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

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

バッファ API GPU ドライバーのサポート Wayland コンポジタのサポート
GBM NVIDIA < 495* 以外の全てのドライバー 全てのコンポジタ
EGLStreams NVIDIA GNOME, KDE Weston (with a third-party patch)
*: Nvidia >= 495 は EGLStreams と GBM[1] の両方をサポートします。

コンポジタ

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

タイル型

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
  • Qtile — Python で記述および設定されたフル機能のハッキング可能なタイリングウィンドウマネージャーと Wayland コンポジタ。
https://github.com/qtile/qtile || qtile
  • river — dwm bspwm にインスパイアされた動的なタイル型 Wayland コンポジタ。
https://github.com/ifreund/river || river-gitAUR
  • Sway — wlroots ベースの i3 互換 Wayland コンポジタ。
https://github.com/swaywm/sway || sway
  • Velox — swc ベースのシンプルなウィンドウマネージャです。dwmxmonad の影響を受けています。
https://github.com/michaelforney/velox || veloxAUR
  • waymonadHaskell で書かれた xmonad にインスパイアされた Wayland コンジタ。
https://github.com/waymonad/waymonad || パッケージが存在しないか AUR で検索
  • newm — ラップトップとタッチパッドを念頭に置いて作成された Wayland コンポジタ
https://github.com/jbuchermn/newm/ || newm-gitAUR

スタック型

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 上で動作 [4] 様々なデスクトップに対応したディスプレイマネージャ。
LyAUR コンソール上で動作 TUI ディスプレイマネージャ。
SDDM X11 上で動作 [5] QML ベースのディスプレイマネージャ。
tbsmAUR コンソール上で動作 bash のみに依存するシンプルな CLI セッションランチャー。

GUI ライブラリ

公式ウェブサイト も参照してください。

GTK

gtk3gtk4 パッケージは 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 を設定します。

ノート: Wayland 未対応の古い SDL が内部に含まれたゲームでは、SDL_VIDEODRIVER=wayland を指定すると動作が壊れる場合があります。アプリケーションを XWayland で強制的に実行するには、SDL_VIDEODRIVER=x11 を設定します。

GLFW

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

GLEW

glew-waylandAUR パッケージは現在のところ、多くの GLEW ベースのアプリケーションでまだ動作しませんので、唯一の選択肢は Xwayland で glew を使うことです。FS#62713 を参照してください。

EFL

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

winit

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

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 ファイルを使用する必要があります。

ヒント: Electron-flags をグローバルに上書きする代わりに、デスクトップエントリ を変更するとよいでしょう。

Java

Java プラットフォームのオープンソース実装である OpenJDK は、まだ Wayland のネイティブサポートを備えていません。 OpenJDK に Wayland を実装することを目的としたプロジェクトである Wakefield が実用できるようになるまで、XWayland を使用して下さい。

XWayland

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

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

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

ノート: セキュリティについて: XWayland は X サーバーであるため、 Wayland のセキュリティ機能はありません。

NVIDIA ドライバ

ノート: バージョン 470 より前の Nvidia ドライバ(例: nvidia-390xx-dkmsAUR) はハードウェアアクセラレーションされた XWayland をサポートしておらず、Wayland 以外のアプリケーションで Wayland セッションのパフォーマンスが低下します。

なお、DRM KMS を有効にする必要があります。また、お使いのディスプレイマネージャ(例: GDM)の公式ドキュメントに記載されている情報も見てください。

ヒントとテクニック

Kwin Wayland デバッグコンソール

kwin を使用している場合、以下を実行すると、どのウィンドウが Xwayland とネイティブ Wayland を使用しているか、表面、入力イベント、クリップボードの内容などを確認することができます。

$ qdbus org.kde.KWin /KWin org.kde.KWin.showDebugConsole

Xwayland アプリケーションであることを視認する

アプリケーションが Xwayland 経由で実行されているかどうかを判断するには、extramausAUR を使用します。 アプリケーションのウィンドウ上にマウスポインタを移動して、マウスポインタが赤くなる場合は、アプリケーションが Xwayland 経由で実行されています。

または、xorg-xeyes を使用して、アプリケーションウィンドウ上でマウスポインタを移動するときに、目が動いているかどうかで確認することもできます。

キーボードのリマップ

Wayland のセキュリティ・モデルでは、コンポジター以外のプログラムがキーボード入力を取得することを禁止しています。いくつかのコンポジターはキーのリマップをサポートしていますが (例えば mutter から gnome-tweaks まで)、多くのコンポジターにはありません。evremapAUR, evdevremapkeys-gitAUR, kbct-gitAUR プログラムはコンポジターの前にキーボードを取得して、変更したキーボード入力を渡すことでこれを回避しています。

トラブルシューティング

色補正

バックライト#色補正を参照。

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

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

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

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

リモートディスプレイ

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

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

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

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

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

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

関連する拡張:

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

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

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

GTK テーマが動かない

https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland を参照してください。

NVIDIA モジュールを読み込まないようにする

sway などの Wayland コンポジターを起動する前に __EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json環境変数 として追加します。

参照