web-dev-qa-db-ja.com

リモートマシンのシリアルポートに接続してデータをログに記録するためのバッファリングされていないsocatコマンド

現在、次のコマンドを使用しています。ローカルマシンのシリアルttyUSB0から読み取り、ロギング用の2つのteeコマンドを介して双方向にsshに接続します。リモートエンドで、socatはstdioをリモートttyUSB0に接続します。

stty -F /dev/ttyUSB0 raw 3000000

ssh  [email protected] stty -F /dev/ttyUSB0 raw 3000000

socat /dev/ttyUSB0,raw,echo=0 SYSTEM:'"tee -a log_l2r | ssh  [email protected] socat - /dev/ttyUSB0,raw,echo=0  | tee -a log_r2l"',pty,echo=0
  1. バッファリングによってリアルタイム通信が損なわれないようにしたい 2つのロボットコントローラ間。ラインバッファリングは問題ありませんが、それ以上のことはありません。
    上記のコマンドには多くの接続があり、バッファリングされたパイプ/ソケットの可能性についてはよくわかりません。それらを見つけるのを手伝ってくれませんか。

  2. また、翻訳やエコーを削除する必要があります(stty ... raw ...すでにこれを行っています)。

  3. このコミュニケーションの問題を解決するための他の好ましいアプローチはありますか?つまり、他のコマンド?

Debian GNU/Linuxの実行-Ubuntu

4
AndresR

Stdioバッファリングを取得した場合は、実際のコマンドのプレフィックスとしてstdbufコマンドを適用します。

sttyにはおそらく明示的な-echoが必要です。

別の方法として、ssh暗号化が必要ない場合は、あるマシンのusbデバイスを別のマシンで表示するための sbip モジュールを確認してください。

teeロギングを回避するには、socat -vを使用してstderr上の両方のデータストリームのコピーを取得します。

4
meuh