我正在使用一个老式串行终端,通过 USB 转 RS232 串行空调制解调器电缆连接到 Linux 机器。终端使用 XON/XOFF 流控制来避免缓冲区溢出。该终端非常适合在 Linux 机器上运行的活动。但是,如果我通过 SSH 连接到我的服务器、虚拟机甚至本地主机,我就会开始出现缓冲区溢出。看起来 SSH 正在干扰 XON/XOFF 流控制。有什么想法我可能在这里出错了吗?
额外细节:
1) 终端通过 StarTech FTDI USB 转 RS232 串行空调制解调器适配器电缆连接到计算机
2) 通过 getty 连接 ttyUSB0 的串行接口,19200 波特,vt100
3) VT100 也设置为 19200,用于发送和接收
答案1
ssh
在其正常的交互式会话模式下,将所有字符(除转义符外,通常是~
)转发到远程主机,包括^S ^Q
。 (为此,SSH/TCP/IP 连接远端的任何东西都是“远程的”,甚至是本地主机/环回或虚拟 LAN。)如果您有一个“长”(传播延迟)和/或“胖”(带宽)管道 - 环回肯定是胖的 - 在远程主机接收和采取行动之前可以传输到您的数据量^S
可能超过 VT100 可以缓冲的数据量,因为它是在连接是 RS-232 的实际小于 50' 的电线或像 103 或 212A 这样的直接调制一位一位的调制解调器的时代设计的。
如果你使用ssh
参数来运行命令在远程主机上(非交互式会话),则终端处理(和^S ^Q
)仍保留在本地操作系统中,这应该响应得足够快。显然,这会限制您可以与远程主机进行的交互。默认情况下,它还会为每个命令执行 SSH 开销(密钥交换和身份验证),这可能会更昂贵且更慢,但使用非古老版本,您可以设置一个主进程,通过该进程-M
在多个工作进程之间共享传输(和传输设置成本)。
我看到的唯一其他解决方案是不要运行产生过多输出的远程程序;例如,将程序导入more
或less
类似程序,甚至将 LINES 设置为小于 24。或者将大输出写入临时文件并使用vi
或类似程序浏览它。