今回は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セッション。デフォルトで前者が選択されている
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 スケーリングの設定
GTK 3/4
前述のとおりUbuntuにあらかじめインストールされているアプリケーションはGTK3を採用しています。22.04LTSではバージョンは3で統一しており、GTK4アプリケーションはリポジトリにあるだけです。デフォルトでWaylandに対応するため、特に何かをする必要はありません。
環境変数「GDK_BACKEND=x11」を指定するとXWayland経由でも起動できますが、あまり使う場面は多くないでしょう。図3 はWaylandネイティブで起動し撮影したスクリーンショットで、図4 はXWayland経由で起動し撮影したスクリーンショットです。フォントの滲みが確認できるでしょう。
図3 Waylandネイティブで起動したgedit
図4 XWayland経由で起動したgedit
Qt 5
今回はQt 5に限定しますが、前述のとおりWaylandに対応しています。しかしQt/KDEアプリケーションを起動するとXWayland経由となります。
Waylandネイティブで動作させたい場合は、「 qtwayland5」パッケージをインストールし、環境変数「QT_QPA_PLATFORM="wayland;xcb"」を指定してください(詳細な解説 ) 。
WaylandセッションではIBusで試したところ候補ウィンドウの位置が正しく表示されませんが(図5 ) 、Fcitx5 + Input Method Panelで正しい位置に表示されることを確認しました。
図5 IBusでは候補ウィンドウの表示位置がおかしい
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経由で使用するのが現実的な解となります。