開発^3

Web開発、宇宙開発、ゲーム開発の3種類についてつらつらと

Windows 10 May 2020 Update(Ver. 2004) に伴うPuTTYのフリーズ

本家PuTTYでは発生せず

Windows 10 May 2020 Update(Ver. 2004)にアップデートしたところPuTTYが接続時にフリーズするようになったため、調査まとめ。
(実際にはかなり前からノートPCで同症状になっていたが、だましだまし使っていた)

発生条件

  • Windows 10 May 2020 Update(Ver. 2004)適用済み
  • Listboxにフォーカスがある状態で軽くEnter

f:id:sheile:20210214104647p:plain

確認済みの影響範囲

  • iceiv+putty 2020/06/28 版
  • PuTTYrv (PuTTY-ranvis) 0.74

再現手順

  1. PuTTYをインストールする
  2. SSH接続先を指定して保存する
  3. (不要かもしれないが)PuTTYを再起動
  4. ListBoxにフォーカス
  5. ListBoxからセッションを一つ選んで軽くEnter ※1
  6. ターミナルが開きユーザー入力待ちになるがフリーズ ※2

※1 後述するようにEnterキーを押す時間が長いと発生しない
※2 初回接続の場合は [SshHostKeys] への追加ダイアログを表示してフリーズ

解決方法その1: 別のショートカットキーを使用

Alt + l → Alt + oなら発生しない(タイミングの問題かもしれないが)

解決方法その2: AutoHotKeyによる対応

iceiv+putty & 日本語化パッチ未適応の場合。
PuTTYrvの場合はクラス名が xListBox1 になる。

IsControlActive(ClassNN, WinTitle) {
    ControlGetFocus, CurCon, % WinTitle
    Return (CurCon=ClassNN)
}

; Windows 10 2004でPuTTY PRIVATE PATCHESがフリーズする問題の対策
#If IsControlActive("ListBox1", "PuTTY Configuration")
    Enter::Send {Enter down}
return
#If

解決方法その3(?): Enterキー長押し

AutoHotKeyでいろいろ試した際の挙動からするとWM_KEYUPがListBoxに飛ぶとまずいように見える。
実際、Enterキーを長めに押す(WM_KEYUPを遅らせる)ことで、問題なく接続できた。 ただ、長く押しすぎるとユーザー名入力のプロンプトをスキップして終了してしまうため、現実的ではないか。

参考: 同症状?

https://twitter.com/ktgohan/status/1270536433023873024