首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止在SSH上理解终端大小更改的程序的终端更改大小

防止在SSH上理解终端大小更改的程序的终端更改大小
EN

Unix & Linux用户
提问于 2020-05-29 20:07:15
回答 1查看 420关注 0票数 -1

我们正在通过SSH使用一个基于文本的程序。会话是通过一个登录脚本启动的,该脚本做了一些设置,然后在没有shell的情况下启动程序。它在油灰中效果很好。我们正在尝试将其用于移动SSH客户端,如白蚁

问题是xHarbour程序识别终端的变化,比如旋转屏幕或关闭键盘。因此,如果调整了终端的大小,xHarbour程序就会知道它并更改控制台大小。

使用stty x rows y columns,我可以设置初始终端大小。

我试着在程序启动前将这些命令放入init脚本中,但是如果客户端屏幕大小发生变化(关闭键盘、旋转屏幕),则会再次自动更改值并破坏输出。我还使用了shopt -u checkwinsize,它会影响外壳,使终端看起来好像有固定的大小,但对xHarbour程序没有影响。

是否有方法阻止SSH会话接收所描述的这里的带内命令?据我所知,我不能用termius来设置终端的尺寸。是否有一个安卓(可能也是iOS )客户端允许这样做?

目标系统为Centos 6、7

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-05-29 22:15:39

在Linux和BSD系统上,当终端改变大小时,附加到该终端的进程将收到一个SIGWINCH。默认的行为是忽略这个信号,但是处理屏幕绘图,包括使用ncurses的程序,捕捉这个信号并相应地调整显示。

通过SSH发送的消息将导致调整终端的大小,从而使您的进程接收SIGWINCH。OpenSSH没有提供一种控制这些功能的方法,因为这是具有完全功能的终端仿真的一部分,并且允许人们选择和选择他们希望使用的终端的哪些部分,这将导致程序面临一个不可能的困难环境。但是,如果您不希望您的进程有一个终端,您可以使用-T选项通过SSH调用它,然后它就不会了。它也没有重新绘制屏幕的能力,因为它没有终端或终端类型集。不过,这可能就是你想要的行为。

如果您真的不想重新绘制屏幕,您可以尝试从忽略SIGWINCH的包装程序中派生出您的进程。看起来有些版本的诅咒确实是对此的尊重。你也可以用一个给它自己的pty来包装你的进程,然后把它转发给原来的终端。不过,那会很复杂。

然而,总的来说,这似乎并不是你通常想要的行为。程序应该响应终端,这通常是标准的Unix行为,被认为是可取的。如果你真的让它起作用,你可能最终会有很多错误的渲染,并且通常对结果不满意。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/589827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档