Wayland

提供: ArchWiki
2022年12月20日 (火) 12:31時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (TranslationStatus を更新)
ナビゲーションに移動 検索に移動

関連記事

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

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

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

要件

ほとんどの Wayland コンポジタは、カーネルモードセッティングを利用しているシステムでのみ動作します。Wayland それ自体はグラフィカルな環境を提供しません。ゆえに、Wayland に加えてコンポジタ (以下のセクションを参照)、あるいは、コンポジタを含むデスクトップ環境 (例: GNOMEKDE) が必要となります。

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

バッファ API GPU ドライバーのサポート Wayland コンポジタのサポート
GBM NVIDIA < 495* 以外の全てのドライバー 全て
EGLStreams NVIDIA GNOME、(サードパーティのパッチを適用した) Weston
*: Nvidia ≥ 495 は EGLStreams と GBM の両方をサポートします[1]

NVIDIA が GBM のサポートを導入して以来、NVIDIA ≥ 495 で多くのコンポジタ (Mutter と KWin を含む) がデフォルトで GBM を使用し始めました。GBM は一般的にベターでより幅広いサポートがあると考えられています。EGLStreams がサポートされていた理由は、NVIDIA GPU をプロプライエタリドライバで Wayland 下で使用する代替の方法を NVIDIA が提供しなかったからだけです。さらに、GBM が NVIDIA に導入された後、KWin は EGLStreams のサポートを打ち切りました

人気なデスクトップ環境/コンポジタと、NVIDIA によってまだサポートされている GPU を使用している場合、おそらくすでに GBM バックエンドを使用しています。確認するには、次を実行してください: journalctl -b 0 --grep "renderer for"。GBM をバックエンドとして強制的に使用させるには、次の環境変数を設定してください:

GBM_BACKEND=nvidia-drm
__GLX_VENDOR_LIBRARY_NAME=nvidia

コンポジタ

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

タイル型

https://github.com/project-repo/cagebreak || cagebreakAUR
  • Cardboard — スクロールコンポジタ。wlroots をベースに、PaperWM にインスパイアされています。
https://gitlab.com/cardboardwm/cardboard || cardboard-gitAUR
  • dwl — wlroots ベースの dwm ライクな Wayland コンポジタ。
https://github.com/djpohly/dwl || dwlAUR
  • Hyprland — 見た目を犠牲にしないダイナミックタイル型 Wayland コンポジタ。
https://github.com/hyprwm/Hyprland || hyprlandAUR
  • japokwm — wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。
https://github.com/werererer/japokwm || japokwm-gitAUR
  • newm — ラップトップとタッチパッドを念頭に置いて作成された Wayland コンポジタ。
https://github.com/jbuchermn/newm/ || newm-gitAUR
  • Qtile — Python で記述および設定されたフル機能のハッキング可能なタイリングウィンドウマネージャーと Wayland コンポジタ。
https://github.com/qtile/qtile || qtile
  • river — dwm bspwm にインスパイアされた動的なタイル型 Wayland コンポジタ。
https://github.com/ifreund/river || riverAUR
  • Sway — wlroots ベースの i3 互換 Wayland コンポジタ。
https://github.com/swaywm/sway || sway
  • Velox — swc ベースのシンプルなウィンドウマネージャです。dwmxmonad の影響を受けています。
https://github.com/michaelforney/velox || velox-gitAUR
  • Vivarium — wlroots を使用するダイナミックタイル型 Wayland コンポジタ。xmonad にインスパイアされたデスクトップセマンティクスを持ちます。
https://github.com/inclement/vivarium || vivarium-gitAUR
  • waymonadHaskell で書かれた xmonad にインスパイアされた Wayland コンジタ。
https://github.com/waymonad/waymonad || パッケージが存在しないか AUR で検索

スタック型

Enlightenment#Enlightenment を手動で起動する を参照してください。詳細: [2][リンク切れ 2022-09-23] [3] || https://www.enlightenment.org/
  • 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/labwc/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/[リンク切れ 2022-09-23] || wio-wlAUR

