Welche Aufgaben hat jede Pseudo-Terminal-Komponente (PTY) (Software, Master-Seite, Slave-Seite)?

59

Ich versuche herauszufinden, wie ein tty funktioniert 1 (der Workflow und die Verantwortlichkeiten der einzelnen Elemente). Ich habe einige interessante Artikel darüber gelesen, aber es gibt immer noch einige unscharfe Bereiche.

Folgendes verstehe ich bisher:

  • Das emulierte Terminal führt verschiedene Systemaufrufe zum /dev/ptmxMasterteil des Pseudoterminals durch.
  • Der Masterteil des Pseudoterminals /dev/pts/[0-N]weist eine Datei zu , die der veralteten seriellen Schnittstelle entspricht, und "hängt" ein Slave-Pseudoterminal daran an.
  • Das Slave-Pseudoterminal speichert Informationen wie Sitzungs-ID, Vordergrundjob und Bildschirmgröße.

Hier sind meine Fragen:

  1. Hat ptmx einen anderen Zweck als die Zuweisung des Slave-Teils? Bietet es irgendeine Art von "Intelligenz" , oder verfügt das emulierte Terminal (z. B. xterm) über die gesamte Intelligenz, um sich wie ein Terminal zu verhalten?
  2. Warum muss xterm mit dem Master-Teil interagieren, da es nur die Standardausgabe und die Standardausgabe des Slave-Teils weiterleitet? Warum kann es nicht direkt aus der pts-Datei schreiben und lesen ?
  3. Ist eine Sitzungs-ID immer an eine Pkt-Datei angehängt und umgekehrt? Könnte ich einen ps-Befehl eingeben und 2 sessionId für das gleiche / dev / pts / X finden ?
  4. Welche weiteren Informationen ptsspeichert der Shop? Aktualisiert Xterm alle Felder selbst, oder fügt das ptm"Intelligenz" hinzu?

1. Ich stütze mich auf das von Linus Akesson entmystifizierte TTY und den von Andries Brouwer veröffentlichten Linux-Kernel sowie auf mehrere andere Fragen auf diesen Websites

Pierre-Jean
quelle

Antworten:

58

Terminal-Emulatoren

Die Masterseite ersetzt die Leitung (das TX / RX-Kabelpaar), die zum Terminal führt.

Das Terminal zeigt die Zeichen an, die es auf einer der Leitungen empfängt (einige davon sind Steuerzeichen und veranlassen es, den Cursor zu bewegen, die Farbe zu ändern ...), und sendet die Zeichen, die den von Ihnen eingegebenen Tasten entsprechen, auf eine andere Leitung.

Terminal-Emulatoren wie xterm unterscheiden sich nicht, außer dass sie Zeichen auf der Masterseite lesen und schreiben, anstatt Zeichen auf Drähten zu senden und zu empfangen. Sobald sie das Slave-Terminal erzeugt haben und Ihre Shell darauf gestartet haben, berühren sie das nicht mehr. Zusätzlich zur Emulation des Adernpaares kann xterm auch einige der Liniendisziplin-Eigenschaften über diesen Dateideskriptor zur Masterseite ändern. Beispielsweise können sie die Größenattribute aktualisieren, sodass ein SIGWINCH an die Anwendungen gesendet wird, die mit dem Slave-Pty interagieren, um sie über eine geänderte Größe zu benachrichtigen.

Ansonsten ist im Terminal / Terminal-Emulator wenig Intelligenz vorhanden .

Was Sie auf ein Endgerät (wie den Pty-Slave) schreiben, ist das, was Sie dort anzeigen, was Sie daraus lesen, ist das, was Sie dort eingegeben haben. Daher ist es für den Terminal-Emulator nicht sinnvoll, darauf zu lesen oder zu schreiben . Sie sind die am anderen Ende.


Die tty line Disziplin

