Ist es möglich, ein Terminal mit dem angegebenen tty / pty zu öffnen?


9

(Ich benutze Ubuntu.) Nach meinem Verständnis ist tty nur eine Art Port. Sie geben etwas ein und es sollte etwas ausgeben. Und ein Terminal (Emulator) ist eine Software, die diese Ein- und Ausgaben handhabt. Das Terminal kann buchstäblich auswählen, an welchen Port eine Verbindung hergestellt werden soll.

Ich habe viele tty-Dateien in / dev und viele pts-Dateien in / dev / pts / gesehen. Ich weiß nicht, warum es so viele davon gibt. Werden sie alle benutzt?

Wenn nicht, kann ich ein Terminal mit der angegebenen Pty starten?

z.B gnome-terminal /dev/pts/47

Aktualisieren

Der Grund dafür ist, dass ich ein Remote-Terminal haben möchte. Ich weiß, dass der geeignete Ansatz darin besteht, ssh oder telnet zu verwenden.

Für den vorübergehenden Zugriff ist dies jedoch nicht sehr praktisch. Ich möchte socat verwenden, um ein tty oder pty an den Kunden weiterzuleiten. Dann kann der Client ein Terminal mit dieser Pty oder Tty starten.

Der folgende Code funktioniert einwandfrei. Es wird auf dem Client ausgeführt und auf der Serverseite bekomme ich "Hallo".

echo "hello" > /home/myhomefoler/pty_created_by_socat

Antworten:


9

Unter UNIX wird ein tty (wie viele andere Dinge auch) als Datei angezeigt. Auf das tty-Gerät geschriebene Daten werden an das Terminal gesendet, und vom Terminal kommende Daten können auf dem tty gelesen werden.

Wenn es sich bei dem tty um eine serielle Hardware-Schnittstelle handelt, werden die darauf geschriebenen Daten auf dem Kabel gesendet und die vom Kabel kommenden Daten werden auf dem tty angezeigt.

Wenn es sich bei dem tty um die Videokonsole eines Computers handelt, werden die darauf geschriebenen Daten auf dem Bildschirm angezeigt und die von der Tastatur kommenden Daten werden auf dem tty angezeigt.

Wenn es sich bei dem tty um ein Pseudo-tty (virtuelles Terminal) handelt, das mit einem X-Terminal-Emulator verbunden ist, z. B. werden die gnome-terminaldarauf geschriebenen Daten an die Emulator-Software des X-Terminals übermittelt und wiederum in einem Fenster angezeigt, während in dieses Fenster eingegebene Daten verfügbar sind zum Lesen auf dem virtuellen Terminal. Die Software soll mit dem "Master" -Ende des Pseudo-Terminals verbunden sein. Reale Terminals haben kein "Master" -Ende, da sich hinter ihnen ein reales Gerät befindet (wie die serielle Schnittstelle), kein virtuelles Gerät, das von einer Software implementiert wird.

Sie sehen also bereits, dass es keinen Sinn macht, einen X-Terminal-Emulator zu bitten, auf einem beliebigen tty-Gerät wie /dev/ttyS0(einer echten seriellen Schnittstelle unter Linux) zu arbeiten. Es muss eine Pseudo-Tty sein.

Aber kann der Terminalemulator die numerische ID des verwendeten Pseudo-Endgeräts auswählen? Im Prinzip wäre es einem Kernel möglich, dies zuzulassen, aber tatsächlich unterstützt die Kernel-Schnittstelle zum Zuweisen eines neuen Pseudo-Terminals dies nicht: Der Kernel trifft seine eigene Wahl. (Im SysV-Modell werden Pesudo-Terminals durch Öffnen eines speziellen Geräts namens aufgerufen /dev/ptmxund das Pseudo-Terminal-Gerät mit der niedrigsten Nummer wird automatisch zugewiesen.)

Aber: Warum sollten Sie die Nummer des Pseudo-Endgeräts auswählen müssen, das zugewiesen wird? Der Kernel wählt einen unbenutzten aus, der garantiert verfügbar und verwendbar ist. Haben Sie einen Grund, warum Sie es vorziehen würden, wenn Sie einen anderen wählen würden?

Zu Ihrer anderen Frage:

Ich habe viele tty-Dateien in / dev und viele pts-Dateien in / dev / pts / gesehen. Ich weiß nicht, warum es so viele davon gibt. Werden sie alle benutzt?

Das hängt vom System ab. Auf einigen Systemen sind alle möglichen Pseudo-Endgeräte in /dev/ptsoder vorab erstellt /dev, unabhängig davon, ob sie verwendet werden oder nicht. Auf anderen existieren die Geräteknoten nur, wenn das Pseudo-Terminal verwendet wird. Sie sagen, Sie verwenden Ununbu, das Linux verwendet, das der letztere Typ ist. Ja, alle Geräteknoten, die Sie sehen, /dev/ptswerden derzeit verwendet.

Für den vorübergehenden Zugriff ist dies jedoch nicht sehr praktisch. Ich möchte socat verwenden, um ein tty oder pty an den Kunden weiterzuleiten. Dann kann der Client ein Terminal mit dieser Pty oder Tty starten.

Wenn Sie möchten, dass socateine andere Software eine Verbindung zum Master-Ende eines Pseudo-Terminals herstellt, muss diese Software dies speziell unterstützen. Aber du hast Glück, weil socates so ist. Zum Beispiel, wenn ich laufe:

socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1

Ich kann eine Shell erhalten, indem ich von irgendwo anders eine Verbindung zu Port 2222 herstelle. Aus Sicherheitsgründen sehr gefährlich !!!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.