「Wayland」の版間の差分
(同期) |
|||
| (5人の利用者による、間の68版が非表示) | |||
| 1行目: | 1行目: | ||
| + | [[Category:Wayland]] |
||
| − | [[Category:グラフィカルユーザーインターフェイス]] |
||
| + | [[de:Wayland]] |
||
[[en:Wayland]] |
[[en:Wayland]] |
||
[[es:Wayland]] |
[[es:Wayland]] |
||
| − | [[fr:Wayland]] |
||
[[pt:Wayland]] |
[[pt:Wayland]] |
||
[[ru:Wayland]] |
[[ru:Wayland]] |
||
[[zh-hans:Wayland]] |
[[zh-hans:Wayland]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
| − | {{Related| |
+ | {{Related|カーネルモード設定}} |
{{Related|Xorg}} |
{{Related|Xorg}} |
||
{{Related|スクリーンショットの取得#Wayland}} |
{{Related|スクリーンショットの取得#Wayland}} |
||
| 16行目: | 16行目: | ||
Wayland プロトコルを使用するディスプレイサーバは、[[Wikipedia:ja:コンポジット型ウィンドウマネージャ|コンポジット型ウィンドウマネージャ]] としても機能するため、'''コンポジタ''' と呼ばれます。以下に[[#コンポジタ|Wayland コンポジタのリスト]]を示します。 |
Wayland プロトコルを使用するディスプレイサーバは、[[Wikipedia:ja:コンポジット型ウィンドウマネージャ|コンポジット型ウィンドウマネージャ]] としても機能するため、'''コンポジタ''' と呼ばれます。以下に[[#コンポジタ|Wayland コンポジタのリスト]]を示します。 |
||
| − | + | ネイティブな X11 アプリケーションをシームレスに動かすための後方互換性として、[[#Xwayland|Xwayland]] を使うことができます。これは Wayland に X サーバを提供します。 |
|
== 要件 == |
== 要件 == |
||
| − | ほとんどの Wayland コンポジタは、[[ |
+ | ほとんどの Wayland コンポジタは、[[カーネルモード設定]]を利用しているシステムでのみ動作します。Wayland それ自体はグラフィカルな環境を提供しません。ゆえに、Wayland に加えてコンポジタ (以下のセクションを参照)、あるいは、コンポジタを含むデスクトップ環境 (例: [[GNOME]]、[[Plasma]]) が必要となります。 |
| − | GPU ドライバ |
+ | 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" |
||
| − | |- |
||
! バッファ API !! GPU ドライバーのサポート !! Wayland コンポジタのサポート |
! バッファ API !! GPU ドライバーのサポート !! Wayland コンポジタのサポート |
||
|- |
|- |
||
| GBM || [[NVIDIA]] < 495* 以外の全てのドライバー || 全て |
| GBM || [[NVIDIA]] < 495* 以外の全てのドライバー || 全て |
||
|- |
|- |
||
| − | | EGLStreams || [[NVIDIA]] || [[GNOME |
+ | | EGLStreams || [[NVIDIA]] || [[GNOME]] |
| − | |- |
||
|} |
|} |
||
| − | : * |
+ | : * 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 のサポートを打ち切りました]。 |
||
| − | : GBM をバックエンドとして使うには、次の[[環境変数]]を設定してください: {{bc|<nowiki>GBM_BACKEND=nvidia-drm |
||
| + | |||
| − | __GLX_VENDOR_LIBRARY_NAME=nvidia</nowiki>}} |
||
| + | 人気なデスクトップ環境/コンポジタと、NVIDIA によってまだサポートされている GPU を使用している場合、おそらくすでに GBM バックエンドを使用しています。確認するには、次を実行してください: {{ic|journalctl -b 0 --grep "renderer for"}}。GBM をバックエンドとして強制的に使用させるには、次の[[環境変数]]を設定してください: |
||
| + | |||
| + | GBM_BACKEND=nvidia-drm |
||
| + | __GLX_VENDOR_LIBRARY_NAME=nvidia |
||
== コンポジタ == |
== コンポジタ == |
||
| − | '''タイル型''' |
+ | '''スタック型'''、'''タイル型'''、'''ダイナミック型''' の違いについては、[[ウィンドウマネージャ#種類]] を参照してください。 |
| + | |||
| + | === スタック型 === |
||
| + | |||
| + | * {{App|[[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|hikari|FreeBSD で活発に開発されている [[cwm]] にインスパイアされた wlroots ベースのコンポジタ。Linux もサポートしています。|https://web.archive.org/web/20241220075628/https://hikari.acmelabs.space/|{{AUR|hikari}}}} |
||
| + | * {{App|KDE [[w:KWin|KWin]]|[[KDE#Plasma の起動]] を参照。|https://userbase.kde.org/KWin|{{Pkg|kwin}}}} |
||
| + | * {{App|Liri Shell|[[Liri]] の一部、しかし、QtQuick と QtCompositor を使って Wayland 用のコンポジタとして作られています。|https://github.com/lirios/shell|{{AUR|liri-shell}}{{Broken package link|package not found}}}} |
||
| + | * {{App|[[labwc]]|Openbox にインスパイアされた wlroots ベースのコンポジタ。|https://github.com/labwc/labwc|{{Pkg|labwc}}}} |
||
| + | * {{App|[[w:Mutter (software)|Mutter]]|[[GNOME#GNOME の起動]] を参照。|https://gitlab.gnome.org/GNOME/mutter|{{Pkg|mutter}}}} |
||
| + | * {{App|wayfire|[[Compiz]] にインスパイアされた、wlroots ベースの 3D コンポジタ。|https://wayfire.org/|{{AUR|wayfire}}}} |
||
| + | * {{App|[[Weston]]|正しさ、信頼性、予測可能性、性能のために設計された Wayland コンポジタ。|https://gitlab.freedesktop.org/wayland/weston|{{Pkg|weston}}}} |
||
| + | * {{App|wio|Plan 9 のリオデスクトップのルックアンドフィールを複製することを目的とする wlroots ベースのコンポジタ。|https://gitlab.com/Rubo/wio|{{AUR|wio-wl}}}} |
||
=== タイル型 === |
=== タイル型 === |
||
* {{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| |
+ | * {{App|miracle-wm|Mir ベースの Wayland コンポジた。i3 や sway のスタイルですが、swayfs のように、これらよりも派手で機能に富んでいます。|https://github.com/miracle-wm-org/miracle-wm|{{AUR|miracle-wm}}}} |
| − | * {{App| |
+ | * {{App|[[niri]]|スクロール可能なタイル型 Wayland コンポジタ。|https://github.com/YaLTeR/niri/|{{Pkg|niri}}}} |
| − | * {{App|[[Hyprland]]|見た目を犠牲にしないダイナミックタイル型 Wayland コンポジタ。|https://github.com/vaxerski/Hyprland|{{AUR|hyprland}}}} |
||
| − | * {{App|japokwm|wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。|https://github.com/werererer/japokwm|{{AUR|japokwm-git}}}} |
||
| − | * {{App|newm|ラップトップとタッチパッドを念頭に置いて作成された Wayland コンポジタ。|https://github.com/jbuchermn/newm/|{{AUR|newm-git}}}} |
||
* {{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|{{AUR|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| |
+ | * {{App|SwayFx|魅力的な視覚効果機能を追加した [[Sway]]。|https://github.com/WillPower3309/swayfx|{{AUR|swayfx}}}} |
| − | * {{App| |
+ | * {{App|Velox|swc ベースのシンプルなウィンドウマネージャです。dwm と [[xmonad]] の影響を受けています。|https://github.com/michaelforney/velox|{{AUR|velox-git}}}} |
| − | * {{App|waymonad|[[Haskell]] で書かれた xmonad にインスパイアされた Wayland コンジタ。|https://github.com/waymonad/waymonad}} |
||
| − | === |
+ | === ダイナミック型 === |
| + | * {{App|[[cwc]]|wlroots ベースの [[awesome]] ライクな Wayland コンポジタ。|https://cudiph.github.io/cwc/apidoc/| {{AUR|cwc}}}} |
||
| − | * {{App|[[Enlightenment]]|[[Enlightenment]]|[[Enlightenment#Enlightenment を手動で起動する]] を参照してください。詳細: [https://git.enlightenment.org/core/enlightenment.git/tree/README] [https://www.enlightenment.org/about-wayland]|https://www.enlightenment.org/|{{Pkg|enlightenment}}}} |
||
| + | * {{App|[[dwl]]|wlroots ベースの [[dwm]] ライクな Wayland コンポジタ。|https://codeberg.org/dwl/dwl|{{AUR|dwl}}}} |
||
| − | * {{App|Greenfield|Web ブラウザーで実行され、リモートのアプリケーションを表示できます。|https://greenfield.app/}} |
||
| − | * {{App| |
+ | * {{App|[[Hyprland]]|見た目を犠牲にしないダイナミックなタイリング Wayland コンポジタ。|https://hyprland.org|{{Pkg|hyprland}}}} |
| − | * {{App| |
+ | * {{App|japokwm|wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。|https://github.com/werererer/japokwm|{{AUR|japokwm-git}}}} |
| − | * {{App| |
+ | * {{App|[[river]]|dwm と [[bspwm]] にインスパイアされた動的なタイル型 Wayland コンポジタ。|https://codeberg.org/river/river|{{Pkg|river}}}} |
| − | * {{App| |
+ | * {{App|Vivarium|wlroots を使用するダイナミックタイル型 Wayland コンポジタ。[[xmonad]] にインスパイアされたデスクトップセマンティクスを持ちます。|https://github.com/inclement/vivarium|{{AUR|vivarium-git}}}} |
| − | * {{App|labwc|Openbox にインスパイアされた wlroots ベースのコンポジタ。|https://github.com/labwc/labwc|{{AUR|labwc-git}}}} |
||
| − | * {{App|[[w:Mutter (software)|Mutter]]|[[GNOME#GNOME の起動]] を参照。|https://gitlab.gnome.org/GNOME/mutter|{{Pkg|mutter}}}} |
||
| − | * {{App|wayfire|[[Compiz]] にインスパイアされ、wlroots に基づく 3D コンポジタ。|https://wayfire.org/|{{AUR|wayfire}}}} |
||
| − | * {{App|[[Weston]]|Wayland コンポジタのリファレンス実装。|https://gitlab.freedesktop.org/wayland/weston|{{Pkg|weston}}}} |
||
| − | * {{App|wio|Plan 9 のリオデスクトップのルックアンドフィールを複製することを目的とする wlroots ベースのコンポジタ。|https://wio-project.org/}} |
||
=== その他 === |
=== その他 === |
||
* {{App|Cage|キオスクのような単一のフルスクリーンアプリケーションを表示します。|https://www.hjdskes.nl/projects/cage/|{{Pkg|cage}}}} |
* {{App|Cage|キオスクのような単一のフルスクリーンアプリケーションを表示します。|https://www.hjdskes.nl/projects/cage/|{{Pkg|cage}}}} |
||
| + | * {{App|phoc|モバイル端末のための wlroots ベースの小さなコンポジタ。|https://gitlab.gnome.org/World/Phosh/phoc|{{Pkg|phoc}}}} |
||
| − | * {{App|Maze Compositor|Qt を使用して 3D 迷路ウィンドウをレンダリングします。|https://github.com/imbavirus/mazecompositor}} |
||
| − | * {{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}}}} |
||
上記のいくつかは [[ディスプレイマネージャ]] をサポートする場合があります。 |
上記のいくつかは [[ディスプレイマネージャ]] をサポートする場合があります。 |
||
| 85行目: | 86行目: | ||
== ディスプレイマネージャ == |
== ディスプレイマネージャ == |
||
| − | Wayland コンポジタの実行をサポートしている[[ディスプレイマネージャ]]は以下の表の通りで |
+ | Wayland コンポジタの実行をサポートしている[[ディスプレイマネージャ]]は以下の表の通りです。 |
{| class="wikitable sortable" |
{| class="wikitable sortable" |
||
! 名前 |
! 名前 |
||
| + | ! 何で動作するか |
||
| − | ! 種類 |
||
! 説明 |
! 説明 |
||
| + | |- |
||
| + | | {{Pkg|emptty}} |
||
| + | | TTY |
||
| + | | TTY で動作するシンプルな CLI ディスプレイマネージャ。 |
||
|- |
|- |
||
| [[GDM]] |
| [[GDM]] |
||
| − | | Wayland |
+ | | Wayland/Xorg |
| [[GNOME]] ディスプレイマネージャ。 |
| [[GNOME]] ディスプレイマネージャ。 |
||
|- |
|- |
||
| [[greetd]] |
| [[greetd]] |
||
| + | | Wayland/Xorg/TTY |
||
| − | | ログインデーモン |
||
| + | [[Greetd#Greeter]] を参照。 |
||
| 最小でありながら柔軟なログインデーモン。 |
| 最小でありながら柔軟なログインデーモン。 |
||
| + | |- |
||
| + | | {{Pkg|lemurs}} |
||
| + | | TTY |
||
| + | | Rust で書かれた TUI ディスプレイマネージャ。 |
||
| + | |- |
||
| + | | {{AUR|lidm}} |
||
| + | | TTY |
||
| + | | C で書かれた、完全にカラフルでカスタマイズ可能な TUI ディスプレイマネージャ。 |
||
|- |
|- |
||
| [[LightDM]] |
| [[LightDM]] |
||
| + | | Xorg[https://github.com/canonical/lightdm/issues/267] |
||
| − | | X11 上で動作 |
||
| 様々なデスクトップに対応したディスプレイマネージャ。 |
| 様々なデスクトップに対応したディスプレイマネージャ。 |
||
|- |
|- |
||
| + | | {{Pkg|ly}} |
||
| − | | [[Ly]] |
||
| + | | TTY |
||
| − | | コンソール上で動作 |
||
| C で書かれた TUI ディスプレイマネージャ。 |
| C で書かれた TUI ディスプレイマネージャ。 |
||
|- |
|- |
||
| [[SDDM]] |
| [[SDDM]] |
||
| + | | Wayland/Xorg |
||
| − | | X11 上で動作 |
||
| QML ベースのディスプレイマネージャ。 |
| QML ベースのディスプレイマネージャ。 |
||
|- |
|- |
||
| − | | |
+ | | {{AUR|tbsm}} |
| + | | TTY |
||
| − | | コンソール上で動作 |
||
| bash のみに依存するシンプルな CLI セッションランチャー。 |
| bash のみに依存するシンプルな CLI セッションランチャー。 |
||
| + | |- |
||
| + | | [[uwsm]] |
||
| + | | TTY |
||
| + | | スタンドアローンなコンポジタのための、セッションと XDG autostart のマネージャ。 |
||
| + | TUI メニューを提供しますが、他のディスプレイマネージャと共に使用することもできます。 |
||
|} |
|} |
||
| − | == |
+ | == Xwayland == |
| + | {{man|1|Xwayland}} は、Wayland の下で実行される X サーバーで、Wayland サポートをまだ提供していないネイティブな [[X11]] アプリケーションに互換性を提供します。これを使用するには、{{Pkg|xorg-xwayland}} パッケージを[[インストール]]します。 |
||
| − | [https://wayland.freedesktop.org/toolkits.html 公式ウェブサイト] で詳細を確認してください。 |
||
| + | |||
| + | 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 を使用しているか、表面、入力イベント、クリップボードの内容などを確認することができます。 |
||
| + | |||
| + | $ qdbus6 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 を終了できます。 |
||
| + | |||
| + | あるいは、''xlsclients'' ({{Pkg|xorg-xlsclients}} パッケージ) を使用することもできます。Xwayland で動作中のアプリケーションを全てリストアップするには、{{ic|xlsclients -l}} を実行してください。 |
||
| + | |||
| + | == GUI ライブラリ == |
||
=== GTK === |
=== GTK === |
||
{{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}} をセットして下さい。 |
| + | |||
| − | これは、{{AUR|zoom}} など、システムの Qt の実装を使用しない一部のプロプライエタリアプリケーションで必要になる場合があります。 |
||
| + | 一方、Wayland セッション上で [[X11]] を使用させるには、{{ic|1=QT_QPA_PLATFORM=xcb}} と設定してください。これは、システムの 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] |
||
[[sway]] などの一部のコンポジターでは、ネイティブに実行されている Qt アプリケーションの機能が不足している場合があります。たとえば、[https://keepassxc.org KeepassXC] はトレイに最小化できません。これは、アプリケーションを実行する前に {{Pkg|qt5ct}} をインストールし、{{ic|1=QT_QPA_PLATFORMTHEME=qt5ct}} を設定することで解決できます。 |
[[sway]] などの一部のコンポジターでは、ネイティブに実行されている Qt アプリケーションの機能が不足している場合があります。たとえば、[https://keepassxc.org KeepassXC] はトレイに最小化できません。これは、アプリケーションを実行する前に {{Pkg|qt5ct}} をインストールし、{{ic|1=QT_QPA_PLATFORMTHEME=qt5ct}} を設定することで解決できます。 |
||
| + | |||
| + | Qt WebEngine のバグ ([https://bugreports.qt.io/browse/QTBUG-113574 Incorrect sizing and bad text rendering with WebEngine using fractional scaling on Wayland]) のため、Qt WebEgine を使用するアプリケーション (例: [https://bugs.launchpad.net/calibre/+bug/2018658 Calibre]) では荒いフォントが表示される場合があります。 |
||
| + | 回避策は、{{ic|1=QT_SCALE_FACTOR_ROUNDING_POLICY=RoundPreferFloor}} [[環境変数]]を設定してアプリケーションを起動することです。 |
||
| + | これにより、アプリケーションのウィンドウが分数スケーリングされなくなります。 |
||
=== Clutter === |
=== Clutter === |
||
| 141行目: | 199行目: | ||
Clutter アプリを Wayland 上で動作させるには、環境変数 {{ic|1=CLUTTER_BACKEND=wayland}} を設定する必要があります。 |
Clutter アプリを Wayland 上で動作させるには、環境変数 {{ic|1=CLUTTER_BACKEND=wayland}} を設定する必要があります。 |
||
| − | === |
+ | === SDL === |
| + | [[SDL|SDL3]] では、デスクトップコンポジタとの通信に Wayland がデフォルトで使用されます。 |
||
| − | SDL2 アプリケーションを Wayland 上で動作させるには、環境変数 {{ic|1=SDL_VIDEODRIVER=wayland}} を設定してください。 |
||
| − | + | SDL2 アプリケーションを Wayland 上で動作させるには、{{ic|1=SDL_VIDEODRIVER=wayland}} を設定してください。 |
|
| + | |||
| + | {{ic|1=SDL_VIDEODRIVER="wayland,x11"}} とすることにより、Wayland が利用できない場合に代わりに X11 ビデオドライバを使用するように SDL2 を設定できます [https://wiki.libsdl.org/SDL2/FAQUsingSDL]。ウィンドウ装飾を有効化するために {{Pkg|libdecor}} をインストールすると良いかもしれません (例えば、GNOME で)。 |
||
| + | |||
| + | 詳細は[https://wiki.libsdl.org/SDL3/README/wayland 公式のドキュメント]を参照してください。 |
||
=== 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 === |
||
| − | {{AUR|glew-wayland}} パッケージ |
+ | {{AUR|glew-wayland-git}} パッケージが GLEW ベースのアプリケーションで動かない場合、唯一の選択肢は Xwayland で {{Pkg|glew}} を使うことです。{{Bug|62713}} を参照してください。 |
=== EFL === |
=== EFL === |
||
| + | Enlightenment には[https://www.enlightenment.org/about-wayland 完全な Wayland サポート]があります. |
||
| − | EFL は Wayland を完全にサポートしています。Wayland で EFL アプリケーションを動かすには、Wayland の [https://wayland.freedesktop.org/efl.html プロジェクトページ] を見て下さい。 |
||
=== winit === |
=== winit === |
||
| − | Winit は [[Rust]] で書かれたウィンドウ管理ライブラリです。デフォルトでは Wayland が X11 より優先される仕様ですが、環境変数を設定することで Xwayland を使うように上書きすることができます: |
+ | 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つです: アプリケーションごとのコマンドラインフラグを使って有効化するか、設定ファイルを使ってグローバルに有効化するかです。詳細は [[#設定ファイル]] を参照してください。 |
||
| − | {{Accuracy|Where is the bug report about flags from config have more priority over command line flags? And what version was meant under "currently"?}} |
||
| + | |||
| + | アプリケーションがどの electron バージョンを使用しているか確認する方法については [https://stackoverflow.com/q/50345957] を見てください。 |
||
| + | |||
| + | {{Note|Plasma では、一部の Electron アプリケーションで間違ったアイコン (デフォルトの Wayland アイコン) がウィンドウに表示され、一方タスクバーには正しいアイコンが表示されることがあります。この問題は、デスクトップファイルの名前を強制する特殊なアプリケーション/ウィンドウルールを作成することで解決できます。}} |
||
| + | |||
| + | ==== 環境変数 ==== |
||
| + | Electron 28 及びそれ以降を使用するアプリケーションは、[[環境変数]] [https://www.electronjs.org/docs/latest/api/environment-variables#electron_ozone_platform_hint-linux ELECTRON_OZONE_PLATFORM_HINT] を {{ic|auto}} または {{ic|wayland}} に設定することで、Wayland モードを使用することができます。 |
||
| − | {{Note|残念ながら、Electron で Wayland を有効化させる環境変数は存在しません。アプリケーションごとにコマンドラインフラグや設定ファイルを使用しなければならないのです。Electron にこのサポートを追加する [https://github.com/electron/electron/issues/30897 open feature request] があります。}} |
||
| + | コマンドラインフラグは、この環境変数より優先されます。 |
||
| − | Wayland サポートは、アプリケーションごとにコマンドラインフラグを使うことでも可能ですし、あるいは設定ファイルを使ってよりグローバルに有効化させることもできます。現在、設定ファイルで渡されるフラグは、コマンドラインで渡されるフラグよりも優先されます。もし一部のアプリケーションが別の引数を必要とするのであれば、設定ファイルでフラグが重複しないように注意しなければなりません。 |
||
==== コマンドラインフラグ ==== |
==== コマンドラインフラグ ==== |
||
| + | Electron がベースとしている Chromium とは異なり、Electron アプリケーションはデフォルトで PipeWire による WebRTC 画面共有を有効化しません。なので、Wayland 上で画面共有の問題を防ぐために {{ic|1=--enable-features=WebRTCPipeWireCapturer}} を使用することが推奨されます。画面共有は {{Pkg|xdg-desktop-portal}} をベースとしています。 |
||
| − | Wayland で {{Pkg|electron}} ベースのアプリケーションをネイティブに使用するには、次のフラグをアプリケーションの exec コマンドラインに追加する必要があります: {{ic|1=--enable-features=UseOzonePlatform --ozone-platform=wayland}}。 |
||
| + | 環境変数を使うことが望ましくない、または不可能である場合に、{{Pkg|electron}} ベースのアプリケーションを Wayland でネイティブに使用するには、Electron 20 以降では {{ic|1=--ozone-platform-hint=auto}} フラグを使用することで可能です。 |
||
| − | トップバーが消失する問題は、代わりに次のフラグを使用することで解決できます: {{ic|1=--enable-features=UseOzonePlatform,WaylandWindowDecorations --ozone-platform=wayland}}。このフラグは通常、[[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=}} 行の末尾にフラグを追加する方法。もう一つは、以下で説明している設定ファイルを使用する方法で、こちらはよりきれいに設定できます。 |
||
| − | {{Warning|[[Visual Studio Code]] のような ([https://github.com/microsoft/vscode/issues/134612 バグレポート]) 一部のアプリケーションは Electron に対してフラグを渡さないため、そのアプリケーションの開発者が解決策を実装する必要があります。}} |
||
| + | |||
| + | {{Note|一部のアプリケーションは、Electron に対してフラグを渡さないため、そのアプリケーションの開発者が解決策を実装する必要があります。}} |
||
==== 設定ファイル ==== |
==== 設定ファイル ==== |
||
| − | + | Electron 系のパッケージは {{ic|1=~/.config/electron''XX''-flags.conf}} を読み込みます。ここで、''XX'' は Electron のバージョンです。該当するバージョンのファイルが存在しない場合、{{ic|1=~/.config/electron-flags.conf}} を代わりに読み込みます。 |
|
| + | 前述のフラグを一行ずつ書き込んでください: |
||
| − | {{hc|1=~/.config/electron-flags.conf|2= |
||
| + | |||
| − | --enable-features=UseOzonePlatform,WaylandWindowDecorations |
||
| + | {{hc|~/.config/electron-flags.conf|2= |
||
| − | --ozone-platform=wayland |
||
| + | --enable-features=WaylandWindowDecorations |
||
| + | --ozone-platform-hint=auto |
||
}} |
}} |
||
| − | {{Note| |
+ | {{Note|このような設定ファイルは、公式リポジトリ内の Electron のパッケージと、それらの設定ファイルを使用するパッケージでのみ機能します。{{AUR|slack-desktop}} などのような Electron の独自のビルドをバンドルしているパッケージでは機能しません。{{AUR|slack-electron}} のように代替のパッケージが存在する場合があります。}} |
| + | ==== 古い Electron バージョン ==== |
||
| − | {{Warning|一部のアプリケーションは設定ファイルを読み込まないため、そのアプリケーションの開発者が解決策を実装する必要があります。}} |
||
| + | {{ic|electron25-flags.conf}} は Electron バージョン 25 に対してだけ適用されます。それより古い Electron のバージョンは {{ic|electron<バージョン>-flags.conf}} ファイルで設定できます。 |
||
| − | === Java === |
||
| + | 古いバージョンでは、対応する Chromium バージョンによって異なるフラグが必要になる場合があります。例えば、以下のフラグは Electron 13 で機能します: |
||
| − | [[Java]] プラットフォームのオープンソース実装である OpenJDK は、まだ Wayland のネイティブサポートを備えていません。 |
||
| − | OpenJDK に Wayland を実装することを目的としたプロジェクトである [https://openjdk.java.net/projects/wakefield/ Wakefield] が実用できるようになるまで、XWayland を使用して下さい。 |
||
| + | {{hc|~/.config/electron13-flags.conf|2= |
||
| − | == XWayland == |
||
| + | --enable-features=UseOzonePlatform |
||
| + | --ozone-platform=wayland |
||
| + | }} |
||
| + | === Java === |
||
| − | [https://wayland.freedesktop.org/xserver.html XWayland] は、Wayland の下で実行される X サーバーです。レガシー [[X11]] アプリケーションに下位互換性を提供します。 |
||
| + | [[Java]] プラットフォームのオープンソース実装である OpenJDK は、まだ Wayland のネイティブサポートを備えていません。 |
||
| − | これを使用するには、{{Pkg|xorg-xwayland}} パッケージを[[インストール]]します。 |
||
| + | OpenJDK に Wayland を実装することを目的としたプロジェクトである [https://openjdk.java.net/projects/wakefield/ Wakefield] が実用できるようになるまでは、Xwayland を代わりに使用できます。 |
||
| − | |||
| − | XWayland はコンポジタを介して開始されるため、選択したコンポジタを使用して、XWayland の互換性と XWayland の開始方法の説明を確認して下さい。 |
||
| + | [[Debian:Wayland#Java Programs (supported since OpenJDK 16?)]] を参照してください: |
||
| − | {{Note|セキュリティについて: XWayland は X サーバーであるため、 Wayland のセキュリティ機能はありません。}} |
||
| − | |||
| − | === NVIDIA ドライバ === |
||
| + | :OpenJDK 16から、JRE は (Wayland をサポートしている) GTK3 を動的にロードできるようになりました。この[https://stackoverflow.com/questions/39197208/java-gui-support-on-wayland 議論]によると、これがサポートされているかもしれません。 |
||
| − | {{Note|バージョン 470 より前の Nvidia ドライバ(例: {{aur|nvidia-390xx-dkms}}) はハードウェア支援のある XWayland をサポートしておらず、非 Wayland ネイティブなアプリケーションは Wayland セッションでのパフォーマンスが低下します。}} |
||
| + | :{{ic|_JAVA_AWT_WM_NONREPARENTING}} [[環境変数]]を "1" に設定することで、アプリケーションが空白の画面で起動する不具合を修正することができます。 |
||
| + | XWayland は機能的に Wayland と同等ではないので、Wakefield が実用的になるまでは、[https://wiki.openjdk.org/display/wakefield/Pure+Wayland+toolkit+prototype WLToolkit] で機能の差を埋めることができます。これは {{ic|1=-Dawt.toolkit.name=WLToolkit}} でアクティブ化できます。[https://blog.jetbrains.com/platform/2024/07/wayland-support-preview-in-2024-2/ JetBrains IDE] といった一部のプログラムはこれをサポートしています。 |
||
| − | なお、[[NVIDIA#DRM カーネルモードセッティング|DRM KMS]] を有効にする必要があります。また、お使いのディスプレイマネージャ(例: [[GDM#Wayland と独自の NVIDIA ドライバ|GDM]])の[https://download.nvidia.com/XFree86/Linux-x86_64/515.48.07/README/xwayland.html 公式ドキュメント]に記載されている情報も見てください。 |
||
== ヒントとテクニック == |
== ヒントとテクニック == |
||
| 219行目: | 296行目: | ||
=== 自動化 === |
=== 自動化 === |
||
| − | * [https://github.com/ReimuNotMoe/ydotool ydotool] ({{ |
+ | * [https://github.com/ReimuNotMoe/ydotool ydotool] ({{Pkg|ydotool}}) - 汎用のコマンドラインツール (wayland 以外でも利用可能)。{{ic|ydotool.service}} [[ユーザーユニット]]を[[起動/有効化]]してください。{{man|8|ydotoold}}、{{man|1|ydotool}} を参照。 |
* [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 を使用しているか、表面、入力イベント、クリップボードの内容などを確認することができます。 |
||
| + | === スクリーンキャスト === |
||
| − | $ qdbus org.kde.KWin /KWin org.kde.KWin.showDebugConsole |
||
| + | [[スクリーンキャプチャ#スクリーンキャスト]] と [[スクリーンキャプチャ#X11 アプリケーションで Wayland ウィンドウをスクリーンキャストする]] を見てください。 |
||
| − | === Xwayland アプリケーションであることを視認する === |
||
| + | === Chromium で完全に最大化出来ない === |
||
| − | アプリケーションが Xwayland 経由で実行されているかどうかを判断するには、{{AUR|extramaus}} を使用します。 |
||
| − | アプリケーションのウィンドウ上にマウスポインタを移動して、マウスポインタが赤くなる場合は、アプリケーションが Xwayland 経由で実行されています。 |
||
| + | ''chrome://settings/appearance'' メニューから ''Use system title bar and borders'' を有効化する必要があります。 |
||
| − | または、{{pkg|xorg-xeyes}} を使用して、アプリケーションウィンドウ上でマウスポインタを移動するときに、目が動いているかどうかで確認することもできます。 |
||
| + | === アプリが閉じた後もクリップボードの内容を保持する === |
||
| − | 他の方法として、({{Pkg|xorg-xwininfo}} の) ''xwininfo'' をターミナルウィンドウで実行するというものがあります。Xwayland ウィンドウ上にマウスポインタをホバーすると、マウスポインタが + マークに変わります。ウィンドウをクリックすると、xwininfo は情報を表示して終了しますが、ネイティブな Wayland ウィンドウでは何も起こりません。{{ic|Ctrl+C}} を押すことで xwininfo を終了できます。 |
||
| + | Wayland の設計思想上、クリップボードのデータはソースクライアントのメモリ内に保存されます。クライアントが閉じると、クリップボードのデータは失われます。{{Pkg|wl-clip-persist}} を使うことで、この問題を解決できます。これはバックグラウンドで動き、クリップボードのデータを読んで、ソースクライアントからは独立した自身のメモリに保存します。 |
||
| − | === キーボードやマウスキーのリマップ === |
||
| + | === Wayland コンポジタを systemd サービスとして自動的に起動する === |
||
| − | [[入力リマップユーティリティ]] を見てください。 |
||
| + | |||
| + | {{Note|この設定はdbusセッションを破壊し,[[PipeWire#WebRTC 画面共有]]を破壊するかも知れません.}} |
||
| + | |||
| + | ディスプレイマネージャーやシェルを使いたくなければ、Waylandコンポジタを[[systemd]] サービスを使って自動的に起動できます。{{ic|ExecStart}} 行を使いたいコンポジタに変えて下さい: |
||
| + | |||
| + | {{hc|/etc/systemd/system/wayland-compositor.service|2= |
||
| + | [Unit] |
||
| + | After=graphical.target systemd-user-sessions.service modprobe@drm.service |
||
| + | Conflicts=getty@tty1.service #使用できない tty1 を無効にするオプション |
||
| + | |||
| + | [Service] |
||
| + | User=''username'' |
||
| + | WorkingDirectory=~ |
||
| + | |||
| + | PAMName=login |
||
| + | TTYPath=/dev/tty1 |
||
| + | UnsetEnvironment=TERM |
||
| + | |||
| + | StandardOutput=journal |
||
| + | ExecStart=/bin/labwc -s gtklock |
||
| + | |||
| + | [Install] |
||
| + | WantedBy=graphical.target |
||
| + | }} |
||
| + | |||
| + | {{Note|[[セキュリティ#物理セキュリティ]]の為に、{{Pkg|swaylock}} や {{Pkg|gtklock}} 等のスクリーンロッカーを、コンポジタの設定を通して自動的に起動する必要があるかも知れません。}} |
||
| + | |||
| + | === wlroots ベースのコンポジタで他のレンダラーを使用する === |
||
| + | |||
| + | wlroots ベースのコンポジタに対して {{ic|WLR_RENDERER}} [[環境変数]]を設定することで vulkan などといった他の [https://gitlab.freedesktop.org/wlroots/wlroots/-/tree/master/render wlroots レンダラー]を使用することができます。利用可能なレンダラーのリストは [https://gitlab.freedesktop.org/wlroots/wlroots/-/blob/master/docs/env_vars.md wlroots のドキュメント]にあります。 |
||
==トラブルシューティング== |
==トラブルシューティング== |
||
| 251行目: | 358行目: | ||
Gnome-shell で X から Wayland に切り替えるとグラフィック表示に問題が発生することがあります。原因として Xorg ベースの gnome-shell 用に {{ic|1=CLUTTER_PAINT=disable-clipped-redraws:disable-culling}} が設定されている可能性があります。{{ic|/etc/environment}} や rc ファイルから該当箇所を削除してみてください。 |
Gnome-shell で X から Wayland に切り替えるとグラフィック表示に問題が発生することがあります。原因として Xorg ベースの gnome-shell 用に {{ic|1=CLUTTER_PAINT=disable-clipped-redraws:disable-culling}} が設定されている可能性があります。{{ic|/etc/environment}} や rc ファイルから該当箇所を削除してみてください。 |
||
| − | |||
| − | === Electron ベースのアプリケーションで Cannot open display: :0 === |
||
| − | |||
| − | {{Accuracy|Why does it break Electron applications? This needs some links to relevant issues}} |
||
| − | |||
| − | {{ic|1=GDK_BACKEND=wayland}} を設定していないことを確認してください。グローバルに設定すると、 Electron アプリが機能しなくなります。 |
||
=== リモートディスプレイ === |
=== リモートディスプレイ === |
||
| − | * ([[sway]] で使用されている) {{pkg|wlroots}} は、バージョン 0.10 より、{{Pkg|wayvnc}} を使って VNC バックエンドを提供しています。RDP バックエンドは削除されました [https://github.com/swaywm/wlroots/releases/tag/0.10.0]。 |
+ | * ([[sway]] で使用されている) {{pkg|wlroots}}{{Broken package link|replaced by {{Pkg|wlroots0.18}}}} は、バージョン 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 が有効化されています。 |
||
| − | * {{ |
+ | * {{Pkg|waypipe}} は Wayland アプリケーションの透過プロキシです。[[SSH]] 上で動作するラッパーコマンドあり。 |
| + | ** 以下は、Plasma デスクトップでリモートの KDE kcalc を起動する例です: |
||
| + | ::{{bc|1=$ waypipe ssh example.local env QT_QPA_PLATFORM=wayland 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 コンポジタの役目となっています。 |
||
| 274行目: | 378行目: | ||
* マウスポインタがアプリケーションウィンドウに制限されなくなるため、仮想マシンやリモートデスクトップのウィンドウ内のマウスポインタの位置がホスト環境のマウスポインタとずれるようになります。 |
* マウスポインタがアプリケーションウィンドウに制限されなくなるため、仮想マシンやリモートデスクトップのウィンドウ内のマウスポインタの位置がホスト環境のマウスポインタとずれるようになります。 |
||
| − | Wayland と |
+ | Wayland と Xwayland にプロトコル拡張を追加することで解決を図っていますが、Wayland コンポジタが拡張をサポートしている必要があり、ネイティブの Wayland クライアントの場合、ウィジェットツールキット (例: GTK, Qt) やアプリケーション自身が拡張に対応していなければなりません。Xorg アプリケーションの場合、Xwayland のサポートで十分であるため、アプリケーションやウィジェット・ツールキットに変更を加える必要はありません。 |
これらの拡張はすでに {{pkg|wayland-protocols}} に含まれており、{{pkg|xorg-xwayland}} によってサポートされています。 |
これらの拡張はすでに {{pkg|wayland-protocols}} に含まれており、{{pkg|xorg-xwayland}} によってサポートされています。 |
||
| 280行目: | 384行目: | ||
関連する拡張: |
関連する拡張: |
||
| − | * [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/xwayland-keyboard-grab/xwayland-keyboard-grab-unstable-v1.xml |
+ | * [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] |
||
| 289行目: | 393行目: | ||
* 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] |
||
サポートしているウィジェットツールキット: |
サポートしているウィジェットツールキット: |
||
| − | * GTK (リリース 3.22.18 以降) |
+ | * GTK (リリース 3.22.18 以降) |
=== GTK テーマが動かない === |
=== GTK テーマが動かない === |
||
| 302行目: | 409行目: | ||
[[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年半ばにマージされました。 |
||
| + | |||
| + | === カーネル 6.11.2 以降、Wayland にラグ/スタッタリングが発生する (AMD) === |
||
| + | |||
| + | 将来のカーネルリリースでこの問題が修正されるまで、回避策は、カーネルのコマンドラインに {{ic|1=amdgpu.dcdebugmask=0x400}} を追加することです。 |
||
| + | |||
| + | こちらを参照: https://community.frame.work/t/wayland-lag-stuttering-since-kernel-6-11-2/59422 |
||
| + | |||
| + | == 参照 == |
||
* [https://wayland.freedesktop.org/docs/html/ Wayland オンラインドキュメント] |
* [https://wayland.freedesktop.org/docs/html/ Wayland オンラインドキュメント] |
||
| − | * [https://gitlab.freedesktop.org/wayland 公式 |
+ | * [https://gitlab.freedesktop.org/wayland 公式リポジトリ] |
* [[Fedora:How to debug Wayland problems]] |
* [[Fedora:How to debug Wayland problems]] |
||
| − | * [https:// |
+ | * [https://wearewaylandnow.com/ We are Wayland now!] - "Are we Wayland yet?" の更新されたバージョン |
* [https://awesomeopensource.com/projects/wayland Awesome Wayland projects] |
* [https://awesomeopensource.com/projects/wayland Awesome Wayland projects] |
||
* [[カーソルテーマ]] |
* [[カーソルテーマ]] |
||
| 315行目: | 432行目: | ||
* [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| |
+ | {{TranslationStatus|Wayland|2025-06-29|839014}} |
2025年6月29日 (日) 15:00時点における最新版
Wayland はディスプレイサーバープロトコルです。X Window System の後継となることを目指しています。Wikipedia に Wayland と Xorg の比較 が掲載されています。
Wayland プロトコルを使用するディスプレイサーバは、コンポジット型ウィンドウマネージャ としても機能するため、コンポジタ と呼ばれます。以下にWayland コンポジタのリストを示します。
ネイティブな X11 アプリケーションをシームレスに動かすための後方互換性として、Xwayland を使うことができます。これは Wayland に X サーバを提供します。
要件
ほとんどの Wayland コンポジタは、カーネルモード設定を利用しているシステムでのみ動作します。Wayland それ自体はグラフィカルな環境を提供しません。ゆえに、Wayland に加えてコンポジタ (以下のセクションを参照)、あるいは、コンポジタを含むデスクトップ環境 (例: GNOME、Plasma) が必要となります。
GPU ドライバと Wayland コンポジタは、同一のバッファ API に対応している場合に互換性があります。主要な API は2つ存在します: GBM と EGLStreams です。
| バッファ 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
コンポジタ
スタック型、タイル型、ダイナミック型 の違いについては、ウィンドウマネージャ#種類 を参照してください。
スタック型
- Enlightenment — Enlightenment#手動 を参照してください。詳細: [2] [3]
- hikari — FreeBSD で活発に開発されている cwm にインスパイアされた wlroots ベースのコンポジタ。Linux もサポートしています。
- KDE KWin — KDE#Plasma の起動 を参照。
- Liri Shell — Liri の一部、しかし、QtQuick と QtCompositor を使って Wayland 用のコンポジタとして作られています。
- https://github.com/lirios/shell || liri-shellAUR[リンク切れ: package not found]
- labwc — Openbox にインスパイアされた wlroots ベースのコンポジタ。
- Mutter — GNOME#GNOME の起動 を参照。
- wayfire — Compiz にインスパイアされた、wlroots ベースの 3D コンポジタ。
- https://wayfire.org/ || wayfireAUR
- Weston — 正しさ、信頼性、予測可能性、性能のために設計された Wayland コンポジタ。
- wio — Plan 9 のリオデスクトップのルックアンドフィールを複製することを目的とする wlroots ベースのコンポジタ。
タイル型
- miracle-wm — Mir ベースの Wayland コンポジた。i3 や sway のスタイルですが、swayfs のように、これらよりも派手で機能に富んでいます。
- niri — スクロール可能なタイル型 Wayland コンポジタ。
- Qtile — Python で記述および設定されたフル機能のハッキング可能なタイリングウィンドウマネージャーと Wayland コンポジタ。
- SwayFx — 魅力的な視覚効果機能を追加した Sway。
- Velox — swc ベースのシンプルなウィンドウマネージャです。dwm と xmonad の影響を受けています。
ダイナミック型
- Hyprland — 見た目を犠牲にしないダイナミックなタイリング Wayland コンポジタ。
- japokwm — wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。
- Vivarium — wlroots を使用するダイナミックタイル型 Wayland コンポジタ。xmonad にインスパイアされたデスクトップセマンティクスを持ちます。
その他
- Cage — キオスクのような単一のフルスクリーンアプリケーションを表示します。
- phoc — モバイル端末のための wlroots ベースの小さなコンポジタ。
上記のいくつかは ディスプレイマネージャ をサポートする場合があります。
それらがどのように開始されるかを /usr/share/wayland-sessions/compositor.desktop を見て確認してください。
ディスプレイマネージャ
Wayland コンポジタの実行をサポートしているディスプレイマネージャは以下の表の通りです。
| 名前 | 何で動作するか | 説明 |
|---|---|---|
| emptty | TTY | TTY で動作するシンプルな CLI ディスプレイマネージャ。 |
| GDM | Wayland/Xorg | GNOME ディスプレイマネージャ。 |
| greetd | Wayland/Xorg/TTY
Greetd#Greeter を参照。 |
最小でありながら柔軟なログインデーモン。 |
| lemurs | TTY | Rust で書かれた TUI ディスプレイマネージャ。 |
| lidmAUR | TTY | C で書かれた、完全にカラフルでカスタマイズ可能な TUI ディスプレイマネージャ。 |
| LightDM | Xorg[4] | 様々なデスクトップに対応したディスプレイマネージャ。 |
| ly | TTY | C で書かれた TUI ディスプレイマネージャ。 |
| SDDM | Wayland/Xorg | QML ベースのディスプレイマネージャ。 |
| tbsmAUR | TTY | bash のみに依存するシンプルな CLI セッションランチャー。 |
| uwsm | TTY | スタンドアローンなコンポジタのための、セッションと XDG autostart のマネージャ。
TUI メニューを提供しますが、他のディスプレイマネージャと共に使用することもできます。 |
Xwayland
Xwayland(1) は、Wayland の下で実行される X サーバーで、Wayland サポートをまだ提供していないネイティブな X11 アプリケーションに互換性を提供します。これを使用するには、xorg-xwayland パッケージをインストールします。
Xwayland はコンポジタを介して開始されるため、あなたの使用しているコンポジタのドキュメントを読み、Xwayland との互換性についてや、Xwayland の起動方法に関する指示を確認しておく必要があります。
NVIDIA ドライバ
なお、DRM KMS を有効にする必要があります。また、お使いのディスプレイマネージャ(例: GDM)の公式ドキュメントに記載されている情報も見てください。
Kwin Wayland デバッグコンソール
kwin を使用している場合、以下を実行すると、どのウィンドウが Xwayland とネイティブ Wayland を使用しているか、表面、入力イベント、クリップボードの内容などを確認することができます。
$ qdbus6 org.kde.KWin /KWin org.kde.KWin.showDebugConsole
Xwayland アプリケーションを検出する
アプリケーションが Xwayland 経由で実行されているかどうかを判断するには、extramausAUR を使用します。 アプリケーションのウィンドウ上にマウスポインタを移動して、マウスポインタが赤くなる場合は、アプリケーションが Xwayland 経由で実行されています。
または、xorg-xeyes を使用して、アプリケーションウィンドウ上でマウスポインタを移動するときに、目が動いているかどうかで確認することもできます。
他の方法として、(xorg-xwininfo の) xwininfo をターミナルウィンドウで実行するというものがあります。Xwayland ウィンドウ上にマウスポインタをホバーすると、マウスポインタが + マークに変わります。ウィンドウをクリックすると、xwininfo は情報を表示して終了しますが、ネイティブな Wayland ウィンドウでは何も起こりません。Ctrl+C を押すことで xwininfo を終了できます。
あるいは、xlsclients (xorg-xlsclients パッケージ) を使用することもできます。Xwayland で動作中のアプリケーションを全てリストアップするには、xlsclients -l を実行してください。
GUI ライブラリ
GTK
gtk3 と gtk4 パッケージは 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 アプリケーションを動作させるには、[5] にあるように、-platform wayland を使用するか、環境変数 QT_QPA_PLATFORM=wayland をセットして下さい。
一方、Wayland セッション上で X11 を使用させるには、QT_QPA_PLATFORM=xcb と設定してください。これは、システムの Qt の実装を使用しない一部のプロプライエタリアプリケーションで必要になる場合があります。
また、QT_QPA_PLATFORM="wayland;xcb" を使用すると、Qt が Wayland を利用できない場合に、代わりに xcb (X11)プラグインを使用させることができます。[6]
sway などの一部のコンポジターでは、ネイティブに実行されている Qt アプリケーションの機能が不足している場合があります。たとえば、KeepassXC はトレイに最小化できません。これは、アプリケーションを実行する前に qt5ct をインストールし、QT_QPA_PLATFORMTHEME=qt5ct を設定することで解決できます。
Qt WebEngine のバグ (Incorrect sizing and bad text rendering with WebEngine using fractional scaling on Wayland) のため、Qt WebEgine を使用するアプリケーション (例: Calibre) では荒いフォントが表示される場合があります。
回避策は、QT_SCALE_FACTOR_ROUNDING_POLICY=RoundPreferFloor 環境変数を設定してアプリケーションを起動することです。
これにより、アプリケーションのウィンドウが分数スケーリングされなくなります。
Clutter
Clutter ツールキットには Wayland バックエンドがあり、Clutter を Wayland のクライアントとして動作させることが可能です。このバックエンドは clutter パッケージで有効になっています。
Clutter アプリを Wayland 上で動作させるには、環境変数 CLUTTER_BACKEND=wayland を設定する必要があります。
SDL
SDL3 では、デスクトップコンポジタとの通信に Wayland がデフォルトで使用されます。
SDL2 アプリケーションを Wayland 上で動作させるには、SDL_VIDEODRIVER=wayland を設定してください。
SDL_VIDEODRIVER="wayland,x11" とすることにより、Wayland が利用できない場合に代わりに X11 ビデオドライバを使用するように SDL2 を設定できます [7]。ウィンドウ装飾を有効化するために libdecor をインストールすると良いかもしれません (例えば、GNOME で)。
詳細は公式のドキュメントを参照してください。
GLFW
glfw パッケージには Wayland に対するサポートがあります。XDG_SESSION_TYPE が wayland に設定されていて、かつアプリケーションの開発者が特定のバックエンドを使用するようにしていなければ、Wayland バックエンドが使用されます。
詳細は GLFW のソースコードを参照してください。
GLEW
glew-wayland-gitAUR パッケージが GLEW ベースのアプリケーションで動かない場合、唯一の選択肢は Xwayland で glew を使うことです。FS#62713 を参照してください。
EFL
Enlightenment には完全な Wayland サポートがあります.
winit
Winit は Rust で書かれたウィンドウ管理ライブラリです。デフォルトでは Wayland が X11 より優先される仕様ですが、環境変数を設定することで Xwayland を使うように上書きすることができます:
- バージョン 0.29.2 より前の場合、
WINIT_UNIX_BACKEND=x11を設定してください。 - バージョン 0.29.2 以降の場合、
WAYLAND_DISPLAYを unset してください。そうすることで、強制的にDISPLAY変数を使用して X にフォールバックされます。[8]
Electron
Wayland サポートを有効化する方法は次の2つです: アプリケーションごとのコマンドラインフラグを使って有効化するか、設定ファイルを使ってグローバルに有効化するかです。詳細は #設定ファイル を参照してください。
アプリケーションがどの electron バージョンを使用しているか確認する方法については [9] を見てください。
環境変数
Electron 28 及びそれ以降を使用するアプリケーションは、環境変数 ELECTRON_OZONE_PLATFORM_HINT を auto または 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 系のパッケージは ~/.config/electronXX-flags.conf を読み込みます。ここで、XX は Electron のバージョンです。該当するバージョンのファイルが存在しない場合、~/.config/electron-flags.conf を代わりに読み込みます。
前述のフラグを一行ずつ書き込んでください:
~/.config/electron-flags.conf
--enable-features=WaylandWindowDecorations --ozone-platform-hint=auto
古い 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" に設定することで、アプリケーションが空白の画面で起動する不具合を修正することができます。
XWayland は機能的に Wayland と同等ではないので、Wakefield が実用的になるまでは、WLToolkit で機能の差を埋めることができます。これは -Dawt.toolkit.name=WLToolkit でアクティブ化できます。JetBrains IDE といった一部のプログラムはこれをサポートしています。
ヒントとテクニック
自動化
- ydotool (ydotool) - 汎用のコマンドラインツール (wayland 以外でも利用可能)。
ydotool.serviceユーザーユニットを起動/有効化してください。ydotoold(8)、ydotool(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 ウィンドウをスクリーンキャストする を見てください。
Chromium で完全に最大化出来ない
chrome://settings/appearance メニューから Use system title bar and borders を有効化する必要があります。
アプリが閉じた後もクリップボードの内容を保持する
Wayland の設計思想上、クリップボードのデータはソースクライアントのメモリ内に保存されます。クライアントが閉じると、クリップボードのデータは失われます。wl-clip-persist を使うことで、この問題を解決できます。これはバックグラウンドで動き、クリップボードのデータを読んで、ソースクライアントからは独立した自身のメモリに保存します。
Wayland コンポジタを systemd サービスとして自動的に起動する
ディスプレイマネージャーやシェルを使いたくなければ、Waylandコンポジタをsystemd サービスを使って自動的に起動できます。ExecStart 行を使いたいコンポジタに変えて下さい:
/etc/systemd/system/wayland-compositor.service
[Unit] After=graphical.target systemd-user-sessions.service modprobe@drm.service Conflicts=getty@tty1.service #使用できない tty1 を無効にするオプション [Service] User=username WorkingDirectory=~ PAMName=login TTYPath=/dev/tty1 UnsetEnvironment=TERM StandardOutput=journal ExecStart=/bin/labwc -s gtklock [Install] WantedBy=graphical.target
wlroots ベースのコンポジタで他のレンダラーを使用する
wlroots ベースのコンポジタに対して WLR_RENDERER 環境変数を設定することで vulkan などといった他の wlroots レンダラーを使用することができます。利用可能なレンダラーのリストは wlroots のドキュメントにあります。
トラブルシューティング
色補正
バックライト#色補正を参照。
動作が遅い、表示がおかしい、クラッシュする
Gnome-shell で X から Wayland に切り替えるとグラフィック表示に問題が発生することがあります。原因として Xorg ベースの gnome-shell 用に CLUTTER_PAINT=disable-clipped-redraws:disable-culling が設定されている可能性があります。/etc/environment や rc ファイルから該当箇所を削除してみてください。
リモートディスプレイ
- (sway で使用されている) wlroots[リンク切れ: replaced by wlroots0.18] は、バージョン 0.10 より、wayvnc を使って VNC バックエンドを提供しています。RDP バックエンドは削除されました [10]。
- mutter はコンパイル時にリモートデスクトップが有効化されています。詳細は [11] と gnome-remote-desktop を見てください。
- krfb は kwin に VNC サーバを提供します。
krfb-virtualmonitorを使えば、他のデバイスを外部モニタとしてセットアップすることが可能です。 - 2013年に FreeRDP が Weston にマージされました。コンパイルフラグで有効化されています。weston パッケージは、バージョン 6.0.0 より、FreeRDP が有効化されています。
- waypipe は Wayland アプリケーションの透過プロキシです。SSH 上で動作するラッパーコマンドあり。
- 以下は、Plasma デスクトップでリモートの KDE kcalc を起動する例です:
$ waypipe ssh example.local env QT_QPA_PLATFORM=wayland QT_QPA_PLATFORMTHEME=KDE dbus-launch kcalc
ゲームやリモートデスクトップ、仮想マシンウィンドウでの入力捕捉
Xorg と異なり、Wayland では入力デバイスを独占 (グラブ) することができません (例: キーボード、マウス)。キーボードショートカットやポインタデバイスをアプリケーションウィンドウに渡すのは Wayland コンポジタの役目となっています。
入力グラブが変わったことで以下のように既存のアプリケーションで問題が発生します:
- ホットキーや修飾キーがコンポジタによって認識されてしまい、リモートデスクトップや仮想マシンのウィンドウに送信されなくなります。
- マウスポインタがアプリケーションウィンドウに制限されなくなるため、仮想マシンやリモートデスクトップのウィンドウ内のマウスポインタの位置がホスト環境のマウスポインタとずれるようになります。
Wayland と Xwayland にプロトコル拡張を追加することで解決を図っていますが、Wayland コンポジタが拡張をサポートしている必要があり、ネイティブの Wayland クライアントの場合、ウィジェットツールキット (例: GTK, Qt) やアプリケーション自身が拡張に対応していなければなりません。Xorg アプリケーションの場合、Xwayland のサポートで十分であるため、アプリケーションやウィジェット・ツールキットに変更を加える必要はありません。
これらの拡張はすでに wayland-protocols に含まれており、xorg-xwayland によってサポートされています。
関連する拡張:
- Xwayland keyboard grabbing protocol
- Compositor shortcuts inhibit protocol
- Relative pointer protocol
- Pointer constraints protocol
サポートしている Wayland コンポジタ:
- Mutter, GNOME のコンポジタ (リリース 3.28 以降)。
- wlroots (Relative pointer protocols と Pointer constraints protocol に対応)
- Kwin
サポートしているウィジェットツールキット:
- 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年半ばにマージされました。
カーネル 6.11.2 以降、Wayland にラグ/スタッタリングが発生する (AMD)
将来のカーネルリリースでこの問題が修正されるまで、回避策は、カーネルのコマンドラインに amdgpu.dcdebugmask=0x400 を追加することです。
こちらを参照: https://community.frame.work/t/wayland-lag-stuttering-since-kernel-6-11-2/59422
参照
- Wayland オンラインドキュメント
- 公式リポジトリ
- Fedora:How to debug Wayland problems
- We are Wayland now! - "Are we Wayland yet?" の更新されたバージョン
- Awesome Wayland projects
- カーソルテーマ
- Arch Linux forum discussion
- i3 Migration Guide - Common X11 apps used on i3 with Wayland alternatives
- Wayland Explorer - A better way to read Wayland documentation
- How can I tell if an application is using XWayland