Ein Großteil der Intelligenz liegt in der Disziplin der Tty-Line . Die Leitungsdisziplin ist ein Softwaremodul (im Treiber, im Kernel), das auf ein serielles / pty-Gerät aufgeschoben wird, das sich zwischen diesem Gerät und der Leitung / Leitung befindet (die Masterseite für ein pty).

Eine serielle Leitung kann am anderen Ende ein Terminal haben, aber auch eine Maus oder einen anderen Computer für die Vernetzung. Sie können beispielsweise eine SLIP-Leitungsdisziplin anschließen, um eine Netzwerkschnittstelle über ein serielles Gerät (oder ein Pty-Gerät) zu legen, oder Sie können eine Tty- Leitungsdisziplin einrichten . Die tty-Zeilendisziplin ist die Standard-Zeilendisziplin, zumindest unter Linux für serielle und pty-Geräte. Unter Linux können Sie die Liniendisziplin mit ändern ldattach.

Sie können den Effekt des Deaktivierens der tty line-Disziplin durch Ausgabe stty raw -echofeststellen (beachten Sie, dass die Bash-Eingabeaufforderung oder andere interaktive Anwendungen wie vidas Terminal auf den genauen Modus eingestellt sind, den sie benötigen, sodass Sie eine dumme Anwendung verwenden möchten, die dies gerne caterlebt). Dann wird alles, was auf das Slave-Endgerät geschrieben wird, sofort auf die Masterseite gesendet, damit xterm lesen kann, und jedes von xterm auf die Masterseite geschriebene Zeichen kann sofort vom Slave-Gerät gelesen werden.

In der Leitungsdisziplin ist der endgeräteinterne Leitungseditor implementiert. Wenn Sie beispielsweise stty icanon echo(wie in der Standardeinstellung) aFolgendes eingeben, schreibt xterm aan den Master, und die Zeilendisziplin gibt es zurück (stellt ein azum Lesen xtermzur Verfügung, um es anzuzeigen), stellt jedoch nichts zum Lesen auf der Slave-Seite zur Verfügung . Wenn Sie dann Backspace eingeben, sendet xterm ein ^?oder ^H-Zeichen, die Zeilendisziplin (als die ^?oder ^Hentspricht der eraseZeilendisziplin-Einstellung) sendet zurück auf den Master ein ^H, spaceund ^Hum das xtermzu löschenaSie haben gerade auf dem Bildschirm getippt und immer noch nichts von der Slave-Seite an die Anwendung gesendet, sondern nur den internen Zeileneditor-Puffer aktualisiert, um die azuvor getippten Einträge zu entfernen .

