私が解決しようとするジレンマは、より大きなテキスト出力が最終的に混乱したテキストに分解されることです。
背景として、私は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アダプタのようなものを持っていて、getty
PX-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/config
2つのオプション行に追加することです。
PermitLocalCommand yes
LocalCommand sleep 10 && stty ixon -F /dev/tty &
PermitLocalCommand
セキュリティ上の理由から、デフォルトではオフになっていますman ssh_config
。