「Wayland」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎Java: 飜訳)
(同期)
(2人の利用者による、間の32版が非表示)
6行目: 6行目:
 
[[zh-hans:Wayland]]
 
[[zh-hans:Wayland]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|Kernel Mode Setting}}
+
{{Related|カーネルモード設定}}
 
{{Related|Xorg}}
 
{{Related|Xorg}}
 
{{Related|スクリーンショットの取得#Wayland}}
 
{{Related|スクリーンショットの取得#Wayland}}
15行目: 15行目:
 
Wayland プロトコルを使用するディスプレイサーバは、[[Wikipedia:ja:コンポジット型ウィンドウマネージャ|コンポジット型ウィンドウマネージャ]] としても機能するため、'''コンポジタ''' と呼ばれます。以下に[[#コンポジタ|Wayland コンポジタのリスト]]を示します。
 
Wayland プロトコルを使用するディスプレイサーバは、[[Wikipedia:ja:コンポジット型ウィンドウマネージャ|コンポジット型ウィンドウマネージャ]] としても機能するため、'''コンポジタ''' と呼ばれます。以下に[[#コンポジタ|Wayland コンポジタのリスト]]を示します。
   
ネイティブな [[X11]] アプリケーションをシームレスに動かすための後方互換性として、[[#XWayland|XWayland]] を使うことができます。これは Wayland に X サーバを提供します。
+
ネイティブな X11 アプリケーションをシームレスに動かすための後方互換性として、[[#Xwayland|Xwayland]] を使うことができます。これは Wayland に X サーバを提供します。
   
 
== 要件 ==
 
== 要件 ==
   
ほとんどの Wayland コンポジタは、[[Kernel Mode Setting|カーネルモードセッティング]]を利用しているシステムでのみ動作します。Wayland それ自体はグラフィカルな環境を提供しません。ゆえに、Wayland に加えてコンポジタ (以下のセクションを参照)、あるいは、コンポジタを含むデスクトップ環境 (例: [[GNOME]]、[[KDE]]) が必要となります。
+
ほとんどの Wayland コンポジタは、[[カーネルモード設定]]を利用しているシステムでのみ動作します。Wayland それ自体はグラフィカルな環境を提供しません。ゆえに、Wayland に加えてコンポジタ (以下のセクションを参照)、あるいは、コンポジタを含むデスクトップ環境 (例: [[GNOME]]、[[Plasma]]) が必要となります。
   
GPU ドライバと Wayland コンポジタは、同一のバッファ API に対応している場合に互換性があります。主要な API は2つ存在します: [[Wikipedia:Generic Buffer Management|GBM]] と [https://www.phoronix.com/scan.php?page=news_item&px=XDC2016-Device-Memory-API EGLStreams] です。
+
GPU ドライバと Wayland コンポジタは、同一のバッファ API に対応している場合に互換性があります。主要な API は2つ存在します: [[Wikipedia:Generic Buffer Management|GBM]] と [https://www.phoronix.com/scan.php?page=news_item&px=XDC2016-Device-Memory-API EGLStreams] です。
   
 
{| class="wikitable"
 
{| class="wikitable"
29行目: 29行目:
 
| GBM || [[NVIDIA]] < 495* 以外の全てのドライバー || 全て
 
| GBM || [[NVIDIA]] < 495* 以外の全てのドライバー || 全て
 
|-
 
|-
| EGLStreams || [[NVIDIA]] || [[GNOME]]、(サードパーティのパッチを適用した) [[Weston#EGLstream のサポート (Nvidia 専用ドライバ)|Weston]]
+
| EGLStreams || [[NVIDIA]] || [[GNOME]]
 
|-
 
|-
 
|}
 
|}
   
: *: Nvidia ≥ 495 は EGLStreams と GBM の両方をサポートします[https://www.phoronix.com/scan.php?page=news_item&px=NVIDIA-495.44-Linux-Driver]
+
: * Nvidia ≥ 495 は EGLStreams と GBM の両方をサポートします[https://www.phoronix.com/scan.php?page=news_item&px=NVIDIA-495.44-Linux-Driver]
   
 
NVIDIA が GBM のサポートを導入して以来、NVIDIA ≥ 495 で多くのコンポジタ (Mutter と KWin を含む) がデフォルトで GBM を使用し始めました。GBM は一般的にベターでより幅広いサポートがあると考えられています。EGLStreams がサポートされていた理由は、NVIDIA GPU をプロプライエタリドライバで Wayland 下で使用する代替の方法を NVIDIA が提供しなかったからだけです。さらに、GBM が NVIDIA に導入された後、KWin は [https://invent.kde.org/plasma/kwin/-/merge_requests/1638 EGLStreams のサポートを打ち切りました]。
 
NVIDIA が GBM のサポートを導入して以来、NVIDIA ≥ 495 で多くのコンポジタ (Mutter と KWin を含む) がデフォルトで GBM を使用し始めました。GBM は一般的にベターでより幅広いサポートがあると考えられています。EGLStreams がサポートされていた理由は、NVIDIA GPU をプロプライエタリドライバで Wayland 下で使用する代替の方法を NVIDIA が提供しなかったからだけです。さらに、GBM が NVIDIA に導入された後、KWin は [https://invent.kde.org/plasma/kwin/-/merge_requests/1638 EGLStreams のサポートを打ち切りました]。
39行目: 39行目:
 
人気なデスクトップ環境/コンポジタと、NVIDIA によってまだサポートされている GPU を使用している場合、おそらくすでに GBM バックエンドを使用しています。確認するには、次を実行してください: {{ic|journalctl -b 0 --grep "renderer for"}}。GBM をバックエンドとして強制的に使用させるには、次の[[環境変数]]を設定してください:
 
人気なデスクトップ環境/コンポジタと、NVIDIA によってまだサポートされている GPU を使用している場合、おそらくすでに GBM バックエンドを使用しています。確認するには、次を実行してください: {{ic|journalctl -b 0 --grep "renderer for"}}。GBM をバックエンドとして強制的に使用させるには、次の[[環境変数]]を設定してください:
   
  +
GBM_BACKEND=nvidia-drm
{{bc|<nowiki>
 
  +
__GLX_VENDOR_LIBRARY_NAME=nvidia
GBM_BACKEND=nvidia-drm
 
__GLX_VENDOR_LIBRARY_NAME=nvidia
 
</nowiki>}}
 
   
 
== コンポジタ ==
 
== コンポジタ ==
51行目: 49行目:
   
 
* {{App|[[Cagebreak]]|cage をベースに、[[ratpoison]] にインスパイアされています。|https://github.com/project-repo/cagebreak|{{AUR|cagebreak}}}}
 
* {{App|[[Cagebreak]]|cage をベースに、[[ratpoison]] にインスパイアされています。|https://github.com/project-repo/cagebreak|{{AUR|cagebreak}}}}
* {{App|Cardboard|スクロールコンポジタ。wlroots ベースに、PaperWM インスパイアされています。|https://gitlab.com/cardboardwm/cardboard|{{AUR|cardboard-git}}}}
+
* {{App|dwl|wlroots ベース [[dwm]] ラクな Wayland コポジタ。|https://codeberg.org/dwl/dwl|{{AUR|dwl}}}}
* {{App|dwl|wlroots ベースの [[dwm]]イク Wayland コンポジタ。|https://github.com/djpohly/dwl|{{AUR|dwl}}}}
+
* {{App|[[Hyprland]]|見た目を犠牲にしないダナミッタイル型 Wayland コンポジタ。|https://hyprland.org|{{Pkg|hyprland}}}}
* {{App|[[Hyprland]]|見た目を犠牲にしないダイナミックタイル型 Wayland コンポジタ。|https://hyprland.org|{{AUR|hyprland}}}}
 
 
* {{App|japokwm|wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。|https://github.com/werererer/japokwm|{{AUR|japokwm-git}}}}
 
* {{App|japokwm|wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。|https://github.com/werererer/japokwm|{{AUR|japokwm-git}}}}
* {{App|newm|ラップトップとタッチパッドを念頭に置いて作成された Wayland コンポジタ。|https://github.com/jbuchermn/newm/|{{AUR|newm-git}}}}
+
* {{App|newm|ラップトップとタッチパッドを念頭に置いて作成された Wayland コンポジタ ''(現在、メンテナンスされていません)''。|https://github.com/jbuchermn/newm/|{{AUR|newm-git}}}}
  +
* {{App|niri|スクロール可能なタイル型 Wayland コンポジタ。|https://github.com/YaLTeR/niri/|{{AUR|niri}}}}
  +
* {{App|Polonium|Bismuth のフォークであり、後継。[[KDE]] のためのタイル型ウィンドウマネージャ。|https://github.com/zeroxoneafour/polonium|{{AUR|kwin-polonium}}}}
 
* {{App|[[Qtile]]|Python で記述および設定されたフル機能のハッキング可能なタイリングウィンドウマネージャーと Wayland コンポジタ。|https://github.com/qtile/qtile|{{Pkg|qtile}}}}
 
* {{App|[[Qtile]]|Python で記述および設定されたフル機能のハッキング可能なタイリングウィンドウマネージャーと Wayland コンポジタ。|https://github.com/qtile/qtile|{{Pkg|qtile}}}}
* {{App|river|dwm [[bspwm]] にインスパイアされた動的なタイル型 Wayland コンポジタ。|https://github.com/ifreund/river|{{Pkg|river}}}}
+
* {{App|[[river]]|dwm [[bspwm]] にインスパイアされた動的なタイル型 Wayland コンポジタ。|https://github.com/ifreund/river|{{Pkg|river}}}}
 
* {{App|[[Sway]]|wlroots ベースの [[i3]] 互換 Wayland コンポジタ。|https://github.com/swaywm/sway|{{Pkg|sway}}}}
 
* {{App|[[Sway]]|wlroots ベースの [[i3]] 互換 Wayland コンポジタ。|https://github.com/swaywm/sway|{{Pkg|sway}}}}
  +
* {{App|SwayFx|魅力的な視覚効果機能を追加した [[Sway]]。|https://github.com/WillPower3309/swayfx|{{AUR|swayfx}}}}
 
* {{App|Velox|swc ベースのシンプルなウィンドウマネージャです。[[dwm]] と [[xmonad]] の影響を受けています。|https://github.com/michaelforney/velox|{{AUR|velox-git}}}}
 
* {{App|Velox|swc ベースのシンプルなウィンドウマネージャです。[[dwm]] と [[xmonad]] の影響を受けています。|https://github.com/michaelforney/velox|{{AUR|velox-git}}}}
 
* {{App|Vivarium|wlroots を使用するダイナミックタイル型 Wayland コンポジタ。[[xmonad]] にインスパイアされたデスクトップセマンティクスを持ちます。|https://github.com/inclement/vivarium|{{AUR|vivarium-git}}}}
 
* {{App|Vivarium|wlroots を使用するダイナミックタイル型 Wayland コンポジタ。[[xmonad]] にインスパイアされたデスクトップセマンティクスを持ちます。|https://github.com/inclement/vivarium|{{AUR|vivarium-git}}}}
* {{App|waymonad|[[Haskell]] で書かれた xmonad にインスパイアされた Wayland コンジタ。|https://github.com/waymonad/waymonad}}
 
   
 
=== スタック型 ===
 
=== スタック型 ===
   
* {{App|[[Enlightenment]]|[[Enlightenment]]|[[Enlightenment#Enlightenment を手動で起動する]] を参照してください。詳細: [https://git.enlightenment.org/core/enlightenment.git/tree/README]{{Dead link|2022|09|23|status=404}} [https://www.enlightenment.org/about-wayland]|https://www.enlightenment.org/|{{Pkg|enlightenment}}}}
+
* {{App|[[Enlightenment]]|[[Enlightenment]]|[[Enlightenment#手動]] を参照してください。詳細: [https://git.enlightenment.org/enlightenment/enlightenment/src/branch/master/README.md] [https://www.enlightenment.org/about-wayland]|https://www.enlightenment.org/|{{Pkg|enlightenment}}}}
* {{App|Greenfield|Web ブラウザーで実行され、リモートのアプリケーションを表示できます。|https://greenfield.app/}}
 
* {{App|Grefsen|最小限のデスクトップ環境を提供する Qt/Wayland コンポジタ。|https://github.com/ec1oud/grefsen}}
 
 
* {{App|hikari|FreeBSD で活発に開発されている [[cwm]] にインスパイアされた wlroots ベースのコンポジタ。Linux もサポートしています。|https://hikari.acmelabs.space/|{{AUR|hikari}}}}
 
* {{App|hikari|FreeBSD で活発に開発されている [[cwm]] にインスパイアされた wlroots ベースのコンポジタ。Linux もサポートしています。|https://hikari.acmelabs.space/|{{AUR|hikari}}}}
 
* {{App|KDE [[w:KWin|KWin]]|[[KDE#Plasma の起動]] を参照。|https://userbase.kde.org/KWin|{{Pkg|kwin}}}}
 
* {{App|KDE [[w:KWin|KWin]]|[[KDE#Plasma の起動]] を参照。|https://userbase.kde.org/KWin|{{Pkg|kwin}}}}
75行目: 72行目:
 
* {{App|wayfire|[[Compiz]] にインスパイアされ、wlroots に基づく 3D コンポジタ。|https://wayfire.org/|{{AUR|wayfire}}}}
 
* {{App|wayfire|[[Compiz]] にインスパイアされ、wlroots に基づく 3D コンポジタ。|https://wayfire.org/|{{AUR|wayfire}}}}
 
* {{App|[[Weston]]|正しさ、信頼性、予測可能性、性能のために設計された Wayland コンポジタ。|https://gitlab.freedesktop.org/wayland/weston|{{Pkg|weston}}}}
 
* {{App|[[Weston]]|正しさ、信頼性、予測可能性、性能のために設計された Wayland コンポジタ。|https://gitlab.freedesktop.org/wayland/weston|{{Pkg|weston}}}}
* {{App|wio|Plan 9 のリオデスクトップのルックアンドフィールを複製することを目的とする wlroots ベースのコンポジタ。|https://wio-project.org/{{Dead link|2022|09|23|status=SSL error}}|{{AUR|wio-wl}}}}
+
* {{App|wio|Plan 9 のリオデスクトップのルックアンドフィールを複製することを目的とする wlroots ベースのコンポジタ。|https://gitlab.com/Rubo/wio|{{AUR|wio-wl}}}}
   
 
=== その他 ===
 
=== その他 ===
   
 
* {{App|Cage|キオスクのような単一のフルスクリーンアプリケーションを表示します。|https://www.hjdskes.nl/projects/cage/|{{Pkg|cage}}}}
 
* {{App|Cage|キオスクのような単一のフルスクリーンアプリケーションを表示します。|https://www.hjdskes.nl/projects/cage/|{{Pkg|cage}}}}
* {{App|Maze Compositor|Qt を使用して 3D 迷路ウィンドウをレンダリグします。|https://github.com/imbavirus/mazecompositor}}
+
* {{App|nwg-shell|Sway Hyprland Wayland コポジタのための GTK ベースシェル。|https://github.com/nwg-piotr/nwg-shell|{{AUR|nwg-shell}}}}
* {{App|Motorcar|バーチャルリアリティを使用して 3D ウィンドウを探索する Wayland コンポジタ。|https://github.com/evil0sheep/motorcar}}
 
* {{App|nwg-shell|sway Wayland コンポジタのための、GTK ベースのシェル。|https://github.com/nwg-piotr/nwg-shell|{{AUR|nwg-shell}}}}
 
 
* {{App|kiwmi|完全にプログラミング可能な Wayland コンポジタ。|https://github.com/buffet/kiwmi|{{AUR|kiwmi-git}}}}
 
* {{App|kiwmi|完全にプログラミング可能な Wayland コンポジタ。|https://github.com/buffet/kiwmi|{{AUR|kiwmi-git}}}}
  +
* {{App|phoc|モバイル端末のための wlroots ベースの小さなコンポジタ。|https://gitlab.gnome.org/World/Phosh/phoc|{{Pkg|phoc}}}}
   
 
上記のいくつかは [[ディスプレイマネージャ]] をサポートする場合があります。
 
上記のいくつかは [[ディスプレイマネージャ]] をサポートする場合があります。
96行目: 92行目:
 
! それ自体は Wayland で動作するか?
 
! それ自体は Wayland で動作するか?
 
! 説明
 
! 説明
  +
|-
  +
| {{AUR|emptty}}
  +
| {{No}}
  +
| TTY で動作するシンプルな CLI ディスプレイマネージャ。
 
|-
 
|-
 
| [[GDM]]
 
| [[GDM]]
102行目: 102行目:
 
|-
 
|-
 
| [[greetd]]
 
| [[greetd]]
| {{Y|Wayland の greeter が利可能}}
+
| {{G|Wayland の greeter を使した場合}}
 
| 最小でありながら柔軟なログインデーモン。
 
| 最小でありながら柔軟なログインデーモン。
 
|-
 
|-
  +
| {{AUR|lemurs}}
| [[LightDM]]
 
 
| {{No}}
 
| {{No}}
  +
| Rust で書かれた TUI ディスプレイマネージャ。
  +
|-
  +
| [[LightDM]]
  +
| {{No|https://github.com/canonical/lightdm/issues/267}}
 
| 様々なデスクトップに対応したディスプレイマネージャ。
 
| 様々なデスクトップに対応したディスプレイマネージャ。
 
|-
 
|-
114行目: 118行目:
 
|-
 
|-
 
| [[SDDM]]
 
| [[SDDM]]
  +
| {{Yes}}
| {{Y|{{AUR|sddm-git}} でのみ}}
 
 
| QML ベースのディスプレイマネージャ。
 
| QML ベースのディスプレイマネージャ。
 
|-
 
|-
121行目: 125行目:
 
| bash のみに依存するシンプルな CLI セッションランチャー。
 
| bash のみに依存するシンプルな CLI セッションランチャー。
 
|}
 
|}
  +
  +
== Xwayland ==
  +
  +
[https://wayland.freedesktop.org/xserver.html Xwayland] は、Wayland の下で実行される X サーバーで、Wayland サポートをまだ提供していないネイティブな [[X11]] アプリケーションに互換性を提供します。これを使用するには、{{Pkg|xorg-xwayland}} パッケージを[[インストール]]します。
  +
  +
Xwayland はコンポジタを介して開始されるため、あなたの使用しているコンポジタのドキュメントを読み、Xwayland との互換性についてや、Xwayland の起動方法に関する指示を確認しておく必要があります。
  +
  +
{{Note|
  +
* セキュリティ: Xwayland は X サーバーであるため、 Wayland のセキュリティ機能はありません。
  +
* パフォーマンス: Xwayland は X11 と[https://openbenchmarking.org/result/2202053-NE-NVIDIARTX35 ほぼ同等のパフォーマンス]を発揮します。しかし、一部のケースで (特に NVIDIA カード上で) パフォーマンスの低下を感じるかもしれません。
  +
* 互換性: Xwayland は X11 と完全な後方互換性があるわけではありません。一部のアプリケーションは Xwayland 下では正しく動作しない場合があります。}}
  +
  +
=== NVIDIA ドライバ ===
  +
  +
{{Note|バージョン 470 より前の Nvidia ドライバ(例: {{aur|nvidia-390xx-dkms}}) はハードウェア支援のある Xwayland をサポートしておらず、非 Wayland ネイティブなアプリケーションは Wayland セッションでのパフォーマンスが低下します。}}
  +
  +
なお、[[NVIDIA#DRM カーネルモード設定|DRM KMS]] を有効にする必要があります。また、お使いのディスプレイマネージャ(例: [[GDM#Wayland と独自の NVIDIA ドライバ|GDM]])の[https://download.nvidia.com/XFree86/Linux-x86_64/515.48.07/README/xwayland.html 公式ドキュメント]に記載されている情報も見てください。
  +
  +
=== Kwin Wayland デバッグコンソール ===
  +
  +
{{pkg|kwin}} を使用している場合、以下を実行すると、どのウィンドウが Xwayland とネイティブ Wayland を使用しているか、表面、入力イベント、クリップボードの内容などを確認することができます。
  +
  +
$ qdbus org.kde.KWin /KWin org.kde.KWin.showDebugConsole
  +
  +
=== Xwayland アプリケーションであることを視認する ===
  +
  +
アプリケーションが Xwayland 経由で実行されているかどうかを判断するには、{{AUR|extramaus}} を使用します。
  +
アプリケーションのウィンドウ上にマウスポインタを移動して、マウスポインタが赤くなる場合は、アプリケーションが Xwayland 経由で実行されています。
  +
  +
または、{{pkg|xorg-xeyes}} を使用して、アプリケーションウィンドウ上でマウスポインタを移動するときに、目が動いているかどうかで確認することもできます。
  +
  +
他の方法として、({{Pkg|xorg-xwininfo}} の) ''xwininfo'' をターミナルウィンドウで実行するというものがあります。Xwayland ウィンドウ上にマウスポインタをホバーすると、マウスポインタが + マークに変わります。ウィンドウをクリックすると、xwininfo は情報を表示して終了しますが、ネイティブな Wayland ウィンドウでは何も起こりません。{{ic|Ctrl+C}} を押すことで xwininfo を終了できます。
   
 
== GUI ライブラリ ==
 
== GUI ライブラリ ==
129行目: 165行目:
   
 
{{Pkg|gtk3}} と {{Pkg|gtk4}} パッケージは Wayland バックエンドが有効になっています。GTK ではデフォルトで Wayland バックエンドを使いますが、[[環境変数]]を設定することで Xwayland を使うように上書きできます: {{ic|1=GDK_BACKEND=x11}}。
 
{{Pkg|gtk3}} と {{Pkg|gtk4}} パッケージは Wayland バックエンドが有効になっています。GTK ではデフォルトで Wayland バックエンドを使いますが、[[環境変数]]を設定することで Xwayland を使うように上書きできます: {{ic|1=GDK_BACKEND=x11}}。
  +
  +
テーマの問題は [[GTK#Wayland バックエンド]] を見てください。
   
 
=== Qt ===
 
=== Qt ===
   
[[Qt]] 5 または 6 で Wayland のサポートを有効化するには、Qt 5 と 6 に対してそれぞれ {{Pkg|qt5-wayland}} または {{Pkg|qt6-wayland}} パッケージをインストールしてください。
+
[[Qt]] 5 または 6 で Wayland のサポートを有効化するには、Qt 5 と 6 に対してそれぞれ {{Pkg|qt5-wayland}} または {{Pkg|qt6-wayland}} パッケージをインストールしてください。これで、Qt アプリケーションは Wayland セッション上では Wayland で動作するようになります
  +
  +
必須ではないはずですが、明示的に Wayland プラグインを使って Qt 5 アプリケーションを動作させるには、[https://wiki.qt.io/QtWayland#How_do_I_use_QtWayland.3F] にあるように、{{ic|1=-platform wayland}} を使用するか、[[環境変数]] {{ic|1=QT_QPA_PLATFORM=wayland}} をセットして下さい。
   
Wayland プラグインを使って Qt 5 アプリケーションを動作させるには、[https://wiki.qt.io/QtWayland#How_do_I_use_QtWayland.3F] にあるように、{{ic|1=-platform wayland}} を使用するか、[[環境変数]] {{ic|1=QT_QPA_PLATFORM=wayland}} をセットして下さい。一方、Wayland セッション上で [[X11]] を使用させるには、{{ic|1=QT_QPA_PLATFORM=xcb}} と設定してください。
+
一方、Wayland セッション上で [[X11]] を使用させるには、{{ic|1=QT_QPA_PLATFORM=xcb}} と設定してください。これは、{{AUR|zoom}} など、システムの Qt の実装を使用しない一部のプロプライエタリアプリケーションで必要になる場合があります
これは、{{AUR|zoom}} など、システムの Qt の実装を使用しない一部のプロプライエタリアプリケーションで必要になる場合があります。
 
 
また、{{ic|1=QT_QPA_PLATFORM="wayland;xcb"}} を使用すると、Qt が Wayland を利用できない場合に、代わりに xcb (X11)プラグインを使用させることができます。[https://www.qt.io/blog/2018/05/29/whats-new-in-qt-5-11-for-the-wayland-platform-plugin]
 
また、{{ic|1=QT_QPA_PLATFORM="wayland;xcb"}} を使用すると、Qt が Wayland を利用できない場合に、代わりに xcb (X11)プラグインを使用させることができます。[https://www.qt.io/blog/2018/05/29/whats-new-in-qt-5-11-for-the-wayland-platform-plugin]
   
148行目: 187行目:
 
=== SDL2 ===
 
=== SDL2 ===
   
  +
SDL2 アプリケーションを Wayland 上で動作させるには、{{ic|1=SDL_VIDEODRIVER=wayland}} を設定してください。
SDL2 バージョン 2.0.22 の時点で、SDL [https://github.com/libsdl-org/SDL/pull/4306 デフォルトでは、X11 よりも Wayland が優先されます]。
 
   
  +
{{ic|1=SDL_VIDEODRIVER="wayland,x11"}} とすることにより、Wayland が利用できない場合に代わりに X11 ビデオドライバを使用するように SDL2 を設定できます [https://wiki.libsdl.org/SDL2/FAQUsingSDL]。ウィンドウ装飾を有効化するために {{Pkg|libdecor}} をインストールすると良いかもしれません (例えば、GNOME で)。
{{Note|多くのプロプライエタリなゲームが古いバージョンの SDL を使用しており、これらは Wayland に対応しておらず、{{ic|1=SDL_VIDEODRIVER=wayland}} を設定するとゲームが完全に壊れてしまうかもしれません。アプリケーションを XWayland で強制的に実行するには、{{ic|1=SDL_VIDEODRIVER=x11}} を設定してください。}}
 
   
 
=== GLFW ===
 
=== GLFW ===
   
  +
{{Pkg|glfw}} パッケージには Wayland に対するサポートがあります。{{ic|1=XDG_SESSION_TYPE}} が {{ic|1=wayland}} に設定されていて、かつアプリケーションの開発者が特定のバックエンドを使用するようにしていなければ、Wayland バックエンドが使用されます。
GLFW で Wayland バックエンドを使用するには、({{Pkg|glfw-x11}} ではなく) {{Pkg|glfw-wayland}} パッケージをインストールしてください。
 
  +
  +
詳細は GLFW の[https://github.com/glfw/glfw/blob/3.4/src/platform.c#L87-L99 ソースコード]を参照してください。
   
 
=== GLEW ===
 
=== GLEW ===
166行目: 207行目:
 
=== winit ===
 
=== winit ===
   
Winit は [[Rust]] で書かれたウィンドウ管理ライブラリです。デフォルトでは Wayland が X11 より優先される仕様ですが、環境変数を設定することで Xwayland を使うように上書きすることができます: {{ic|1=WINIT_UNIX_BACKEND=x11}}。
+
Winit は [[Rust]] で書かれたウィンドウ管理ライブラリです。デフォルトでは Wayland が X11 より優先される仕様ですが、環境変数を設定することで Xwayland を使うように上書きすることができます:
  +
  +
* バージョン 0.29.2 より前の場合、{{ic|1=WINIT_UNIX_BACKEND=x11}} を設定してください。
  +
* バージョン 0.29.2 以降の場合、{{ic|1=WAYLAND_DISPLAY}} を unset してください。そうすることで、強制的に {{ic|1=DISPLAY}} 変数を使用して X にフォールバックされます。[https://github.com/rust-windowing/winit/blob/baf10de95843f156b0fbad6b10c3137f1ebd4f1e/src/changelog/v0.29.md?plain=1#L134]
   
 
=== Electron ===
 
=== Electron ===
   
 
Wayland サポートを有効化する方法は次の2つです: アプリケーションごとのコマンドラインフラグを使って有効化するか、設定ファイルを使ってグローバルに有効化するかです。
 
Wayland サポートを有効化する方法は次の2つです: アプリケーションごとのコマンドラインフラグを使って有効化するか、設定ファイルを使ってグローバルに有効化するかです。
  +
  +
アプリケーションがどの electron バージョンを使用しているか確認する方法については [https://stackoverflow.com/q/50345957] を見てください。
  +
  +
{{Note|Plasma では、一部の Electron アプリケーションで間違ったアイコン (デフォルトの Wayland アイコン) がウィンドウに表示され、一方タスクバーには正しいアイコンが表示されることがあります。この問題は、デスクトップファイルの名前を強制する特殊なアプリケーション/ウィンドウルールを作成することで解決できます。}}
  +
  +
==== 環境変数 ====
  +
  +
Electron 28 及びそれ以降を使用するアプリケーションは、[[環境変数]] [https://github.com/electron/electron/blob/main/docs/api/environment-variables.md#electron_ozone_platform_hint-linux {{ic|ELECTRON_OZONE_PLATFORM_HINT}}] を {{ic|auto}} または {{ic|wayland}} に設定することで、Wayland モードを使用することができます。
  +
  +
コマンドラインフラグは、この環境変数より優先されます。
   
 
==== コマンドラインフラグ ====
 
==== コマンドラインフラグ ====
   
  +
Electron がベースとしている Chromium とは異なり、Electron アプリケーションはデフォルトで PipeWire による WebRTC 画面共有を有効化しません。なので、Wayland 上で画面共有の問題を防ぐために {{ic|1=--enable-features=WebRTCPipeWireCapturer}} を使用することが推奨されます。画面共有は {{Pkg|xdg-desktop-portal}} をベースとしています。
Wayland で {{Pkg|electron}} ベースのアプリケーションをネイティブに使用するには、次のフラグをアプリケーションの exec コマンドラインに追加する必要があります (Electron 20 の場合): {{ic|1=--ozone-platform-hint=auto}}。
 
   
  +
環境変数を使うことが望ましくない、または不可能である場合に、{{Pkg|electron}} ベースのアプリケーションを Wayland でネイティブに使用するには、Electron 20 以降では {{ic|1=--ozone-platform-hint=auto}} フラグを使用することで可能です。
トップバーが消失する問題は、追加で次のフラグを使用することで解決できます: {{ic|1=--enable-features=WaylandWindowDecorations}}。このフラグは通常、[[GNOME]] ([https://github.com/electron/electron/pull/29618 electron17] より対応) で必要となります。
 
   
  +
トップバーが消失してしまう場合、{{ic|1=--enable-features=WaylandWindowDecorations}} フラグを使用することで解決します。これは、典型的には [[GNOME]] で必須です ([https://github.com/electron/electron/pull/29618 electron17] からsパオートされています)。
コマンドラインフラグの設定は、例えば [[デスクトップエントリ#desktop ファイルの変更|.desktop ファイルを変更]]し、{{ic|1=Exec=}} 行の最後にフラグを追加することで可能です。
 
   
  +
これらのフラグを永続的に設定する方法は2つあります。1つ目は、アプリケーションの [[デスクトップエントリ#desktop ファイルの変更|.desktop ファイルを変更]]して {{ic|1=Exec=}} 行の末尾にフラグを追加する方法。もう一つは、以下で説明している設定ファイルを使用する方法で、こちらはよりきれいに設定できます。
{{Note|{{AUR|visual-studio-code-bin}} のような ([https://github.com/microsoft/vscode/issues/134612 バグレポート]) 一部のアプリケーションは、Electron に対してフラグを渡さないため、そのアプリケーションの開発者が解決策を実装する必要があります。}}
 
  +
  +
{{Note|一部のアプリケーションは、Electron に対してフラグを渡さないため、そのアプリケーションの開発者が解決策を実装する必要があります。}}
   
 
==== 設定ファイル ====
 
==== 設定ファイル ====
   
ファイル {{ic|${XDG_CONFIG_HOME}/electron-flags.conf}} ({{ic|${XDG_CONFIG_HOME} }} が設定されていない場合、{{ic|1=~/config/electron-flags.conf}} がデフォルトです) を作成/編集し、先に説明したフラグを追加してください (1行につき1オプション、空の行は無し):
+
ファイル {{ic|${XDG_CONFIG_HOME}/electron25-flags.conf}} ({{ic|${XDG_CONFIG_HOME} }} が設定されていない場合、{{ic|1=~/.config/electron25-flags.conf}} がデフォルトです) を作成/編集し、先に説明したフラグを追加してください (1行につき1オプション、空の行は無し):
   
{{hc|~/.config/electron-flags.conf|2=
+
{{hc|~/.config/electron25-flags.conf|2=
 
--enable-features=WaylandWindowDecorations
 
--enable-features=WaylandWindowDecorations
 
--ozone-platform-hint=auto
 
--ozone-platform-hint=auto
195行目: 251行目:
 
==== 古い Electron バージョン ====
 
==== 古い Electron バージョン ====
   
{{ic|electron-flags.conf}} はElectron の最新バージョンに対してのみ適用されます。古いバージョンの Electron 独自の {{ic|electron<version>-flags.conf}} ファイルを使用して設定することができます。バージョン管理されたファイルは、{{ic|${XDG_CONFIG_HOME}/electron-flags.conf}} にソフトリンクを貼ることができます。
+
{{ic|electron25-flags.conf}} は Electron バージョン 25 に対してだけ適用されます。それより古い Electron のバージョンは {{ic|electron<バージョン>-flags.conf}} ファイル設定できます。
   
 
古いバージョンでは、対応する Chromium バージョンによって異なるフラグが必要になる場合があります。例えば、以下のフラグは Electron 13 で機能します:
 
古いバージョンでは、対応する Chromium バージョンによって異なるフラグが必要になる場合があります。例えば、以下のフラグは Electron 13 で機能します:
207行目: 263行目:
   
 
[[Java]] プラットフォームのオープンソース実装である OpenJDK は、まだ Wayland のネイティブサポートを備えていません。
 
[[Java]] プラットフォームのオープンソース実装である OpenJDK は、まだ Wayland のネイティブサポートを備えていません。
OpenJDK に Wayland を実装することを目的としたプロジェクトである [https://openjdk.java.net/projects/wakefield/ Wakefield] が実用できるようになるまでは、XWayland を代わりに使用できます。
+
OpenJDK に Wayland を実装することを目的としたプロジェクトである [https://openjdk.java.net/projects/wakefield/ Wakefield] が実用できるようになるまでは、Xwayland を代わりに使用できます。
   
  +
[[Debian:Wayland#Java Programs (supported since OpenJDK 16?)]] を参照してください:
:OpenJDK 16から、JRE は GTK3(Wayland をサポートしている)を動的にロードできるようになりました。この [https://stackoverflow.com/questions/39197208/java-gui-support-on-wayland discussion] によると、これがサポートされるかもしれません。
 
:{{ic|_JAVA_AWT_WM_NONREPARENTING}} [[環境変数]]を設定することで、Wayland をサポートする GTK3 を動的にロードすることができます。[環境変数]]を "1" に設定することで、アプリケーションが空白の画面で起動する不具合を修正することができます。
 
   
  +
:OpenJDK 16から、JRE は (Wayland をサポートしている) GTK3 を動的にロードできるようになりました。この[https://stackoverflow.com/questions/39197208/java-gui-support-on-wayland 議論]によると、これがサポートされているかもしれません。
== XWayland ==
 
  +
:{{ic|_JAVA_AWT_WM_NONREPARENTING}} [[環境変数]]を "1" に設定することで、アプリケーションが空白の画面で起動する不具合を修正することができます。
 
[https://wayland.freedesktop.org/xserver.html XWayland] は、Wayland の下で実行される X サーバーで、Wayland サポートをまだ提供していないネイティブな [[X11]] アプリケーションに互換性を提供します。これを使用するには、{{Pkg|xorg-xwayland}} パッケージを[[インストール]]します。
 
 
XWayland はコンポジタを介して開始されるため、あなたの使用しているコンポジタのドキュメントを読み、XWayland との互換性についてや、XWayland の起動方法に関する指示を確認しておく必要があります。
 
 
{{Note|
 
* セキュリティ: XWayland は X サーバーであるため、 Wayland のセキュリティ機能はありません。
 
* パフォーマンス: XWayland は X11 と[https://openbenchmarking.org/result/2202053-NE-NVIDIARTX35 ほぼ同等のパフォーマンス]を発揮します。しかし、一部のケースで (特に NVIDIA カード上で) パフォーマンスの低下を感じるかもしれません。
 
* 互換性: XWayland は X11 と完全な後方互換性があるわけではありません。一部のアプリケーションは XWayland 下では正しく動作しない場合があります。}}
 
 
=== NVIDIA ドライバ ===
 
 
{{Note|バージョン 470 より前の Nvidia ドライバ(例: {{aur|nvidia-390xx-dkms}}) はハードウェア支援のある XWayland をサポートしておらず、非 Wayland ネイティブなアプリケーションは Wayland セッションでのパフォーマンスが低下します。}}
 
 
なお、[[NVIDIA#DRM カーネルモードセッティング|DRM KMS]] を有効にする必要があります。また、お使いのディスプレイマネージャ(例: [[GDM#Wayland と独自の NVIDIA ドライバ|GDM]])の[https://download.nvidia.com/XFree86/Linux-x86_64/515.48.07/README/xwayland.html 公式ドキュメント]に記載されている情報も見てください。
 
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
236行目: 277行目:
 
* [https://github.com/atx/wtype wtype] ({{Pkg|wtype}}) - Wayland 用 xdotool type。{{man|1|wtype}} を参照。
 
* [https://github.com/atx/wtype wtype] ({{Pkg|wtype}}) - Wayland 用 xdotool type。{{man|1|wtype}} を参照。
 
* [https://github.com/boppreh/keyboard keyboard] - Windows と Linux で動作する Python ライブラリ。実験的な OS X サポートあり。[https://github.com/boppreh/mouse mouse] ライブラリも参照。
 
* [https://github.com/boppreh/keyboard keyboard] - Windows と Linux で動作する Python ライブラリ。実験的な OS X サポートあり。[https://github.com/boppreh/mouse mouse] ライブラリも参照。
  +
* [https://git.sr.ht/~brocellous/wlrctl wlrctl] ({{AUR|wlrctl}}) - 雑多な wlroots 拡張のためのコマンドラインユーティリティ (foreign-toplevel-management、virtual-keyboard、virtual-pointer をサポート)。
   
  +
=== キーボードやマウスキーのリマップ ===
=== Kwin Wayland デバッグコンソール ===
 
   
  +
[[入力リマップユーティリティ]] を見てください。
{{pkg|kwin}} を使用している場合、以下を実行すると、どのウィンドウが Xwayland とネイティブ Wayland を使用しているか、表面、入力イベント、クリップボードの内容などを確認することができます。
 
   
  +
=== X11 アプリケーションで Wayland ウィンドウをスクリーンキャストする ===
$ qdbus org.kde.KWin /KWin org.kde.KWin.showDebugConsole
 
   
=== Xwayland アプリケーションであること視認する ===
+
[[スクリーンキャプチャ#X11 アプリケーションで Wayland ウィンドウスクリーンキャストする]] を見てください。
 
アプリケーションが Xwayland 経由で実行されているかどうかを判断するには、{{AUR|extramaus}} を使用します。
 
アプリケーションのウィンドウ上にマウスポインタを移動して、マウスポインタが赤くなる場合は、アプリケーションが Xwayland 経由で実行されています。
 
 
または、{{pkg|xorg-xeyes}} を使用して、アプリケーションウィンドウ上でマウスポインタを移動するときに、目が動いているかどうかで確認することもできます。
 
 
他の方法として、({{Pkg|xorg-xwininfo}} の) ''xwininfo'' をターミナルウィンドウで実行するというものがあります。Xwayland ウィンドウ上にマウスポインタをホバーすると、マウスポインタが + マークに変わります。ウィンドウをクリックすると、xwininfo は情報を表示して終了しますが、ネイティブな Wayland ウィンドウでは何も起こりません。{{ic|Ctrl+C}} を押すことで xwininfo を終了できます。
 
 
=== キーボードやマウスキーのリマップ ===
 
 
[[入力リマップユーティリティ]] を見てください。
 
   
 
==トラブルシューティング==
 
==トラブルシューティング==
270行目: 301行目:
 
* ([[sway]] で使用されている) {{pkg|wlroots}} は、バージョン 0.10 より、{{Pkg|wayvnc}} を使って VNC バックエンドを提供しています。RDP バックエンドは削除されました [https://github.com/swaywm/wlroots/releases/tag/0.10.0]。
 
* ([[sway]] で使用されている) {{pkg|wlroots}} は、バージョン 0.10 より、{{Pkg|wayvnc}} を使って VNC バックエンドを提供しています。RDP バックエンドは削除されました [https://github.com/swaywm/wlroots/releases/tag/0.10.0]。
 
* {{pkg|mutter}} はコンパイル時にリモートデスクトップが有効化されています。詳細は [https://wiki.gnome.org/Projects/Mutter/RemoteDesktop] と {{Pkg|gnome-remote-desktop}} を見てください。
 
* {{pkg|mutter}} はコンパイル時にリモートデスクトップが有効化されています。詳細は [https://wiki.gnome.org/Projects/Mutter/RemoteDesktop] と {{Pkg|gnome-remote-desktop}} を見てください。
  +
* {{pkg|krfb}} は {{pkg|kwin}} に VNC サーバを提供します。{{ic|krfb-virtualmonitor}} を使えば、他のデバイスを外部モニタとしてセットアップすることが可能です。
 
* 2013年に FreeRDP が Weston にマージされました。コンパイルフラグで有効化されています。{{Pkg|weston}} パッケージは、バージョン 6.0.0 より、FreeRDP が有効化されています。
 
* 2013年に FreeRDP が Weston にマージされました。コンパイルフラグで有効化されています。{{Pkg|weston}} パッケージは、バージョン 6.0.0 より、FreeRDP が有効化されています。
 
* {{AUR|waypipe}} (や {{AUR|waypipe-git}}) は Wayland アプリケーションの透過プロキシです。[[SSH]] 上で動作するラッパーコマンドあり。
 
* {{AUR|waypipe}} (や {{AUR|waypipe-git}}) は Wayland アプリケーションの透過プロキシです。[[SSH]] 上で動作するラッパーコマンドあり。
  +
** 以下は、Plasma デスクトップでリモートの KDE kcalc を起動する例です:
  +
$ waypipe ssh example.local env QT_QPA_PLATFORM=wayland-egl QT_QPA_PLATFORMTHEME=KDE dbus-launch kcalc
   
=== ゲームやリモートデスクトップ、仮想マシンウィンドウでの入力 ===
+
=== ゲームやリモートデスクトップ、仮想マシンウィンドウでの入力捕捉 ===
   
 
Xorg と異なり、Wayland では入力デバイスを独占 (グラブ) することができません (例: [https://tronche.com/gui/x/xlib/input/XGrabKeyboard.html キーボード]、[https://tronche.com/gui/x/xlib/input/XGrabPointer.html マウス])。キーボードショートカットやポインタデバイスをアプリケーションウィンドウに渡すのは Wayland コンポジタの役目となっています。
 
Xorg と異なり、Wayland では入力デバイスを独占 (グラブ) することができません (例: [https://tronche.com/gui/x/xlib/input/XGrabKeyboard.html キーボード]、[https://tronche.com/gui/x/xlib/input/XGrabPointer.html マウス])。キーボードショートカットやポインタデバイスをアプリケーションウィンドウに渡すのは Wayland コンポジタの役目となっています。
282行目: 316行目:
 
* マウスポインタがアプリケーションウィンドウに制限されなくなるため、仮想マシンやリモートデスクトップのウィンドウ内のマウスポインタの位置がホスト環境のマウスポインタとずれるようになります。
 
* マウスポインタがアプリケーションウィンドウに制限されなくなるため、仮想マシンやリモートデスクトップのウィンドウ内のマウスポインタの位置がホスト環境のマウスポインタとずれるようになります。
   
Wayland と XWayland にプロトコル拡張を追加することで解決を図っていますが、Wayland コンポジタが拡張をサポートしている必要があり、ネイティブの Wayland クライアントの場合、ウィジェットツールキット (例: GTK, Qt) やアプリケーション自身が拡張に対応していなければなりません。X上で動作するアプリケーションの場合、対応は不要
+
Wayland と Xwayland にプロトコル拡張を追加することで解決を図っていますが、Wayland コンポジタが拡張をサポートしている必要があり、ネイティブの Wayland クライアントの場合、ウィジェットツールキット (例: GTK, Qt) やアプリケーション自身が拡張に対応していなければなりません。Xorg アプリケーションの場合、Xwayland のサポート十分であるため、アプリケーションやウィジェット・ツールキットに変更を加える必要はありません
   
 
これらの拡張はすでに {{pkg|wayland-protocols}} に含まれており、{{pkg|xorg-xwayland}} によってサポートされています。
 
これらの拡張はすでに {{pkg|wayland-protocols}} に含まれており、{{pkg|xorg-xwayland}} によってサポートされています。
288行目: 322行目:
 
関連する拡張:
 
関連する拡張:
   
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/xwayland-keyboard-grab/xwayland-keyboard-grab-unstable-v1.xml XWayland keyboard grabbing protocol]
+
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/xwayland-keyboard-grab/xwayland-keyboard-grab-unstable-v1.xml Xwayland keyboard grabbing protocol]
 
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml Compositor shortcuts inhibit protocol]
 
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml Compositor shortcuts inhibit protocol]
 
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/relative-pointer/relative-pointer-unstable-v1.xml Relative pointer protocol]
 
* [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/relative-pointer/relative-pointer-unstable-v1.xml Relative pointer protocol]
297行目: 331行目:
 
* Mutter, [[GNOME]] のコンポジタ ([https://bugzilla.gnome.org/show_bug.cgi?id=783342 リリース 3.28] 以降)。
 
* Mutter, [[GNOME]] のコンポジタ ([https://bugzilla.gnome.org/show_bug.cgi?id=783342 リリース 3.28] 以降)。
 
* wlroots (Relative pointer protocols と Pointer constraints protocol に対応)
 
* wlroots (Relative pointer protocols と Pointer constraints protocol に対応)
  +
* Kwin
  +
** [[KDE#Wayland で X11 のショートカットが衝突する]]
  +
** [https://invent.kde.org/plasma/kwin/-/blob/master/src/wayland/keyboard_shortcuts_inhibit_v1_interface.cpp Keyboard shortcuts inhibit]
   
 
サポートしているウィジェットツールキット:
 
サポートしているウィジェットツールキット:
309行目: 346行目:
   
 
[[sway]] などの Wayland コンポジターを起動する前に {{ic|1=__EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json}} を [[環境変数]] として追加します。
 
[[sway]] などの Wayland コンポジターを起動する前に {{ic|1=__EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json}} を [[環境変数]] として追加します。
  +
  +
=== 拡大/サーフェススケーリング ===
  +
  +
スクリーンの拡大は、まだ解決していません。[https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/145 wp-surface-scale プロトコルを提供する]プルリクエストが2022年半ばにマージされました。
   
 
== 参照 ==
 
== 参照 ==
   
 
* [https://wayland.freedesktop.org/docs/html/ Wayland オンラインドキュメント]
 
* [https://wayland.freedesktop.org/docs/html/ Wayland オンラインドキュメント]
* [https://gitlab.freedesktop.org/wayland 公式 Wayland Git リポジトリ]
+
* [https://gitlab.freedesktop.org/wayland 公式リポジトリ]
 
* [[Fedora:How to debug Wayland problems]]
 
* [[Fedora:How to debug Wayland problems]]
 
* [https://arewewaylandyet.com/ Are we Wayland yet?]
 
* [https://arewewaylandyet.com/ Are we Wayland yet?]
323行目: 364行目:
 
* [https://askubuntu.com/questions/1393618/how-can-i-tell-if-an-application-is-using-xwayland How can I tell if an application is using XWayland]
 
* [https://askubuntu.com/questions/1393618/how-can-i-tell-if-an-application-is-using-xwayland How can I tell if an application is using XWayland]
   
{{TranslationStatus|Wayland|2022-12-20|759999}}
+
{{TranslationStatus|Wayland|2024-03-22|803938}}

2024年3月22日 (金) 10:04時点における版

関連記事

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

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

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

要件

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

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

バッファ API GPU ドライバーのサポート Wayland コンポジタのサポート
GBM NVIDIA < 495* 以外の全てのドライバー 全て
EGLStreams NVIDIA GNOME
* 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
  • dwl — wlroots ベースの dwm ライクな Wayland コンポジタ。
https://codeberg.org/dwl/dwl || dwlAUR
  • Hyprland — 見た目を犠牲にしないダイナミックタイル型 Wayland コンポジタ。
https://hyprland.org || hyprland
  • japokwm — wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。
https://github.com/werererer/japokwm || japokwm-gitAUR
  • newm — ラップトップとタッチパッドを念頭に置いて作成された Wayland コンポジタ (現在、メンテナンスされていません)
https://github.com/jbuchermn/newm/ || newm-gitAUR
  • niri — スクロール可能なタイル型 Wayland コンポジタ。
https://github.com/YaLTeR/niri/ || niriAUR
  • Polonium — Bismuth のフォークであり、後継。KDE のためのタイル型ウィンドウマネージャ。
https://github.com/zeroxoneafour/polonium || kwin-poloniumAUR
  • Qtile — Python で記述および設定されたフル機能のハッキング可能なタイリングウィンドウマネージャーと Wayland コンポジタ。
https://github.com/qtile/qtile || qtile
  • river — dwm と bspwm にインスパイアされた動的なタイル型 Wayland コンポジタ。
https://github.com/ifreund/river || river
  • Sway — wlroots ベースの i3 互換 Wayland コンポジタ。
https://github.com/swaywm/sway || sway
  • SwayFx — 魅力的な視覚効果機能を追加した Sway
https://github.com/WillPower3309/swayfx || swayfxAUR
  • Velox — swc ベースのシンプルなウィンドウマネージャです。dwmxmonad の影響を受けています。
https://github.com/michaelforney/velox || velox-gitAUR
  • Vivarium — wlroots を使用するダイナミックタイル型 Wayland コンポジタ。xmonad にインスパイアされたデスクトップセマンティクスを持ちます。
https://github.com/inclement/vivarium || vivarium-gitAUR

スタック型

Enlightenment#手動 を参照してください。詳細: [2] [3] || https://www.enlightenment.org/
  • 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://gitlab.com/Rubo/wio || wio-wlAUR

その他

  • Cage — キオスクのような単一のフルスクリーンアプリケーションを表示します。
https://www.hjdskes.nl/projects/cage/ || cage
  • nwg-shell — Sway と Hyprland Wayland コンポジタのための GTK ベースシェル。
https://github.com/nwg-piotr/nwg-shell || nwg-shellAUR
  • kiwmi — 完全にプログラミング可能な Wayland コンポジタ。
https://github.com/buffet/kiwmi || kiwmi-gitAUR
  • phoc — モバイル端末のための wlroots ベースの小さなコンポジタ。
https://gitlab.gnome.org/World/Phosh/phoc || phoc

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

ディスプレイマネージャ

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

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

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 を終了できます。

GUI ライブラリ

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

GTK

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

テーマの問題は GTK#Wayland バックエンド を見てください。

Qt

Qt 5 または 6 で Wayland のサポートを有効化するには、Qt 5 と 6 に対してそれぞれ qt5-wayland または qt6-wayland パッケージをインストールしてください。これで、Qt アプリケーションは Wayland セッション上では 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 アプリケーションを Wayland 上で動作させるには、SDL_VIDEODRIVER=wayland を設定してください。

SDL_VIDEODRIVER="wayland,x11" とすることにより、Wayland が利用できない場合に代わりに X11 ビデオドライバを使用するように SDL2 を設定できます [6]。ウィンドウ装飾を有効化するために libdecor をインストールすると良いかもしれません (例えば、GNOME で)。

GLFW

glfw パッケージには Wayland に対するサポートがあります。XDG_SESSION_TYPEwayland に設定されていて、かつアプリケーションの開発者が特定のバックエンドを使用するようにしていなければ、Wayland バックエンドが使用されます。

詳細は GLFW のソースコードを参照してください。

GLEW

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

EFL

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

winit

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

  • バージョン 0.29.2 より前の場合、WINIT_UNIX_BACKEND=x11 を設定してください。
  • バージョン 0.29.2 以降の場合、WAYLAND_DISPLAY を unset してください。そうすることで、強制的に DISPLAY 変数を使用して X にフォールバックされます。[7]

Electron

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

アプリケーションがどの electron バージョンを使用しているか確認する方法については [8] を見てください。

ノート: Plasma では、一部の Electron アプリケーションで間違ったアイコン (デフォルトの Wayland アイコン) がウィンドウに表示され、一方タスクバーには正しいアイコンが表示されることがあります。この問題は、デスクトップファイルの名前を強制する特殊なアプリケーション/ウィンドウルールを作成することで解決できます。

環境変数

Electron 28 及びそれ以降を使用するアプリケーションは、環境変数 ELECTRON_OZONE_PLATFORM_HINTauto または wayland に設定することで、Wayland モードを使用することができます。

コマンドラインフラグは、この環境変数より優先されます。

コマンドラインフラグ

Electron がベースとしている Chromium とは異なり、Electron アプリケーションはデフォルトで PipeWire による WebRTC 画面共有を有効化しません。なので、Wayland 上で画面共有の問題を防ぐために --enable-features=WebRTCPipeWireCapturer を使用することが推奨されます。画面共有は xdg-desktop-portal をベースとしています。

環境変数を使うことが望ましくない、または不可能である場合に、electron ベースのアプリケーションを Wayland でネイティブに使用するには、Electron 20 以降では --ozone-platform-hint=auto フラグを使用することで可能です。

トップバーが消失してしまう場合、--enable-features=WaylandWindowDecorations フラグを使用することで解決します。これは、典型的には GNOME で必須です (electron17 からsパオートされています)。

これらのフラグを永続的に設定する方法は2つあります。1つ目は、アプリケーションの .desktop ファイルを変更して Exec= 行の末尾にフラグを追加する方法。もう一つは、以下で説明している設定ファイルを使用する方法で、こちらはよりきれいに設定できます。

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

設定ファイル

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

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

古い Electron バージョン

electron25-flags.conf は Electron バージョン 25 に対してだけ適用されます。それより古い Electron のバージョンは electron<バージョン>-flags.conf ファイルで設定できます。

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

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

Java

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

Debian:Wayland#Java Programs (supported since OpenJDK 16?) を参照してください:

OpenJDK 16から、JRE は (Wayland をサポートしている) GTK3 を動的にロードできるようになりました。この議論によると、これがサポートされているかもしれません。
_JAVA_AWT_WM_NONREPARENTING 環境変数を "1" に設定することで、アプリケーションが空白の画面で起動する不具合を修正することができます。

ヒントとテクニック

自動化

  • ydotool (ydotool) - 汎用のコマンドラインツール (wayland 以外でも利用可能)。ydotool.service ユーザーユニット起動/有効化してください。ydotoold(8)ydotoold(1) を参照。
  • wtype (wtype) - Wayland 用 xdotool type。wtype(1) を参照。
  • keyboard - Windows と Linux で動作する Python ライブラリ。実験的な OS X サポートあり。mouse ライブラリも参照。
  • wlrctl (wlrctlAUR) - 雑多な wlroots 拡張のためのコマンドラインユーティリティ (foreign-toplevel-management、virtual-keyboard、virtual-pointer をサポート)。

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

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

X11 アプリケーションで Wayland ウィンドウをスクリーンキャストする

スクリーンキャプチャ#X11 アプリケーションで Wayland ウィンドウをスクリーンキャストする を見てください。

トラブルシューティング

色補正

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

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

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

リモートディスプレイ

  • (sway で使用されている) wlroots は、バージョン 0.10 より、wayvnc を使って VNC バックエンドを提供しています。RDP バックエンドは削除されました [9]
  • mutter はコンパイル時にリモートデスクトップが有効化されています。詳細は [10]gnome-remote-desktop を見てください。
  • krfbkwin に VNC サーバを提供します。krfb-virtualmonitor を使えば、他のデバイスを外部モニタとしてセットアップすることが可能です。
  • 2013年に FreeRDP が Weston にマージされました。コンパイルフラグで有効化されています。weston パッケージは、バージョン 6.0.0 より、FreeRDP が有効化されています。
  • waypipeAUR (や waypipe-gitAUR) は Wayland アプリケーションの透過プロキシです。SSH 上で動作するラッパーコマンドあり。
    • 以下は、Plasma デスクトップでリモートの KDE kcalc を起動する例です:
$ waypipe ssh example.local env QT_QPA_PLATFORM=wayland-egl QT_QPA_PLATFORMTHEME=KDE dbus-launch kcalc

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

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

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

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

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

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

関連する拡張:

サポートしている 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環境変数 として追加します。

拡大/サーフェススケーリング

スクリーンの拡大は、まだ解決していません。wp-surface-scale プロトコルを提供するプルリクエストが2022年半ばにマージされました。

参照

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