Wenn Sie dann die Eingabetaste drücken, sendet xterm ^M(CR), das die Zeilendisziplin bei der Eingabe in ein ^ J (LF) konvertiert, und sendet, was Sie bisher zum Lesen auf der Slave-Seite eingegeben haben (eine Anwendung, die auf liest /dev/pts/x, erhält was Sie haben die LF eingegeben, aber nicht die, aseit Sie sie gelöscht haben. Auf der Masterseite werden CR und LF gesendet, um den Cursor in die nächste Zeile und zum Anfang des Bildschirms zu bewegen.

Die Liniendisziplin ist auch dafür verantwortlich , das SIGINTSignal an die Vordergrundprozessgruppe des Terminals zu senden, wenn es ein ^CZeichen auf der Masterseite usw. empfängt .

Viele interaktive Terminalanwendungen deaktivieren die meisten Funktionen dieser Zeilendisziplin, um sie selbst zu implementieren. Beachten Sie jedoch in jedem Fall, dass das Terminal ( xterm) wenig damit zu tun hat (es sei denn, Sie zeigen an, was angezeigt werden soll).

Und es kann nur eine Sitzung pro Prozess und pro Endgerät geben. An eine Sitzung kann ein steuerndes Terminal angeschlossen sein, muss es aber nicht (alle Sitzungen beginnen ohne Terminal, bis sie eines öffnen). Öffnen xtermSie in dem Prozess, in dem die Shell ausgeführt werden soll, in der Regel eine neue Sitzung (und trennen Sie sich daher von dem Terminal, von dem aus Sie gestartet haben xterm), /dev/pts/xdie neu erstellte Sitzung, indem Sie dieses Endgerät an die neue Sitzung anschließen. Anschließend wird Ihre Shell in diesem Prozess ausgeführt, sodass Ihre Shell zum Sitzungsleiter wird. Ihre Shell oder eine beliebige interaktive Shell in dieser Sitzung wird normalerweise mit Prozessgruppen und jonglieren tcsetpgrp(), um die Vordergrund- und Hintergrundjobs für dieses Terminal festzulegen.

In Bezug auf die Informationen, die von einem Endgerät mit einer Tty-Disziplin (seriell oder pty) gespeichert werden , sttyzeigt der Befehl in der Regel diese Informationen an und ändert sie. Konfiguration aller Disziplinen: Terminal-Bildschirmgröße, Lokal, Eingabe-Ausgabe-Flags, Einstellungen für Sonderzeichen (wie ^ C, ^ Z ...), Eingabe- und Ausgabegeschwindigkeit (nicht relevant für ptys). Das entspricht den tcgetattr()/ tcsetattr()Funktionen, die unter Linux den TCGETS/ TCSETSioctls zugeordnet sind, und TIOCGWINSZ/ TIOCSWINSZfür die Bildschirmgröße. Sie können argumentieren, dass die aktuelle Vordergrundprozessgruppe eine andere im Endgerät gespeicherte Information ( tcsetpgrp()/ tcgetpgrp(), TIOC{G,S}PGRPioctls) oder der aktuelle Eingabe- oder Ausgabepuffer ist.

Beachten Sie, dass die im Endgerät gespeicherten Informationen zur Bildschirmgröße möglicherweise nicht der Realität entsprechen. Der Terminal-Emulator legt dies normalerweise fest (über das gleiche ioctl in der Master-Größe), wenn die Fenstergröße geändert wird. Es kann jedoch zu Synchronisationsstörungen kommen, wenn eine Anwendung das ioctl auf der Slave-Seite aufruft oder wenn die Größenänderung nicht übertragen wird (falls zutreffend) eine SSH - Verbindung , die durch eine anderen PTY hervorgebracht impliziert , sshdwenn sshdie ignoriert SIGWINCHzum Beispiel). Einige Terminals können auch über Escape-Sequenzen nach ihrer Größe abgefragt werden, sodass eine Anwendung dies abfragen und die Leitungsdisziplin mit diesen Informationen aktualisieren kann.

Für weitere Informationen können Sie einen Blick auf die haben termiosund tty_ioctlman - Seiten auf Debian zum Beispiel.

Um mit anderen Liniendisziplinen zu spielen:

  1. Emulieren Sie eine Maus mit einem Pseudo-Terminal:

    socat pty,link=mouse fifo:fifo
    sudo inputattach -msc mouse # sets the MOUSE line discipline and specifies protocol
    xinput list # see the new mouse there
    exec 3<> fifo
    printf '\207\12\0' >&3 # moves the cursor 10 pixels to the right
    

    Oben wird die Masterseite des Pty durch socat auf einer Named Pipe ( fifo) abgeschlossen. Wir verbinden dieses FIFO mit einem Prozess (der Shell), der 0x87 0x0a 0x00 schreibt, was im Maussystemprotokoll bedeutet no button pressed, delta(x,y) = (10,0). Hier emulieren wir (die Shell) kein Terminal, sondern eine Maus. Die 3 Bytes, die wir senden, dürfen nicht von einer Anwendung des Terminalgeräts gelesen (möglicherweise transformiert) werden ( mousedarüber befindet sich ein Symlink, der von socateinem /dev/pts/xGerät erstellt wurde). , sind aber als Mauseingabeereignis zu interpretieren.

  2. Erstellen Sie eine SLIP-Schnittstelle:

    # on hostA
    socat tcp-listen:12345,reuseaddr pty,link=interface
    # after connection from hostB:
    sudo ldattach SLIP interface
    ifconfig -a # see the new interface there
    sudo ifconfig sl0 192.168.123.1/24
    
    # on hostB
    socat -v -x pty,link=interface tcp:hostA:12345
    sudo ldattach SLIP interface
    sudo ifconfig sl0 192.168.123.2/24
    ping 192.168.123.1 # see the packets on socat output
    

    Oben wird die serielle Verbindung socatals TCP-Socket zwischen HostA und HostB emuliert. Die SLIP-Leitungsdisziplin interpretiert die über diese virtuelle Leitung ausgetauschten Bytes als SLIP-gekapselte IP-Pakete zur Übermittlung an die sl0Schnittstelle.

