我们正在通过SSH使用一个基于文本的程序。会话是通过一个登录脚本启动的,该脚本做了一些设置,然后在没有shell的情况下启动程序。它在油灰中效果很好。我们正在尝试将其用于移动SSH客户端,如白蚁。
问题是xHarbour程序识别终端的变化,比如旋转屏幕或关闭键盘。因此,如果调整了终端的大小,xHarbour程序就会知道它并更改控制台大小。
使用stty x rows y columns,我可以设置初始终端大小。
我试着在程序启动前将这些命令放入init脚本中,但是如果客户端屏幕大小发生变化(关闭键盘、旋转屏幕),则会再次自动更改值并破坏输出。我还使用了shopt -u checkwinsize,它会影响外壳,使终端看起来好像有固定的大小,但对xHarbour程序没有影响。
是否有方法阻止SSH会话接收所描述的这里的带内命令?据我所知,我不能用termius来设置终端的尺寸。是否有一个安卓(可能也是iOS )客户端允许这样做?
目标系统为Centos 6、7
发布于 2020-05-29 22:15:39
在Linux和BSD系统上,当终端改变大小时,附加到该终端的进程将收到一个SIGWINCH。默认的行为是忽略这个信号,但是处理屏幕绘图,包括使用ncurses的程序,捕捉这个信号并相应地调整显示。
通过SSH发送的消息将导致调整终端的大小,从而使您的进程接收SIGWINCH。OpenSSH没有提供一种控制这些功能的方法,因为这是具有完全功能的终端仿真的一部分,并且允许人们选择和选择他们希望使用的终端的哪些部分,这将导致程序面临一个不可能的困难环境。但是,如果您不希望您的进程有一个终端,您可以使用-T选项通过SSH调用它,然后它就不会了。它也没有重新绘制屏幕的能力,因为它没有终端或终端类型集。不过,这可能就是你想要的行为。
如果您真的不想重新绘制屏幕,您可以尝试从忽略SIGWINCH的包装程序中派生出您的进程。看起来有些版本的诅咒确实是对此的尊重。你也可以用一个给它自己的pty来包装你的进程,然后把它转发给原来的终端。不过,那会很复杂。
然而,总的来说,这似乎并不是你通常想要的行为。程序应该响应终端,这通常是标准的Unix行为,被认为是可取的。如果你真的让它起作用,你可能最终会有很多错误的渲染,并且通常对结果不满意。
https://unix.stackexchange.com/questions/589827
复制相似问题