将屏幕会话配置为完全类似于xterm终端

问题描述

我希望能够通过screenrc或在会话内配置屏幕会话,使其行为类似于xterm终端。目前,我有一个c#应用程序,该应用程序使用ssh.net库从Windows机器SSH到Linux盒,在该机器上我附加到屏幕会话并发送命令并接收响应。如果我连接到屏幕会话,则与未连接屏幕会话时,我看到两种不同的指令,并且对同一命令的响应也不同。为了演示该问题,我将使用腻子终端复制该问题并记录数据。

  1. 从Windows打开腻子终端
  2. 更改“会话”->“日志记录”设置,然后选择“ SSH数据包”,还浏览到保存putty.log文件的位置
  3. 设置您的IP地址并连接到Linux计算机
  4. 登录后,发出以下命令printf“ abc \ 6 \ n”,该字符串包含一个ack字符
  5. 响应将显示abc,当然不会显示\ 6,因为它不是可打印的字符
  6. 打开putty.log文件,您将看到响应包数据包含\ 6,这是正确的行为。
  7. 现在通过发出以下命令来创建会话:screen -dmS test
  8. 通过发出以下命令来加入会话:screen -Rr test
  9. 再次发出以下命令printf“ abc \ 6 \ n”
  10. abc将按预期打印,但是如果您查看putty.log中的响应数据包数据,它将不再具有\ 6字符
  11. 我可以通过以下命令来解决此问题:printf“ abc \ 6 \ n” | cat -v将\ 6转换成可打印的格式并在屏幕上显示^ F,我宁愿在数据包数据中接收\ 6,但这不是理想的解决方案,但至少可以为我的问题提供解决方案。

以下是我无法解决的更严重的问题。为了演示,请执行以下操作:

  1. 从Windows打开腻子终端
  2. 更改“会话”->“日志记录”设置,然后选择“ SSH数据包”,并浏览到保存putty.log文件的位置
  3. 设置您的IP地址并连接到Linux计算机
  4. 登录后,通过发出以下命令来更改stty设置(告诉终端不要用回车代替新行):stty -onlcr
  5. 然后发出命令ls -al,
  6. putty.log文件将包含正确的数据集,且没有多余的字符。
  7. 现在通过发出以下命令来创建会话:screen -dmS test
  8. 通过发出以下命令来附加会话:screen -Rr test
  9. 再次发出以下命令stty -onlcr
  10. 再次发出ls -al
  11. 如果您查看putty.log中的响应数据包数据,则会看到在收到一定数量的数据包之后,响应将在每个响应前面包含多余的字符。多余的字符采用以下格式[13C。 [和C之间的数字不同。

我想使响应的行为与标准xterm终端相同,为什么会有区别,并且有一种方法可以配置屏幕以获取与xterm终端类型一致的响应。

解决方法

您要求做的事情与screen所做的事情完全相反。

screen是一个终端仿真器,就像xterm一样。它从pty解释数据流,并将其内部呈现在缓冲区中,以跟踪屏幕上的内容以及格式。

连接后,screen会合成一个新的终端指令流,以在您的特定终端上重新绘制相同的缓冲区。

它不能简单地存储和重播相同的线性流,因为这会破坏工具所关注的无缝复用和重新连接(可能来自不同终端)。

如果您希望忠实地转储到终端的线性数据流,则可以改用script