Stéphane Chazelas
quelle
1
Das ist die beste Antwort. Ich markiere es als richtig und stimme dem zu. Können Sie den letzten Teil über Informationen hinzufügen, die pts speichert? Entsprechend dieser Seite (Kapitel Konfiguration des TTY-Geräts) speichern die Punkte Werte wie Anzahl der Zeilen und Anzahl der Zeilen. Sind sie irgendwelche anderen Informationen, die es speichert?
Pierre-Jean,
@ Pierre-Jean, hinzugefügt mehr Infos.
Stéphane Chazelas
Obwohl Ihre Antwort nicht zufriedenstellend ist, wäre es interessant, ein einfacheres Beispiel dafür zu sehen, wie Sie tatsächlich ein / dev / pts / M erstellen. Ich habe versucht, mit cat /dev/ptmx &which ein neues Pty zu öffnen, aber es gibt dann keinen Prozess, den ich damit verknüpfen kann. Wie würden Sie es verwenden? Zweitens habe ich es mit versucht echo "1" >/dev/ptmx, aber das hat nichts gebracht ... Warum interessiert mich das? Beacause oft , wenn man eine Verbindung der Ferne über ssh(zum Beispiel), erhalten Sie PTY allocation request failedoder No controlling tty: open /dev/ttyFehler, die Auftragssteuerung verhindert. Es wäre schön, diese besser zu verstehen.
not2qubit
@ user1147688, wie man eine Pty erstellt, wäre eine andere Frage. Dies sind bereits zu viele Fragen gleichzeitig. ptyEinzelheiten finden Sie auf Ihrer Manpage.
Stéphane Chazelas
@ StéphaneChazelas Kleine Erläuterungen: 1. Sie sagen also, dass der Fluss wie physical term---- tty---- bashauf Terminals und pty(m)---- tty---- pty(s)---- bashauf Terminalemulatoren ist? War die ttyDisziplin verantwortlich für Echo zu Zeichen auf physischen Terminal? 2. Ist es das Terminal-Emulator-Programm, das eine Verbindung zur Tastatur / zum Bildschirm herstellt, um die Eingabe zu verwalten? 3. Nach meinem Verständnis haben Sie gesagt, dass die Zeilenpufferung von Bash-Befehlen / allen Terminal-Eingaben durch ttyZeilendisziplin anstelle von E / A-Puffern von CI / O-Funktionen erfolgt. Ist das richtig?
Forumulator
29

Bearbeiten: Seit dieser Antwort habe ich einen speziellen Artikel in meinem Blog geschrieben, für Leute, die sich für mehr Details interessieren würden.


