🐧

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で壁打ちしたがあまり上手くいかなかった)

原因は 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