次のシナリオがあります。
ホストパイプ(パイプ/ fifoという名前)に接続されている公開シリアルポートがある仮想マシンにWindowsがあります。
主要なパイプラインがあります/tmp/win-serial-com3
。
私はホストOSで使用しています。socat
このように:
socat - /tmp/win-serial-com3,cr
ゲスト、運転してくださいパテ、「各CRに暗黙のLF」を設定し、ローカルエコーを有効にします。 PuTTYはゲストWindowsでCOM3を開きます。
両方を実行すると、戻りキーが正しく機能し、重複も発生しません。 PuTTYと入力すると、socat
実行中のホストオペレーティングシステムの端末に各文字が順番に表示されることがわかります。
ただし、ホストOSに何かを入力するとローカルエコーが表示されますが(echo=0
オプションではオフになっていないため)、その文字はシステムのPuTTYでEnterキーを押した後にのみゲストジョブに表示されます。
私が望むのは、キーを押すたびにそのキーが名前付きパイプに送信され、本質的にゲストOSのPuTTYと同じ動作を持つことです。
私はこれがSTDIO()のバッファリングに関連していると思います-
が、わかりません。
答え1
さて、私は解決策を見つけ、かなりの試行錯誤の最後に次のような結果を得ました。
ホスト側(Linux)でのsocat
呼び出し方法は次のとおりです。
stty -icanon && socat - /tmp/win-serial-com3,cr
ゲスト側では、「各CRの暗黙的なLF」を使用してPuTTYを呼び出す必要があり、端末設定で「各LFの暗黙的なCR」をオフにする必要があります。
これはまだ理想的ではありません。
backspaceホスト側を押すと、^?
前の文字を削除する代わりに1つを印刷します。訪問者側ではこれがうまくいきます。ゲスト側を押すと、backspaceゲスト側の文字は削除されますが、ホスト側では削除されません。まだ働く方法が見つかりませんでしたbackspace。