Nach vielem Lesen habe ich das verstanden.

  • Hat ptmx einen anderen Zweck als die Zuweisung des Slave-Teils? Bietet es irgendeine Art von "Intelligenz", oder verfügt das emulierte Terminal (z. B. xterm) über die gesamte Intelligenz, um sich wie ein Terminal zu verhalten?

    /dev/ptmxordnet den Slave-Teil nicht zu : Er ordnet den "Pseudo-Terminal-Master-Teil" zu. / dev / ptmx ist kein Master-Pseudo-Terminal : Es ist ein Pseudo-Terminal-Master-Multiplexer . Es wurde mit dem PTY-Standard Unix98 erstellt, um Race-Bedingungen bei der Zuweisung des Master-Pseudoterminals ( Quelle ) zu vermeiden .

    Der Masterteil (ptm) des Pseudoterminals ist im Dateisystem nicht dargestellt. Es wird durch einen Dateideskriptor dargestellt.

    Der Slave - Teil (pts) wird durch eine Datei repräsentiert in /dev/pts/Ndenen Neine Zahl ist .

    Das PTS wird erhalten aus dem PTM durch den aufeinanderfolgenden Anruf von grandpt, unlockpt, ptsname. ( Quelle )

    Das ptm ersetzt den AUR-Treiber für die Kommunikation mit dem Gerät und die Line Edition. Es emuliert also in keiner Weise ein Terminal, sondern bietet die Funktion der Zeilenbearbeitung und eine Möglichkeit zur Visualisierung und Kommunikation mit pts. ( Quelle )

    Hier ist ein Diagramm eines TTY, der an ein Hardwaregerät angeschlossen war TTY-Kommunikation mit AUR

    Und hier ist ein Diagramm eines tty, das mit einem ptm verbunden ist TTY-Kommunikation mit PTM

    Die ptm-Datei verarbeitet andere Ioctl-Argumente (ISPTM, UNLKPT, TIOCREMOTE, TIOCSIGNAL) als die pts.

  • Warum muss xterm mit dem Masterteil interagieren, da es nur die Standardausgabe und die Standardausgabe des Slave-Teils weiterleitet? Warum kann es nicht direkt aus der pts-Datei schreiben und lesen?

    Prozesse interagieren mit Geräten durch Aktionen, die an einer virtuellen Datei ausgeführt werden (Lesen, Schreiben, Ioctl ..). Die Datei selbst existiert nicht und der Treiber verwendet die Datei, um Aktionen auszulösen, wenn Lese- oder Schreibmethoden aufgerufen werden. (Informationen zu Treibern finden Sie im Anhang)

    Ein TTY definiert einen präzisen Weg, um mit ihm zu interagieren. Prozesse schreiben und lesen vom Gerät und erwarten dasselbe Verhalten, unabhängig davon, welche Art von TTY implementiert ist.

    • Die Lesefunktion wird von Prozessen zum Lesen von Einträgen aus dem Terminal verwendet
    • Die Schreibfunktion wird von Prozessen verwendet, um Ausgaben an das Terminal zu senden

    Die Punkte verhalten sich wie ein TTY-Treiber. Die Lese- und Schreibmethode wird verwendet, um das Verhalten des TTY-Treibers zu implementieren. Da es kein echtes Gerät zum Senden der Daten gibt, wird ein Stream-Paar erstellt, und der ptm implementiert eine Lesefunktion zum Lesen der von pts an den Stream gesendeten Daten und eine Schreibfunktion zum Senden von Daten an den verfügbaren Stream wann die pts es lesen werden.

    Denken Sie daran, dass die Datei, die ein Gerät darstellt, keine klassische Datei ist. Wenn Sie sehen xtermmöchten, was in die Datei geschrieben wurde, können Sie sie nicht einfach öffnen und lesen, da diese Funktionen hier ein völlig anderes Verhalten haben.

  • Hat eine Sitzungs-ID immer eine Pkt-Datei angehängt und umgekehrt? Könnte ich einen ps-Befehl eingeben und 2 sessionId für das gleiche / dev / pts / X finden?

    Ich glaube nicht, die Sitzungs-ID wird durch den ersten Prozess definiert, der die PTS anfügt (Bash im Allgemeinen), und ich sehe keine Möglichkeit, eine weitere Sitzung zu erstellen und an dieselben PTS anzuhängen. Vielleicht könnte so ein Tool socatdas tun?

  • Welche anderen Informationen speichert der Punkt? Aktualisiert Xterm alle Felder selbst oder fügt das ptm etwas "Intelligenz" hinzu?

    Die Punkte speichern 2 Kategorien von Informationen in Bezug auf das Terminal, mit dem sie kommunizieren: das Terminfound das Termcap. In der Regel basieren viele Terminalemulatoren auf einer Bibliothek, die Termcap-Informationen für sie verwaltet (die beispielsweise alle Funktionswerte für die Emulation eines VTX100 bereitstellen). Ein Beispiel für eine solche Bibliothek ist libvte . Bearbeiten (sieheStephane Chazelas Kommentar): Die Terminalfähigkeiten werden nicht von den Pkt gespeichert.

