ptyなしでシリアルターミナル(RS-232)を設定できますか?

ptyなしでシリアルターミナル(RS-232)を設定できますか?

/dev/ttyS0RS-232ポートがあり、ヌルモデムを介して互いに接続されている2台のコンピュータがあります。

私は過去に外部端末がどのように機能していたのか、そしてこれが今日のLinuxの動作方法とどのように関連しているのかを少しずつ理解しようとしています。

私は次のように動作するようにしました:

メインコンピュータ:

$ sudo socat /dev/ttyS0,raw,echo=0 exec:"/bin/bash -i",pty,stderr,setsid,sigint,sane

端末:

picocom -b 9600 /dev/ttyS0

しかし、pty端末でこれを得る理由は次のとおりです。

# tty
/dev/pts/11

実際の実際のttyがあれば、擬似ttyは必要ありません。そうですか?私は、偽を作る前にターミナルに配線を接続したということですよね?

だから私はptyなしで作るためにsocatオプションを混ぜて一致させようとしましたが、運がありませんでした。私の端末システムに何かが表示されている場合は、キャリッジリターンやジョブ制御がなく、tty「ttyではありません」と表示されます。

私はsocat構文(または端末設定)を理解していないことを認めなければなりません。正解を見てそこで構文を理解したいと思います。

誰かがptyなしでリモート端末を作成する方法を教えたり、これが不可能であることを受け入れるのに役立ちますか?

答え1

コマンドラインで実行している場合は、gettyrootとして実行してループにラップする必要があります。

while true; do getty -8 9600 ttyS0; done

通話はgetty1回のセッション、つまり通常3回のログイン試行を提供するか、シリアルポートが切断信号を受信するまでのみ提供します。picocomシリアル回線をリセットするために最初に中断が送信されると、これにより最初の回線がgetty終了します。

シリアルポート停止信号によりプロセスが早期に終了しない場合は、gettyTTYデバイスを設定し、コンテンツを/etc/issue端末に送信し、ログインプロンプトを表示します。有効なユーザー名を入力した場合(gettyexec()いいえ fork()まず、/bin/loginこれは通常PAMライブラリを呼び出してパスワードプロンプトと残りのユーザーセッション設定を処理します。そのプロセスの一部として、プロセスのIDがログインしているユーザーに切り替えられ、getty開始されたプロセスはログインしたユーザーのシェルをlogin再呼び出しします。exec()プロセスが終了した場合何らかの理由で、ユーザーのセッションが終了し、新しいgettyログインのための新しいプロセスが開始されます。

ループで手動で実行することは、何が起こるべきかをgetty「視覚化する」ための良い方法ですが、長期間使用するための正しいアプローチではありません。

すべてのプロセスは、実際にライフを開始したプロセス(ログインが成功したときにユーザーのシェルに変換)が終了したgettyときに開始して再起動するようになっています。したがって、シリアルポートからターミナルへの実行を最新のLinuxディストリビューションを使用するinitgettysystemdgetty

systemctl start [email protected]

再起動後も続行するには、次のことも必要です。

systemctl enable [email protected]

古典的なSysVinitを使用している場合は、ファイルにコメントされたサンプル行が必要です/etc/inittab。その行のコメントを外して実行してtelinit qSysVinitにその設定を再度読み取ると、ターミナルプロセスはinitすぐに開始され、getty必要に応じて次のように再起動する必要があります。

関連情報