xterm.js + ws + ssh2 未将终端调整大小信号 (SIGWINCH) 传输到 ssh 服务器

xterm.js + ws + ssh2 not transmitting terminal resize signals (SIGWINCH) to ssh server

在这里重述我的问题。

我有一个使用 'xterm.js'、'ws' 和 'ssh2' 节点模块的网络应用程序。一切都很好。除了一件事:

SIGWINCH window 调整大小信号不会到达 sshd 服务器或 ssh2 流。其他信号、esc、ansi 工作正常。 Esc[8 就消失了。

在真正的 xterm 中,echo -e "\e[8;30;120t" 调整终端两端的大小。不在这里。 sock.send("\u001b[8;30;120t") 也不会做任何事情。

我的节点应用程序服务器上的

Console.log 显示 Escape[8(或 \e、\u001b 或 \x1b)不成功。其他转义码也有效——箭头、鼠标点击等。

我可以在客户端上执行 term.resize(x,y),但目前必须在服务器上使用 stty。 Ssh2 的 pty 仅在登录时设置它们。我如何传播 SIGWINCH?它被困在哪里?

好的。所以我自己对这个问题的回答是:在浏览器中,使用 term.resize(cols,rows) 来调整本地终端的大小。通过 websocket 上的 ansi 转义序列传输列和行。然后,在节点服务器应用程序上,在 ssh2 客户端中,使用 Regexp 匹配调整大小转义序列并提取第二个和第三个数字,即列数和行数('8' 是调整大小的代码)。使用带有提取的列和行的 ssh2 客户端调整大小功能(告诉 ssh2 伪终端发送 sigwinch 和 cols/rows 到 ssh 服务器)。不理想,我知道如果我能找到它会有更好的方法,但是如果你在浏览器中为它创建一个函数并将它添加到 window 调整大小的事件侦听器,它会很好地工作。现在,当我调整浏览器 window 大小时,或者当软键盘在移动设备上弹出或隐藏时,我的终端会话将在客户端和服务器端适当地调整大小。