gnome-terminalのレスポンスが非常に遅くなる問題への対処方法

gnome-terminalのレスポンスが遅くなる問題にここ2ヶ月くらい悩まされていましたが、それがようやく解決できたので共有程度に記事を書きました。

issueやコミュニティフォーラムなどを調査すると、NVIDIAグラフィックボードが搭載されたPC上でUbuntu 22.04を動かしかつWindow ManagerにMutterを使っている場合に生じるということが分かりました。

https://askubuntu.com/questions/1509058/input-delay-on-terminal-ubuntu-22-04-4

原因

mutterのSyncオブジェクトの実装が不足していたようです。

journalctlでブートID 0のログを参照してみるとMetaSyncRingのアラートが出ていることが分かります。

$ journalctl -b0 | grep MetaSyncRing
May 26 03:31:34 oxygen gnome-shell[293854]: Window manager warning: MetaSyncRing: Sync object is not ready -- were events handled properly?

ソースコードの変更部分を見るとmeta_sync_ring_insert_waitという関数内でring->current_sync->stateがMETA_SYNC_STATE_READYでない場合はwarningを出し、meta_sync_ring_rebootをかけています。

おそらくこのmeta_sync_ring_rebootで最インスタンス化などをしており、そのせいでレスポンスが遅くなっていたと思われます。

今回の変更ではMETA_SYNC_STATE_WAITINGの場合、gpu_fenceというものを0にしてMETA_SYNC_STATE_READYをstateに入れ込んでいますが、ここらへんは追いきれていないです。

gpu_fenceとかはなんだろうカーネルとかx11の実装とかを見ておけばよいのでしょうか?)

gitlab.gnome.org

gpu_fenceについてはあまりよく分かりませんでしたが、とにかくこれが原因で、すでに修正コミットがMutterのメインブランチにマージされていますのでリリースを気長に待ちましょう。

といってもUbuntuの公式リポジトリに入るのはだいぶ先ですので、この不具合の修正コミットをあてたmutterを開発者の方がPPAで公開(https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/2059847/comments/25)しているのでこちらをインストールして凌ぐことにしましょう。

対処方法

 sudo add-apt-repository ppa:vanvugt/mutter
 sudo apt update
 sudo apt upgrade
 sudo apt-get install gir1.2-mutter-10=42.9-0ubuntu7vv1 mutter-common=42.9-0ubuntu7vv1 libmutter-10-0=42.9-0ubuntu7vv1

一部コンポーネントは古いバージョンのものとなっているため、apt updateで更新されてしまいます。

このため以下のコマンドで更新を抑制しておきます。

 sudo apt-mark hold gir1.2-mutter-10 libmutter-10-0 mutter-common