XWaylandでアプリを起動する
まだ多くのアプリケーションはWaylandに対応しておらず、起動することが難しかったり、またUIの描画が崩れたりする。 そんなときはXWaylandを用いてアプリを起動するように指定すれば、多くの場合は問題なく使用できる。
XWaylandは、Waylandコンポジター上でX11アプリケーションを動作させるための互換レイヤーであり、Wayland環境でもXWaylandが有効であればX11向けのアプリケーションをそのまま実行できる。
そのやり方を紹介。
アプリケーションのツールキットを調べる
desktopエントリで適切な環境変数を指定するには、対象のアプリがGTK・Qt・Electronのどれで実装されているかを知る必要がある。
パッケージ名にqtやgtkがついてるならそれを信用すればよい。
パッケージの依存関係から判別する
Arch Linuxならpacmanで依存関係を確認するのが最も手軽。
| |
依存パッケージにgtk3やgtk4があればGTK、qt5-baseやqt6-baseがあればQt。
リンクしているライブラリから判別する
バイナリがリンクしている共有ライブラリを確認する方法もある。
| |
Electronアプリの見分け方
Electronアプリはインストールディレクトリにresources/app.asarが存在する。
| |
また、実行中のプロセスのコマンドラインに--type=rendererなどChromium由来のフラグが含まれていることでも判別できる。
desktopエントリでの指定
~/.local/share/applications配下に、以下のようなdesktopエントリを作成する。
Exec内で環境変数を指定し、X11バックエンドで起動させる。
GTKアプリケーションの場合
GTKアプリケーションはGDK_BACKEND=x11を指定する。
| |
Qtアプリケーションの場合
QtアプリケーションはQT_QPA_PLATFORM=xcbを指定する。
| |
Electronアプリケーションの場合
Electronアプリケーションは起動フラグで制御できる。
逆にWayland上でネイティブに動かしたい場合は--ozone-platform=waylandを指定するが、XWayland経由にしたい場合はこのフラグを外すだけでよい。
| |
コマンドラインからの指定
desktopエントリを作らずとも、コマンドラインから環境変数を渡して直接起動することもできる。
| |
XWaylandで動作しているか確認する
Waylandコンポジターが提供するコマンドで、各ウィンドウがXWayland経由かどうかを確認できる。
Hyprlandの場合はhyprctl clientsで一覧を取得し、xwaylandフィールドを見る。
| |
Swayの場合はswaymsgでウィンドウツリーを確認する。
| |
shellが"xwayland"であればXWayland経由、app_idが設定されていればWaylandネイティブで動作している。
HiDPI環境での注意点
XWayland経由のアプリケーションはHiDPI環境で表示がぼやけたり、スケーリングが正しく適用されないことがある。
GTKアプリではGDK_SCALEやGDK_DPI_SCALEで調整できる。
| |
QtアプリではQT_SCALE_FACTORで調整する。
| |
EOF