[ttssh2-dev 192] Re: ウィンドウサイズが定まらない

Back to archive index
matsuo zmats****@gmail*****
2022年 1月 15日 (土) 00:41:19 JST


松尾です。

 > - どこにも接続していない状態
 > - TCP/IP 接続している状態
 > - cyglaunch.exe を実行
 > - cyglaunch_wsl.bat を実行(wsl.exe 
のヘルプが出て、プロンプトにならなかった)
 > 再現しませんでした。
 >
 > - cyglaunch_cmd.bat
 > - cyglaunch_powershell.bat
 > ぐりぐりしなくても、ウィンドウをリサイズするだけで再現しました。

ありがとうございます。

次のスペックのPCでも発生しました。
Core i5-10210U 1.60GHz
Windows 11 Pro

 > cyglaunch_cmd.bat で現象が起きているときのバイナリログを取りました。

TELNETと、エスケープシーケンス(CIS DECSLPP)が
関係することがわかってきました。

添付のdebugを仕込んでテストしたところ…

何も問題が起きないPCのとき

->term NAWS 25, 19
->term NAWS 30, 18
->term NAWS 40, 18
->term NAWS 52, 20
->term NAWS 63, 21
->term NAWS 67, 22
->term NAWS 68, 24
->term NAWS 70, 25
->term NAWS 69, 26
->term NAWS 62, 26
->term NAWS 49, 25
->term NAWS 44, 22
->term NAWS 42, 18
->term NAWS 43, 16

Windowサイズが定まらないPCのとき

   :
->term NAWS 80, 24
->term NAWS 62, 31
->term NAWS 80, 24
->term NAWS 58, 27
->term NAWS 80, 24
term-> CIS DECSLPP 8 79, 24
->term NAWS 79, 24
->term NAWS 80, 24
term-> CIS DECSLPP 8 80, 24
term-> CIS DECSLPP 8 79, 25
->term NAWS 79, 25
->term NAWS 80, 24
term-> CIS DECSLPP 8 78, 28
->term NAWS 78, 28
->term NAWS 80, 24
term-> CIS DECSLPP 8 78, 29
->term NAWS 78, 29
->term NAWS 80, 24
   :
のようになりました。

ウィンドウサイズが定まらないのは
接続先からサイズが送られてきて、
ウィンドウのリサイズ中にウィンドウサイズを指定サイズに変更してい、
サイズが変化したので、サイズを送って、と
ウィンドウサイズの送受信輻輳状態になるようです。

どうやってこの状態がスタートするのかはまだわかっていませんが、
まずは糸口はつかめました

- TELNET NAWS (Negotiate About Window Size)
   - TELNETでウィンドウサイズを通知する、
   - https://datatracker.ietf.org/doc/html/rfc1073

- CIS DECSLPP
   - https://ttssh2.osdn.jp/manual/5/ja/about/ctrlseq.html#CSI
-------------- next part --------------
 teraterm/teraterm/telnet.c | 2 ++
 teraterm/teraterm/vtterm.c | 1 +
 2 files changed, 3 insertions(+)

diff --git a/teraterm/teraterm/telnet.c b/teraterm/teraterm/telnet.c
index 796a8236a..52a7bda01 100644
--- a/teraterm/teraterm/telnet.c
+++ b/teraterm/teraterm/telnet.c
@@ -224,6 +224,8 @@ static void SendWinSize(void)
 	CommRawOut(&cv, TmpBuff, i);
 	if (tr.LogFile)
 		TelWriteLog(TmpBuff, i);
+
+	OutputDebugPrintf("->term NAWS %d, %d", tr.WinSize.x, tr.WinSize.y);
 }
 
 static void ParseTelIAC(BYTE b)
diff --git a/teraterm/teraterm/vtterm.c b/teraterm/teraterm/vtterm.c
index bd8bf77e5..a8879e573 100644
--- a/teraterm/teraterm/vtterm.c
+++ b/teraterm/teraterm/vtterm.c
@@ -2727,6 +2727,7 @@ void CSSunSequence() /* Sun terminal private sequences */
 			RequiredParams(3);
 			if (Param[2] <= 1) Param[2] = 24;
 			if (Param[3] <= 1) Param[3] = 80;
+			OutputDebugPrintf("term-> CIS DECSLPP 8 %d, %d", Param[3], Param[2]);
 			ChangeTerminalSize(Param[3], Param[2]);
 		}
 		break;


ttssh2-dev メーリングリストの案内
Back to archive index