Nebengebäude

Pierre-Jean
quelle
termcap und terminfo sind Datenbanken über Terminal- oder Terminalemulatorfunktionen und haben nichts mit tty- oder pty-Geräten zu tun.
Stéphane Chazelas
Ok, ich bearbeite meine Antwort. Danke für den Kommentar. Können Sie diese Informationen zu Pkt in Ihre Antwort aufnehmen, wenn Sie sie kennen (anscheinend speichert Pkt zum Beispiel die Bildschirmgröße)?
Pierre-Jean
6
Das sind schöne Bilder. Mit welcher Software haben Sie sie erstellt?
Gilles 'SO - hör auf böse zu sein'
5
@ Gilles Danke. Ich habe sie mit Inkscape gemacht , einem Open-Source-Editor für Vektorgrafiken. Es ist vielleicht nicht die effizienteste Art, diese Art von Grafiken zu erstellen , aber wenn Sie interessiert sind, habe ich einen Artikel darüber geschrieben, wie man diese Art von isometrischen Zeichnungen erstellt.
Pierre-Jean
Ich glaube nicht, dass Sie jemals zwei Sitzungen an einem steuernden Terminal durchführen oder einer Sitzung mehr als ein steuerndes Terminal
zuweisen können
9

Hier ist ein Schema, das ich vor einiger Zeit gemacht habe, wie es sshdfunktioniert. Es geht nicht um die Funktionsweise von Liniendisziplin und anderen Dingen, sondern um die Darstellung, wer mit was interagiert:

Bildbeschreibung hier eingeben

Boris Burkov
quelle
Vielen Dank dafür. Ich habe 2 Tage damit verbracht, es herauszufinden. Ich frage mich nur, was passiert, wenn keine Pty instanziiert wird. stdin existiert zwar nicht, aber wohin werden stdout und stderr geschrieben?
kleiner Kerl
@emmasculateur froh, dass es dir geholfen hat. Entschuldigung, ich kann nicht verstehen, was Sie mit "wenn keine Pty instanziiert wird" meinen. Können Sie ein Beispiel geben, wenn pty nicht instanziiert ist?
Boris Burkov
1
Mit "no pty is instantiated" meine ich, wenn Sie ssh mit ausführen -T, was der Mann sagt, dass es die Zuweisung von Pseudoterminals deaktiviert. zB: ssh -T emasculateur@localhost "sleep 10" dann ps aux|grep sleepzeigt dies: emasculateur 21826 0.0 0.0 23032 3728 ? Ss 02:49 0:00 zsh -c sleep 10 In diesem Fall wo schreibt bash stdoutund stderr? Ich hoffe meine Frage macht Sinn.
kleiner Kerl
@emmasculateur hm, das ist eine gute Frage, macht Sinn, ich habe nur früher nicht daran gedacht. Auf diese Weise starten Sie Ihren Prozess vermutlich als Daemon auf einem Remotecomputer ohne zugeordnetes Terminal. Ich vermute, dass die Standardeingabe / -ausgabe / -fehler /dev/nullfür einen normalen Daemon nur nach Wunsch funktionieren, aber nicht sicher sind. Siehe auch: serverfault.com/questions/593399/…
Boris Burkov
@emmasculateur Ich bin auch auf einen anderen Fall gestoßen als Ihren: Wenn Ihr Prozess früher ein Terminal hatte, dieses jedoch geschlossen war, erhielt der Prozess beim Lese- / Schreibversuch auf stdout / stdin SIGHUP vom Kernel. Dadurch werden häufig die Jobs abgebrochen, die über ssh ohne nohupoder screen/ gestartet wurden tmux.
Boris Burkov
0