その他

  • 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 で検索
  • nwg-shell — sway Wayland コンポジタのための、GTK ベースのシェル。
https://github.com/nwg-piotr/nwg-shell || nwg-shellAUR
  • kiwmi — 完全にプログラミング可能な Wayland コンポジタ。
https://github.com/buffet/kiwmi || kiwmi-gitAUR

上記のいくつかは ディスプレイマネージャ をサポートする場合があります。 それらがどのように開始されるかを /usr/share/wayland-sessions/compositor.desktop を見て確認してください。

ディスプレイマネージャ

Wayland コンポジタの実行をサポートしているディスプレイマネージャは以下の表の通りです。

名前 それ自体は Wayland で動作するか? 説明
GDM Yes GNOME ディスプレイマネージャ。
greetd Wayland の greeter が利用可能 最小でありながら柔軟なログインデーモン。
LightDM No 様々なデスクトップに対応したディスプレイマネージャ。
Ly No C で書かれた TUI ディスプレイマネージャ。
SDDM sddm-gitAUR でのみ QML ベースのディスプレイマネージャ。
tbsm No bash のみに依存するシンプルな CLI セッションランチャー。

GUI ライブラリ

公式ウェブサイト で詳細を確認してください。

GTK

gtk3gtk4 パッケージは Wayland バックエンドが有効になっています。GTK ではデフォルトで Wayland バックエンドを使いますが、環境変数を設定することで Xwayland を使うように上書きできます: GDK_BACKEND=x11

Qt

Qt 5 または 6 で Wayland のサポートを有効化するには、Qt 5 と 6 に対してそれぞれ qt5-wayland または qt6-wayland パッケージをインストールしてください。

Wayland プラグインを使って Qt 5 アプリケーションを動作させるには、[4] にあるように、-platform wayland を使用するか、環境変数 QT_QPA_PLATFORM=wayland をセットして下さい。一方、Wayland セッション上で X11 を使用させるには、QT_QPA_PLATFORM=xcb と設定してください。 これは、zoomAUR など、システムの Qt の実装を使用しない一部のプロプライエタリアプリケーションで必要になる場合があります。 また、QT_QPA_PLATFORM="wayland;xcb" を使用すると、Qt が Wayland を利用できない場合に、代わりに xcb (X11)プラグインを使用させることができます。[5]

sway などの一部のコンポジターでは、ネイティブに実行されている Qt アプリケーションの機能が不足している場合があります。たとえば、KeepassXC はトレイに最小化できません。これは、アプリケーションを実行する前に qt5ct をインストールし、QT_QPA_PLATFORMTHEME=qt5ct を設定することで解決できます。

Clutter

Clutter ツールキットには Wayland バックエンドがあり、Clutter を Wayland のクライアントとして動作させることが可能です。このバックエンドは clutter パッケージで有効になっています。

Clutter アプリを Wayland 上で動作させるには、環境変数 CLUTTER_BACKEND=wayland を設定する必要があります。

SDL2

SDL2 バージョン 2.0.22 の時点で、SDL デフォルトでは、X11 よりも Wayland が優先されます

ノート: 多くのプロプライエタリなゲームが古いバージョンの SDL を使用しており、これらは Wayland に対応しておらず、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

Winit は Rust で書かれたウィンドウ管理ライブラリです。デフォルトでは Wayland が X11 より優先される仕様ですが、環境変数を設定することで Xwayland を使うように上書きすることができます: WINIT_UNIX_BACKEND=x11

Electron

Wayland サポートを有効化する方法は次の2つです: アプリケーションごとのコマンドラインフラグを使って有効化するか、設定ファイルを使ってグローバルに有効化するかです。

コマンドラインフラグ

Wayland で electron ベースのアプリケーションをネイティブに使用するには、次のフラグをアプリケーションの exec コマンドラインに追加する必要があります (Electron 20 の場合): --ozone-platform-hint=auto

トップバーが消失する問題は、追加で次のフラグを使用することで解決できます: --enable-features=WaylandWindowDecorations。このフラグは通常、GNOME (electron17 より対応) で必要となります。

