XON / XOFFフロー制御は複数の端末セッションホップを介して移動しますか?

XON / XOFFフロー制御は複数の端末セッションホップを介して移動しますか?

私が解決しようとするジレンマは、より大きなテキスト出力が最終的に混乱したテキストに分解されることです。

背景として、私はTELと呼ばれるPX-8のターミナルエミュレーションソフトウェアを使用して、RS232を介してPi3に接続された古いシステム(EPSON PX-8)を使用しています。

電話設定 - ボーレート:9600、文字ビット:8、パリティ:なし、ストップビット:2、RTS:オン、フロー制御:オン

もともと私はPX-8とPi3の間でこの問題を発見しました。 XON / XOFF信号でフロー制御を有効にすることでこの問題を解決できました。しかし、Pi3から他のLinuxホストにtelnetまたはsshを試してみると、より大きなテキストブロックを出力しようとすると、壊れたテキストが表示されます。

以下のテキスト出力は、コマンド履歴を印刷しようとしたときに何が起こるかについての例です。

    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アダプタのようなものを持っていて、gettyPX-8でこのttyにログインできるように1つを設定したとします。ログインすると、stty ixonシェルはpiの出力に対してxon / xoffフロー制御を有効にします。sshシェルからリモートでログインしている場合、フロー制御はリモートからの大量の出力を防ぐのに十分ではありません。

起こっているように見えるのは、(実行strace -v -f -o /tmp/trace sshと検索ioctl(0,...)ssh端末が意図的にixon設定をオフにすることを含む生モードに切り替わるということです。これは一般的に欲しいものです。入力されたすべての文字が、フロー制御などを処理するための独自のptyを持つリモートデバイスに送信されることを望みます。

残念ながら、リモコンの出力は大きなバッファに転送されるため、PX-8のxoff文字はほとんど効果がありません。リモコンに到達すると、piが受信したすべての大きなバッファが出力され続けるためです。オーバーフローとデータ損失が発生します。

stty ixon試すことができるのは、SSH接続を確立した後にPyで再発行することです。これを自動化する1つの方法は、~/.ssh/config2つのオプション行に追加することです。

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

PermitLocalCommandセキュリティ上の理由から、デフォルトではオフになっていますman ssh_config

おすすめ記事