man pts sagt:

Die Datei / dev / ptmx ist eine Zeichendatei mit der Hauptnummer 5 und der Nebennummer 2, normalerweise im Modus 0666 und der Gruppe owner.group von root.root. Es wird verwendet, um ein Pseudo-Terminal-Master- und Slave-Paar zu erstellen.

Wenn ein Prozess / dev / ptmx öffnet, erhält er einen Dateideskriptor für einen Pseudoterminal-Master (PTM) und ein Pseudoterminal-Slave-Gerät (PTS) wird im Verzeichnis / dev / pts erstellt. Jeder Dateideskriptor, der durch Öffnen von / dev / ptmx abgerufen wird, ist ein unabhängiger PTM mit einem eigenen zugeordneten PTS, dessen Pfad ermittelt werden kann, indem der Deskriptor an ptsname (3) übergeben wird.

Bevor Sie den Pseudo-Terminal-Slave öffnen, müssen Sie den Dateideskriptor des Masters an grantpt (3) und unlockpt (3) übergeben.

Sobald sowohl der Pseudo-Terminal-Master als auch der Slave geöffnet sind, stellt der Slave den Prozessen eine Schnittstelle zur Verfügung, die mit der eines realen Terminals identisch ist.

In den Slave geschriebene Daten werden auf dem Master-Deskriptor als Eingabe dargestellt. In den Master geschriebene Daten werden dem Slave als Eingabe präsentiert.

In der Praxis werden Pseudo-Terminals zum Implementieren von Terminalemulatoren wie xterm (1) verwendet, bei denen vom Pseudo-Terminal-Master gelesene Daten von der Anwendung auf die gleiche Weise interpretiert werden, wie ein reales Terminal die Daten interpretieren würde, und zum Implementieren von Remote -login-Programme wie sshd (8), bei denen vom Pseudo-Terminal-Master gelesene Daten über das Netzwerk an ein Client-Programm gesendet werden, das mit einem Terminal oder Terminal-Emulator verbunden ist.

Pseudo-Terminals können auch zum Senden von Eingaben an Programme verwendet werden, die normalerweise keine Eingaben von Pipes lesen (z. B. su (8) und passwd (8)).

Über /dev/pts/X indexing:

Jedes X ist eine Sitzung, die Sie öffnen, also müssen die Slaves indizieren.

Über TeteType (/dev/ttyN):

Es ist eine echte Konsole, die von Ihrem Boot-System generiert wurde, z sysV.

Über den Grund, warum ein Slave einen Master installiert hat: http://commons.wikimedia.org/wiki/File:Termios-script-diagram.png

Persischer Golf
quelle
Es tut mir leid, aber Sie haben nicht auf die Fragen geantwortet. Ich habe die Manpage bereits gelesen und sehe dieses Diagramm, aber das Verhalten war nicht klar. Können Sie, wie illuminÉ vorschlägt, Ihre Antwort entsprechend den Fragen erweitern?
Pierre-Jean
ENTSCHULDIGUNG FÜR
SPÄT
Um das Pseudo-TTY-Subsystem zu verwenden, muss ein Knoten für den master-seitigen Treiber / dev / ptmx und eine Anzahl von N Slave-Treibern (N wird bei der Installation festgelegt) installiert werden. Die Namen der Slave-Geräte lauten / dev / pts / M, wobei M die Werte 0 bis N-1 hat. Ein Benutzer greift auf ein Pseudo-TTY-Gerät über das Master-Gerät (mit der Bezeichnung ptm) zu, auf das wiederum über den Klontreiber zugegriffen wird. Das Master-Gerät ist als Klon-Gerät eingerichtet, dessen Hauptgerätenummer für das Klon-Gerät und dessen Hauptgerät gilt Die untergeordnete Gerätenummer ist die Hauptnummer für den PTM-Treiber.
PersianGulf
ja ich lese man pan page ....!
PersianGulf