Nehmen wir also an, Sie starten Ihre Linux-Installation bis zum Desktop. Sie starten ein Gnome-Terminal / konsole / whatever, damit Sie ein tty haben, zu dem Sie Befehle eingeben können.
Nehmen wir nun an, ich stelle SSH in dieselbe Maschine. Es wird mich an eine andere Nummer binden, an die ich Befehle eingeben kann.
Angenommen, ich möchte mein tty von meinem ursprünglichen SSH auf das zuvor gestartete gnome-terminal "umstellen".
Grundsätzlich frage ich, ob es eine Möglichkeit gibt, dasselbe zu tun, screen -x
aber ohne Bildschirm?
Ich weiß, dass Sie einfach eine Ausgabe an das andere Tty senden können, indem Sie etwas in die / dev-Datei zurückschreiben, aber ich kenne keine Möglichkeit, die Inhalte des Tty anzuzeigen.
Irgendwelche Ideen?
terminal
gnu-screen
terminal-multiplexer
user488244
quelle
quelle
Antworten:
Vielleicht kann dieses Schema die Situation klären. Dies ist die übliche Einstellung:
Und es gibt keine Möglichkeit, neue
Process3
wie diese einzustecken :Der Bildschirm (und andere) weist ein Pseudo-Endgerät (wie xterm) zu und leitet es zu einem oder mehreren "realen" Endgeräten (physisch, virtuell oder emuliert) um:
Mit können
screen -x
Sie ein weiteres Terminal (xtermTerminal 3
) an die Bildschirmsitzung anschließen.Nein, Sie können nicht direkt über stdin / stdout mit Prozessen kommunizieren, die an ein anderes Terminal angeschlossen sind. Sie können dies über den Prozess, der dieses Terminal steuert, nur dann tun, wenn es sich zufällig um ein Pseudoterminal handelt und wenn dieser Prozess dafür vorgesehen ist (wie dies bei screen der Fall ist).
quelle
ptrace
. Dankptrace
, Programmen wieneercs
,retty
und so weiter kann es manchmal sein.stdin
,stdout
auf der rechten Seite des Schemas) direkt durch den Prozess Hijacking. Das Pure Böse!Das erneute Verbinden der Prozesse auf dem anderen Terminal mit Ihrem aktuellen Terminal ist ohne schmutzige Tricks nicht möglich. Es ist möglich, indem der Prozess gezwungen wird, bestimmte Systemaufrufe (mit
ptrace
) auszuführen . Dies führt dazu, dass einige Programme abstürzen. Es gibt verschiedene Tools , die dies tun, wieneercs
,retty
,cryopid
,reptyr
, ...; Siehe Wie kann ich einen laufenden Prozess deaktivieren und ihn einer neuen Bildschirmshell zuordnen? und verknüpfte Fragen.Ein anderes Problem besteht darin, die bereits auf dem anderen Terminal angezeigte Ausgabe abzurufen. Es gibt keine allgemein gültige Lösung: Sobald die Ausgabe gerendert wurde, speichert das Terminal sie möglicherweise nur als Bild. In der Praxis behalten alle X-Terminal-Emulatoren ihren Ausgabepuffer in Textform bei, damit Sie ihn kopieren und einfügen können. Wie diese Ausgabe abgerufen wird, hängt vom Terminalemulator ab. Die Grundidee besteht darin, die Auswahl des gesamten Scrollback-Puffers zu simulieren. Für eine Linux-Konsole wie z. B.
/dev/tty1
ist der Scrollback-Puffer leicht verfügbar als/dev/vcs1
(und/dev/vcsa1
mit Textattributen).Die einfache Antwort lautet: Wenn Sie die Verbindung zu einem Terminal von einem anderen Ort aus wiederherstellen möchten, verwenden Sie
screen
odertmux
.quelle