Ubuntu 24.04でSSH X11転送が重くなる問題をObscureKeystrokeTiming無効化で解消する
問題の概要
Ubuntu 24.04においてSSH経由でX11転送を使用して Emacsを利用するとき、範囲選択をすると動作が遅い問題が発生していた。
C-SPCでマークして範囲選択しようとすると画面への反映が数秒単位で遅れるので利用に致命的な問題が発生していた。
SSH経由せずに同一端末内で Emacs を起動して利用すると問題は発生せず、Ubuntu 22.04までは発生していなかった(はず)。
emacs -Qで .emacs を反映しなくても再現しており、問題を特定することができず困っていた。
# 接続元/接続先
$ ssh -V
OpenSSH_9.6p1 Ubuntu-3ubuntu13.12, OpenSSL 3.0.13 30 Jan 2024
# 接続先
$ emacs --version
GNU Emacs 29.3
根本原因
いろいろ調査した結果、数は少ないが同様の問題が報告されていることがわかった。
(Claudeで壁打ちしたがあまり上手くいかなかった)
- [SOLVED] 5 second delay when when opening X11 window from SSH session
- Default ObscureKeystrokeTiming makes X forwarding really slow
- Bug #2077612 "Slow X11 performance through ssh"
原因は OpenSSH 9.5 で導入された ObscureKeystrokeTiming という機能。セキュリティ関連の機能で、キーストロークタイミング解析攻撃を防ぐためにダミーデータを送信する。
これがX11と相性が悪く、GUIのパフォーマンスに大きな影響を与えているらしい。
Ubuntu 24.04はOpenSSH 9.6を採用しており影響を受けている。Ubuntu 22.04は 8.9だったので影響を受けていなかった。
解決方法
一時的な機能の無効化
ssh 接続時に ObscureKeystrokeTiming=no オプション付きでSSH接続するとこの機能が無効化できる。
自分はこれにより問題が解消できることを確認した。
ssh -Y -o "ObscureKeystrokeTiming=no" user@host
または、 ~/.ssh/config に以下の設定を追加することでデフォルトで無効化できる。
Host your-server
ObscureKeystrokeTiming no
根本解決
この問題は OpenSSH 10.0 において解消しているらしい。このバージョンは 2025年4月にリリースされている。
自分はまだこのバージョンでは未検証なので、これで解消するかは確認できていないが、将来のUbuntuアップデートで解消できそうな見込み。
* ssh(1): don't start the ObscureKeystrokeTiming mitigations if
there has been traffic on a X11 forwarding channel recently.
Should fix X11 forwarding performance problems when this setting
is enabled. bz3655
Discussion