コマンドラインフラグの設定は、例えば .desktop ファイルを変更し、Exec= 行の最後にフラグを追加することで可能です。

ノート: visual-studio-code-binAUR のような (バグレポート) 一部のアプリケーションは、Electron に対してフラグを渡さないため、そのアプリケーションの開発者が解決策を実装する必要があります。

設定ファイル

ファイル ${XDG_CONFIG_HOME}/electron-flags.conf (${XDG_CONFIG_HOME} が設定されていない場合、.config/electron-flags.conf がデフォルトです) を作成/編集し、先に説明したフラグを追加してください (1行につき1オプション、空の行は無し):

~/.config/electron-flags.conf
--enable-features=WaylandWindowDecorations
--ozone-platform-hint=auto
ノート: このような設定ファイルは、公式リポジトリ内の Electron のパッケージと、それらの設定ファイルを使用するパッケージでのみ機能します。slack-desktopAUR などのような Electron の独自のビルドをバンドルしているパッケージでは機能しません。slack-electronAUR のように代替のパッケージが存在する場合があります。

古い Electron バージョン

electron-flags.conf は、Electron の最新バージョンに対してのみ適用されます。古いバージョンの Electron は独自の electron<version>-flags.conf ファイルを使用して設定することができます。バージョン管理されたファイルは、${XDG_CONFIG_HOME}/electron-flags.conf にソフトリンクを貼ることができます。

古いバージョンでは、対応する Chromium バージョンによって異なるフラグが必要になる場合があります。例えば、以下のフラグは Electron 13 で機能します:

~/.config/electron13-flags.conf
--enable-features=UseOzonePlatform
--ozone-platform=wayland

Java

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

XWayland

XWayland は、Wayland の下で実行される X サーバーで、Wayland サポートをまだ提供していないネイティブな X11 アプリケーションに互換性を提供します。これを使用するには、xorg-xwayland パッケージをインストールします。

XWayland はコンポジタを介して開始されるため、あなたの使用しているコンポジタのドキュメントを読み、XWayland との互換性についてや、XWayland の起動方法に関する指示を確認しておく必要があります。

ノート:
  • セキュリティ: XWayland は X サーバーであるため、 Wayland のセキュリティ機能はありません。
  • パフォーマンス: XWayland は X11 とほぼ同等のパフォーマンスを発揮します。しかし、一部のケースで (特に NVIDIA カード上で) パフォーマンスの低下を感じるかもしれません。
  • 互換性: XWayland は X11 と完全な後方互換性があるわけではありません。一部のアプリケーションは XWayland 下では正しく動作しない場合があります。

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

他の方法として、(xorg-xwininfo の) xwininfo をターミナルウィンドウで実行するというものがあります。Xwayland ウィンドウ上にマウスポインタをホバーすると、マウスポインタが + マークに変わります。ウィンドウをクリックすると、xwininfo は情報を表示して終了しますが、ネイティブな Wayland ウィンドウでは何も起こりません。Ctrl+C を押すことで xwininfo を終了できます。

キーボードやマウスキーのリマップ

入力リマップユーティリティ を見てください。

トラブルシューティング

色補正

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

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

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

リモートディスプレイ

  • (sway で使用されている) wlroots は、バージョン 0.10 より、wayvnc を使って VNC バックエンドを提供しています。RDP バックエンドは削除されました [6]
  • mutter はコンパイル時にリモートデスクトップが有効化されています。詳細は [7]gnome-remote-desktop を見てください。
  • 2013年に FreeRDP が Weston にマージされました。コンパイルフラグで有効化されています。weston パッケージは、バージョン 6.0.0 より、FreeRDP が有効化されています。
  • waypipeAUR (や waypipe-gitAUR) は Wayland アプリケーションの透過プロキシです。SSH 上で動作するラッパーコマンドあり。

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

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

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

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

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

これらの拡張はすでに wayland-protocols に含まれており、xorg-xwayland によってサポートされています。

関連する拡張:

サポートしている 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 を参照してください。

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

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

参照

翻訳ステータス: このページは en:Wayland の翻訳バージョンです。最後の翻訳日は 2022-12-20 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。