「Wayland」の版間の差分
細 (→Java: 修正) |
(同期) |
||
80行目: | 80行目: | ||
* {{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|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|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}}}} |
||
129行目: | 127行目: | ||
{{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 === |
||
240行目: | 240行目: | ||
* [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 デバッグコンソール === |
=== Kwin Wayland デバッグコンソール === |
||
277行目: | 278行目: | ||
* {{AUR|waypipe}} (や {{AUR|waypipe-git}}) は Wayland アプリケーションの透過プロキシです。[[SSH]] 上で動作するラッパーコマンドあり。 |
* {{AUR|waypipe}} (や {{AUR|waypipe-git}}) は Wayland アプリケーションの透過プロキシです。[[SSH]] 上で動作するラッパーコマンドあり。 |
||
− | === ゲームやリモートデスクトップ、仮想マシンウィンドウでの入力 === |
+ | === ゲームやリモートデスクトップ、仮想マシンウィンドウでの入力捕捉 === |
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 コンポジタの役目となっています。 |
||
301行目: | 302行目: | ||
* 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 Keybord shortcuts inhibit] |
||
サポートしているウィジェットツールキット: |
サポートしているウィジェットツールキット: |
||
313行目: | 317行目: | ||
[[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年半ばにマージされました。 |
||
== 参照 == |
== 参照 == |
||
327行目: | 335行目: | ||
* [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|2023- |
+ | {{TranslationStatus|Wayland|2023-03-11|770242}} |
2023年3月11日 (土) 16:34時点における版
関連記事
Wayland はディスプレイサーバープロトコルです。X Window System の後継となることを目指しています。Wikipedia に Wayland と Xorg の比較 が掲載されています。
Wayland プロトコルを使用するディスプレイサーバは、コンポジット型ウィンドウマネージャ としても機能するため、コンポジタ と呼ばれます。以下にWayland コンポジタのリストを示します。
ネイティブな X11 アプリケーションをシームレスに動かすための後方互換性として、XWayland を使うことができます。これは Wayland に X サーバを提供します。
要件
ほとんどの Wayland コンポジタは、カーネルモードセッティングを利用しているシステムでのみ動作します。Wayland それ自体はグラフィカルな環境を提供しません。ゆえに、Wayland に加えてコンポジタ (以下のセクションを参照)、あるいは、コンポジタを含むデスクトップ環境 (例: GNOME、KDE) が必要となります。
GPU ドライバーと Wayland コンポジタは、同一のバッファ API に対応している場合に互換性があります。主要な API は2つ存在します: GBM と EGLStreams です。
バッファ 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
コンポジタ
タイル型 と スタック型 の違いは、ウィンドウマネージャ#種類 を参照してください。
タイル型
- Cardboard — スクロールコンポジタ。wlroots をベースに、PaperWM にインスパイアされています。
- dwl — wlroots ベースの dwm ライクな Wayland コンポジタ。
- Hyprland — 見た目を犠牲にしないダイナミックタイル型 Wayland コンポジタ。
- https://hyprland.org || hyprlandAUR
- japokwm — wlroots ベースの、レイアウト作成を中心とした動的な Wayland タイリングコンポジタ。
- newm — ラップトップとタッチパッドを念頭に置いて作成された Wayland コンポジタ。
- Qtile — Python で記述および設定されたフル機能のハッキング可能なタイリングウィンドウマネージャーと Wayland コンポジタ。
- river — dwm bspwm にインスパイアされた動的なタイル型 Wayland コンポジタ。
- Vivarium — wlroots を使用するダイナミックタイル型 Wayland コンポジタ。xmonad にインスパイアされたデスクトップセマンティクスを持ちます。
- waymonad — Haskell で書かれた 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 もサポートしています。
- KDE KWin — KDE#Plasma の起動 を参照。
- Liri Shell — Liri の一部、しかし、QtQuick と QtCompositor を使って Wayland 用のコンポジタとして作られています。
- labwc — Openbox にインスパイアされた wlroots ベースのコンポジタ。
- Mutter — GNOME#GNOME の起動 を参照。
- wayfire — Compiz にインスパイアされ、wlroots に基づく 3D コンポジタ。
- https://wayfire.org/ || wayfireAUR
- Weston — 正しさ、信頼性、予測可能性、性能のために設計された Wayland コンポジタ。
- wio — Plan 9 のリオデスクトップのルックアンドフィールを複製することを目的とする wlroots ベースのコンポジタ。
- https://wio-project.org/[リンク切れ 2022-09-23] || wio-wlAUR
その他
- Cage — キオスクのような単一のフルスクリーンアプリケーションを表示します。
- nwg-shell — sway Wayland コンポジタのための、GTK ベースのシェル。
- kiwmi — 完全にプログラミング可能な Wayland コンポジタ。
上記のいくつかは ディスプレイマネージャ をサポートする場合があります。
それらがどのように開始されるかを /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
gtk3 と gtk4 パッケージは Wayland バックエンドが有効になっています。GTK ではデフォルトで Wayland バックエンドを使いますが、環境変数を設定することで Xwayland を使うように上書きできます: GDK_BACKEND=x11
。
テーマの問題は GTK#Wayland バックエンド を見てください。
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 が優先されます。
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 より対応) で必要となります。
Wayland での electon 画面キャプチャの問題を解決するには --enable-webrtc-pipewire-capturer
を使用してください。このキャプチャは xdg-desktop-portal をベースにしています。
fcitx の入力問題を解決するには、--gtk-version=4
を使用します。
コマンドラインフラグの設定は、例えば .desktop ファイルを変更し、Exec=
行の最後にフラグを追加することで可能です。
設定ファイル
ファイル ${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 バージョン
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 を代わりに使用できます。
- OpenJDK 16から、JRE は GTK3(Wayland をサポートしている)を動的にロードできるようになりました。この discussion によると、これがサポートされるかもしれません。
_JAVA_AWT_WM_NONREPARENTING
環境変数を設定することで、Wayland をサポートする GTK3 を動的にロードすることができます。環境変数を "1" に設定することで、アプリケーションが空白の画面で起動する不具合を修正することができます。
XWayland
XWayland は、Wayland の下で実行される X サーバーで、Wayland サポートをまだ提供していないネイティブな X11 アプリケーションに互換性を提供します。これを使用するには、xorg-xwayland パッケージをインストールします。
XWayland はコンポジタを介して開始されるため、あなたの使用しているコンポジタのドキュメントを読み、XWayland との互換性についてや、XWayland の起動方法に関する指示を確認しておく必要があります。
NVIDIA ドライバ
なお、DRM KMS を有効にする必要があります。また、お使いのディスプレイマネージャ(例: GDM)の公式ドキュメントに記載されている情報も見てください。
ヒントとテクニック
自動化
- 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 をサポート)。
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 によってサポートされています。
関連する拡張:
- 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年半ばにマージされました。
参照
- Wayland オンラインドキュメント
- 公式 Wayland Git リポジトリ
- Fedora:How to debug Wayland problems
- 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