1

在这里改写我的问题。

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

SIGWINCH 窗口调整大小信号不会发送到 sshd 服务器或 ssh2 流。其他 sig、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?它被困在哪里?

4

1 回答 1

2

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

于 2017-09-26T00:39:07.917 回答