(私はUbuntuを使用しています。)私が理解しているように、ttyは単なるポートです。何かを入力したら何かを出力する必要があります。ターミナル(エミュレータ)は、これらの入力と出力を処理するソフトウェアです。文字通り、端末は接続するポートを選択できます。
/devの下にたくさんのttyファイルがあり、/dev/pts/の下にたくさんのptsファイルがあるのを見ました。なぜそんなにたくさんあるのか分からない。みんな中古ですか?
そうでない場合は、指定されたptyで端末を起動できますか?
例えばgnome-terminal /dev/pts/47
修正する
私がそうする理由は、リモート端末が欲しいからです。適切な方法はsshまたはtelnetを使用することです。
しかし、一時的な訪問にはあまり便利ではありません。 socatを使用してttyまたはptyをクライアントに渡したいと思います。その後、クライアントは対応する pty または tty を使用して端末を起動できます。
以下のコードはうまくいきます。クライアント側で実行され、サーバー側では「hello」と表示されます。
echo "hello" > /home/myhomefoler/pty_created_by_socat
答え1
UNIXでは、tty(他の多くの項目と同様)がファイルとして表示されます。 ttyデバイスに書き込まれたデータは端末に送信され、端末のデータはttyから読み取ることができます。
ttyがハードウェアシリアルポートの場合、ここに書き込まれたデータはラインを介して送信され、ラインのデータはttyに表示されます。
ttyがシステムのビデオコンソールの場合、ここに記録されたデータが画面に表示され、キーボードのデータがttyに表示されます。
ttyがX端末エミュレータに接続された擬似tty(仮想端末)の場合、gnome-terminal
ここに書き込まれたデータは仮想端末の読み取りに送信されます。ソフトウェアは擬似端末の「基本」側に接続されているそうです。物理端末には、ソフトウェアで実装されている仮想デバイスではなく物理デバイス(シリアルポートなど)があるため、「マスター」側はありません。
/dev/ttyS0
したがって、Linuxの実際のシリアルポートなどの任意のttyデバイスでX端末エミュレータを実行する必要があることは意味がないことがすでにわかります。医師ttyでなければなりません。
しかし、端末エミュレータは、自分が使用する擬似端末装置の数値IDを選択できますか?原則として、カーネルはこれを受け入れることができますが、実際には新しい疑似端末を割り当てるためのカーネルインタフェースはそれをサポートしません。つまり、カーネルは自分で選択します。 (SysVモデルでは、という特殊なデバイスを開いて擬似端末が作成され、/dev/ptmx
使用可能な最小数の擬似端末装置が自動的に割り当てられます。)
しかし、割り当てられた疑似端末装置の番号を選択する必要があるのはなぜですか?カーネルは、利用可能になった未使用のカーネルを選択します。他のものを選びたい理由はありますか?
他の質問は次のとおりです。
/devの下にたくさんのttyファイルがあり、/dev/pts/の下にたくさんのptsファイルがあるのを見ました。なぜそんなにたくさんあるのか分からない。みんな中古ですか?
システムによって異なります。一部のシステムでは、使用しているかどうかにかかわらず、可能なすべての疑似端末装置が事前に/dev/pts
作成されています。/dev
他の装置では、装置ノードが擬似端末を使用する場合にのみ存在する。 Ubuntuを使うと言われましたが、後者のLinuxです。はい。表示されるすべてのデバイスノードは/dev/pts
現在使用中です。
しかし、一時的な訪問にはあまり便利ではありません。 socatを使用してttyまたはptyをクライアントに渡したいと思います。その後、クライアントは対応する pty または tty を使用して端末を起動できます。
擬似端末の基本側に接続したいsocat
他のソフトウェアがある場合は、それを特別にサポートするソフトウェアが必要です。しかし、あなたは幸運です。なぜならsocat
そうだからだ。たとえば、次のように実行すると:
socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1
他の場所からポート2222に接続すると、シェルを取得できます。安全面で非常に危険です!