OpenSSH、FreeBSD 关闭应用程序时屏幕覆盖

OpenSSH、FreeBSD 关闭应用程序时屏幕覆盖

我在虚拟机上安装了全新的 FreeBSD 10 并通过 SSH 连接,我注意到每当我关闭程序(例如 htop、top、nano 等)时,会话的内容都会被覆盖。

终端截图

例如,当我连接到 Ubuntu、Debian 服务器时,不会发生这种情况。

我也不太清楚这叫什么,所以谷歌搜索也帮不上什么忙。

有人曾经遇到过这种情况吗?/我需要更改 OpenSSH 服务器中的某些设置吗?

答案1

会议内容包括已经当您首先启动 TUI 程序时,它就会被覆盖。您可以看到确实如此。

当使用等来呈现其文本用户界面的 TUI 程序ncurses启动时,它会清除屏幕。此时,屏幕上的所有内容都已被覆盖。

你忽略了,你不知道它的名字,是终端的概念,它有一个备用屏幕缓冲区。当此类 TUI 程序启动时,它会发出转义序列以切换到终端的备用屏幕缓冲区(如果有)。然后,它的所有输出都会进入该缓冲区。当程序退出或暂停自身时,它会发出转义序列以恢复主屏幕缓冲区,当 TUI 程序将其用户界面显示在备用缓冲区上时,主屏幕缓冲区保持不变。

对于没有备用屏幕缓冲区的终端,没有可发出的转义序列,全屏用户界面将覆盖终端上先前的内容。

terminfo程序在或数据库中查找这些转义序列termcap。在terminfo世界中,终端功能被命名为smcuprmcup。在termcap世界中,它们被命名为tite。根据文档,它们没有提及屏幕缓冲区。

相反,他们谈论的是进入和退出“光标寻址模式”。这个概念是,一个呈现像这样的全屏界面的 TUI 程序是在光标寻址模式程序实际上不需要终端滚动;而仅输出滚动文本行的 TUI 程序则不需要。因此,人们可以切换到或退出此模式。(在现实世界中,事情并没有那么明确。例如:现代 shell(如 Z Shell)会移动光标进行行编辑、菜单完成等;$RPROMPT但不切换到备用屏幕缓冲区,没有成熟的全屏用户界面,并且以滚动的方式操作。)

因此,这些功能通常不仅仅是切换缓冲区。 smcup还包含用于保存当前光标位置的转义序列,以及rmcup用于恢复它的转义序列(如果终端具有这样的转义序列)。

你的问题有两个:

  • 您的 FreeBSD 系统上的数据库termcap没有您特定终端类型的te条目ti,因为该条目不完整。
  • 首先,您没有为终端仿真器使用正确的终端类型。

终端类型取自您的TERM环境变量,在服务器端。其值表示数据库中的条目termcap。因此,请确保您的TERM环境变量命名的条目具有/etc/termcap与您的(本地)终端仿真器相匹配的功能。如果没有与您的终端仿真器匹配的包含ti和的条目te,那么您只需添加这样的条目即可。

答案2

正如 roens 所指出的,FreeBSD 在其默认的 termcap 条目 xterm-256color 中不包含 te/ti 定义。但是,它确实在 termcap 条目中包含了这些定义,供那些想要清除屏幕的人使用:xterm-clear。

因此,实现此目的的一个简单方法是设置TERM变量:

export TERM=xterm-clear

尽管这是一个非常晚的答案,但我还是把它放在这里,因为我见过的许多其他解决方案(包括 roens 的)都比必要的复杂得多(涉及使用转义代码修改 termcap 文件并重新编译数据库,或使用文件.termcap)。

答案3

我找到了需要改变的例子这篇文章在 FreeBSD 论坛上。进行此更改后,查看手册页或编辑文件时屏幕上的内容将被清除,只显示终端中的命令等(bash)。现在还可以使用编辑器或其他类似过程中的各种滚动方法(如“两指滚动”)。

对我来说,运行的效果非常好,就是在中的术语别名中FreeBSD 11.0-RELEASE-p9添加第 4 行(定义te& )和前面的反斜杠:ti/usr/share/misc/termcap

xterm-256color|xterm alias 3:\
    :Co#256:pa#32767:\
    :AB=\E[48;5;%dm:AF=\E[38;5;%dm:tc=xterm-new:\
    :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h::tc=xterm-xfree86:

因为我来自 macOS,并且我的TERM=xterm-256color,所以我将上述内容添加到了xterm-256color|xterm alias第 2884 行。您TERM的文件中的和位置termcap可能有所不同。

然后,在对 termcap 进行更改后,您必须使用以下命令重建 termcap 数据库:

cap_mkdb /usr/share/misc/termcap

(我本来想将此作为对现有答案的评论,但缺乏 >50 的声誉。)

相关内容