我正在使用 XTerm.js 编写一个终端共享 Web 应用程序。该应用程序使用由 PHP 编写的自定义服务器处理的 WebSocket 将输入从浏览器发送到主机终端。输入被接收curl
并将curl
输出发送回服务器,然后将其推送到浏览器。不涉及 SSH 客户端库,因此很遗憾,这个问题的答案对我没有帮助。
问题是依赖于知道终端大小的应用程序没有正确缩放,默认为 24 行 x 80 列。当我运行一些通常用于报告终端大小的列时,我得到以下结果:
> stty size
0 0
> tput lines
24
> tput cols
80
我使用 xterm-addon-fit 来调整终端的大小,但它只适用于不依赖终端大小的命令的输出,例如ls -l
. 例如,确实依赖它的命令ls
(无参数)或更重要的是vim
仅在假设 24x80 终端大小的情况下呈现其结果。
我尝试使用前面提到的问题中的 SIGWINCH 信号,因为我认为当中间没有 SSH 客户端时它可能会起作用。所以我在浏览器中发送了这样的内容:
echo -e "\e[8;30;120t"
但它没有用。
我可以尝试发送这样的东西作为第一个命令:
stty rows 48 cols 160
但是如果窗口大小发生变化,则不能重复,因此终端大小将在启动后固定。
有没有办法用 XTerm.js 动态控制终端大小?如果您想查看实际问题,可以在terminalmirror.com上查看有问题的应用程序。