XON/XOFF 流量控制是否通过多个终端会话跳跃进行传输?

XON/XOFF 流量控制是否通过多个终端会话跳跃进行传输?

我试图解决的难题是,较大的文本输出最终会分解成混乱的文本。

作为背景,我正在使用一台旧机器(EPSON PX-8)通过 RS232 连接到 Pi3,使用 PX-8 上称为 TEL 的终端仿真软件

电话设置 - 波特率:9600,字符位:8,奇偶校验:无,停止位:2,RTS:开,流量控制:开

最初我在 PX-8 和 Pi3 之间发现了这个问题。我能够通过启用 XON/XOFF 信令的流量控制来解决这个问题。然而,当我尝试从 Pi3 telnet 或 ssh 到另一台 Linux 主机时,在尝试输出较大的文本块时,我再次收到乱码文本。

下面的文本输出是我尝试打印命令历史记录时发生的情况的示例。

    1  sudo rasp-config
    2  sudo raspi-config
    3  sudo nano /boot/cmdline.txt
    4  tail /boot/cmdline.txt
    5  sudo shutdown -r now
    6  sudo vim ~/boot/cmdline.txt
    7  cd /./boot
    8  dir
    9  sudo vim cmdline.txt
   10  sudo vim config.txt
   11  sudo shutdown -r now
   12  dfgdf
   13  vim
   14  sudo vim cmdline.txt
   15  cd /./boot
   16  sudo vim cmdline.txt
   17  sudo shutdown -r now
   18  cd /./boot
   19  sudo vim cmdline.txt
   20  sudo shutdown -r now
   21  ping 8.8.8.8
   2 xprt TEM=Vvj9s9ds9j3oin so nat1 machine
  x Rom =vos cngas-2goses9g3
-xtiet n n5
-s oiy
y

答案1

我假设您在 pi 上有类似串行到 USB 适配器的东西,并且已经设置了一个,getty以便您可以从 PX-8 登录到此 tty。登录后,stty ixonshell 将为 pi 的输出启用 xon/xoff 流量控制。如果您现在ssh从 shell 登录到某个远程,则流量控制不足以阻止来自远程的大量输出。

似乎正在发生的事情(执行strace -v -f -o /tmp/trace ssh并查找ioctl(0,...))是ssh故意将终端置于原始模式,其中包括关闭ixon设置。这通常是所期望的;您希望输入的每个字符都发送到远程设备,远程设备有自己的 pty 来处理流量控制等。

不幸的是,远程的输出是在大缓冲区中发送的,因此来自 PX-8 的 xoff 字符几乎没有影响,因为当它到达远程时,pi 已接收到的所有大缓冲区将继续输出,可能会导致溢出和数据丢失。

stty ixon您可以尝试的是在建立 ssh 连接后在 pi 上重新发出 an 。自动执行此操作的一种方法是添加到您的~/.ssh/config2 个选项行

PermitLocalCommand yes
LocalCommand sleep 10 && stty ixon -F /dev/tty &

PermitLocalCommand为了安全起见默认关闭;看man ssh_config

相关内容