Ubuntu Weekly Recipe

第717回Ubuntu 22.04 LTSにおける、Waylandとアプリケーションの微妙な関係

今回はUbuntu 22.04 LTS時点のWayland上で各種アプリケーションを快適に動作させる勘所を紹介します。

WaylandとX Window System

第663回で言及したように、Ubuntu 21.04、すなわち22.04 LTSの2つ前のバージョンからWaylandがデフォルトのセッションになりました図1⁠。セッションというのは簡単に表現するとログイン時点で有効にする設定や自動実行されるプログラムのことです。

図1 ⁠Ubuntu」がWaylandセッション、⁠Ubuntu on Xorg」がXセッション。デフォルトで前者が選択されている
図1

Waylandはディスプレイサーバーと呼ばれる機能で、これまでその役割を担っていたのはX Window System(以下X)です。WaylandとXは互換性がないため、WaylandセッションではXアプリケーションは動作しなくなります。これでは困るのでXWaylandというWaylandクライアント兼Xサーバーが用意されており、要求に応じて起動します。

Xが前提のアプリケーション、ユーティリティ、⁠主に画面共有系)サーバーはたくさんあります。Waylandセッション下ではそれらは良くてXWayland経由で動作し、悪くて動作しません。

正直なところ、多くの場合現段階ではWaylandのメリットがデメリットを上回る状況というのはあまり多くありません。よってWaylandセッションに問題があれば躊躇なくXセッションに戻すのがおすすめですが、今回はあえてそうせず、修羅の道を行きたい(筆者のような)人たちのための記事です。

Waylandとツールキット

Waylandにネイティブで対応しているアプリケーションと、そうでない(Xのみ対応の)アプリケーションの違いはどこにあるかというと、わかりやすく分類するとツールキットです。ツールキットは、簡単にいえばGUIライブラリ集で、UbuntuにあらかじめインストールされているアプリケーションはほぼすべてがGTKのバージョン3です。また他に著名なものとしてはQtがあります。GTKは3以降、Qtは5以降でWaylandにネイティブ対応しています。

アプリケーションが個別の理由で独自のツールキットから開発することもあり、UbuntuにあらかじめインストールされているアプリケーションではFirefox/Thunderbird、LibreOfficeが該当します。

Google Chrome、Microsoft Edge、VivaldiといったWebブラウザーは、Chromiumというオープンソースプロジェクトで開発されているWebブラウザーをベースにしていることはご存知でしょう。さらにこのChromiumとNode.jsを組みわせてフレームワークにしたElectronも広く使われ、さまざまなアプリケーションが開発されています。具体的にはVisual Studio CodeやJoplin、Slackなどが著名です。

例に挙げたツールキット(を採用したアプリケーション)はいずれもWaylandに対応していますが、対応状況はさまざまです。

Waylandとスケーリング

第714回でサラリと言及されていますが、Firefoxは「任意倍率のスケーリング」を使用するとフォントが滲んで表示されるという問題があります。これは別にFirefoxに限ったことではなく、XWayland経由で起動するアプリケーションすべてが該当します詳細な解説⁠。

第715回で紹介したThinkPad X13 Gen2 AMDもそうですが、昨今のノートPCは高DPIディスプレイが採用されているため、現状はWaylandセッションを使用している限りはこの現象から逃れるのは難しいです[1]⁠。

Waylandとインプットメソッド

現在主流のインプットメソッドであるIBusとFcitx5はいずれもWaylandに対応していますが、第689回で紹介したようにWaylandセッションでMozcを使用すると制限があるため、Fcitx5がおすすめです。

第689回の内容はあくまでUbuntu 21.10向けであり、22.04 LTSではgnome-shell-extension-kimpanelパッケージがリポジトリからなくなっています。第712回を参考にExtension Managerをインストールし、そこからInput Method Panelをインストールしてください[2]⁠。

ツールキットごとの対応状況

それではツールキットごとのWayland対応状況を個別に見ていきましょう。

以後スクリーンショットは仮想マシン上で「任意倍率のスケーリング」を有効にし、⁠サイズ調整」「125%」にした状態で撮影しています図2⁠。すなわちXWayland経由で起動している場合はフォントが滲みます。

図2 スケーリングの設定
図2

GTK 3/4

前述のとおりUbuntuにあらかじめインストールされているアプリケーションはGTK3を採用しています。22.04LTSではバージョンは3で統一しており、GTK4アプリケーションはリポジトリにあるだけです。デフォルトでWaylandに対応するため、特に何かをする必要はありません。

環境変数「GDK_BACKEND=x11」を指定するとXWayland経由でも起動できますが、あまり使う場面は多くないでしょう。図3はWaylandネイティブで起動し撮影したスクリーンショットで、図4はXWayland経由で起動し撮影したスクリーンショットです。フォントの滲みが確認できるでしょう。

図3 Waylandネイティブで起動したgedit
図3
図4 XWayland経由で起動したgedit
図4

Qt 5

今回はQt 5に限定しますが、前述のとおりWaylandに対応しています。しかしQt/KDEアプリケーションを起動するとXWayland経由となります。

Waylandネイティブで動作させたい場合は、⁠qtwayland5」パッケージをインストールし、環境変数「QT_QPA_PLATFORM="wayland;xcb"」を指定してください詳細な解説⁠。

WaylandセッションではIBusで試したところ候補ウィンドウの位置が正しく表示されませんが図5⁠、Fcitx5 + Input Method Panelで正しい位置に表示されることを確認しました。

図5 IBusでは候補ウィンドウの表示位置がおかしい
図5

LibreOffice

LibreOfficeはVCLという独自ツールキットを採用していますが、少なくともUbuntuで起動する限りではWaylandネイティブで動作しているようです。

Firefox/Thunderbird

Firefox/Thunderbirdも独自のツールキットですが、Waylandサポートには違いがあります。ThunderbirdはデフォルトでWaylandネイティブ動作しますが、FirefoxはXWayland経由になります。これはSnapパッケージであっても、第710回にあるオフィシャルバイナリであっても同様です。

環境変数「MOZ_ENABLE_WAYLAND=1」を指定するとWaylandネイティブで動作するようになります。少なくとも筆者が確認している限りは安定して動作しているので、近日中にFirefoxのバージョンアップによりデフォルトで対応することも充分に考えられます。

Chromium/Electron

Chromium/Electionは各アプリケーションごとに対応状況が変わるのであくまで一般例としますが、いずれもWaylandに対応しており、実行オプションに--enable-features=UseOzonePlatform --ozone-platform=waylandをつけるとネイティブ動作します。ただし日本語入力が行なえません。

これはChromium(正確には抽象化レイヤーのOzone)のWaylandサポートが現状に即していないからです。

詳細はFcitx/Fcitx5開発者のCS Slayerさんが(中国語で)解説しています。これを読むのが最も理解が進みますが、なかなかに難易度が高いです(英語に訳すと読めます⁠⁠。要約すると、⁠Waylandではコンポジター(GNOMEだとMutter)とアプリケーション(今回はChromium)間で使用される入力関連のプロトコルが4つある。広く使われているのが『text-input-v3』だがChromiumは『text-input-v1』しかサポートしておらず、Mutterでは『text-input-v3』のみに対応で『text-input-v1』には非対応なので入力できない」ということです。

理想的にはChromiumが「text-input-v3」をサポートすることです。もちろん要望はされていますが、対応は進んでいません。

よってこの対応が行われるまではXWayland経由で使用するのが現実的な解となります。

おすすめ記事

記事・ニュース一覧