Gibt es eine Möglichkeit, Terminalsitzungen nach einem Neustart aufrechtzuerhalten?

Gibt es eine Möglichkeit, Terminalsitzungen nach einem Neustart aufrechtzuerhalten?

OS X hat das. Im Idealfall möchte ich, dass der Neustart aus Sicht des Terminals so aussieht, als hätte er nie stattgefunden (ignorieren wir Remote-Sitzungen und gehen für den Moment davon aus, dass es keine Hintergrundprozesse gibt). Das heißt, ich möchte den Verlauf von stdin, stdout, stderr (also Scrollback) in jedem meiner Terminal-Tabs sehen.

HINWEIS: Hier geht es NICHT um den Bash-Verlauf. Hier geht es um die Aufrechterhaltung von Terminalsitzungen zwischen Neustarts.

Antwort1

Nein, zumindest in gnome-terminalund anderen VTE-basierten Emulatoren ist dies nicht implizit und bequem möglich.

(Sie können natürlich vor dem Neustart alle Ihre Registerkarten explizit durchgehen, „Alles auswählen“ auswählen und den Inhalt in Dateien kopieren und einfügen und diese Dateien nach dem Neustart mit einem Viewer anzeigen. Wenn ich Sie richtig verstehe, ist dies nicht das, wonach Sie suchen. Außerdem würden Farben und andere Formatierungen verloren gehen.)

VTE, das Terminalemulations-Widget dahinter gnome-terminalund viele andere Terminalemulatoren speichern den Großteil des Scrollback-Inhalts (allerdings nicht die neuesten Bits) /tmpstandardmäßig in temporären Dateien. Die wichtigsten Designentscheidungen, die verhindern, dass Sie das erreichen, wonach Sie suchen, sind:

  • Die Verknüpfung dieser Dateien wird direkt nach ihrer Erstellung aufgehoben. So werden sie automatisch entfernt (und der Speicherplatz freigegeben), selbst wenn der Terminalemulator aus irgendeinem Grund unsauber beendet wird. Um sie zu erhalten, sollten sie wieder mit dem Dateisystembaum verknüpft werden (ich weiß nicht, ob das möglich ist) oder in eine andere Datei kopiert werden (was bei einem großen Scrollback eine langsame Aktion ist, ganz zu schweigen von der ordnungsgemäßen Handhabung eines möglichen Speicherplatzmangels).

  • Die Dateien befinden sich unter /tmp, was bei vielen Distributionen bei einem Neustart gelöscht wird. Stattdessen sollte ein anderer, dauerhafter Speicherort gewählt werden, oder es ist eine Zusammenarbeit mit den Boot-Skripten erforderlich.

  • Diese Dateien sind verschlüsselt (ab VTEVersion 0.40), um das Datenschutzproblem von Datenlecks zu vermeiden, falls jemand Zugriff auf die Festplatte erhält. Der Verschlüsselungsschlüssel ist nur im gnome-terminalSpeicher von verfügbar. Damit diese Dateien bestehen bleiben, sollte entweder die Verschlüsselungsebene übersprungen werden (was die alten Datenschutzbedenken wieder aufkommen lässt) oder die Schlüssel sollten zumindest vorübergehend für die Dauer des Neustarts auf der Festplatte abgelegt werden (... äh, bis sich der Benutzer erneut anmeldet und gnome-terminalneu startet ... klingt nicht viel besser). Dies ist nur möglich, wenn Ihnen der Datenschutz egal ist oder wenn die Verschlüsselung des Dateisystems garantiert ist.

Darüber hinaus müssen noch weitere kleinere Probleme behoben werden, z. B. das Löschen unvollständiger Blöcke dieser Dateien, die die letzten Bits der Scrollback-Daten enthalten.

Ich hoffe, ich konnte einige der Designentscheidungen darlegen VTE, die verhindern, dass Sie das erreichen, was Sie suchen. Ich sehe nicht, wie Ihre Anfrage erfüllt werden könnte, während gleichzeitig die aktuellen Designziele beibehalten werden. Vielleicht gibt es einen anderen Terminalemulator, der das tut, was Sie suchen, vermutlich unter Verzicht auf einige der VTEFunktionen; ich weiß es nicht.

Antwort2

Ich schlage vor, dieses sehr nützliche screenTool zu verwenden. Es lohnt sich, es zu lernen. Ich wiederhole zusammenfassend eine Antwort, die ich auf eine andere Frage gegeben habe:

Sehen Sie in der .screenrc, dass Sie Standardfenster mit einem benutzerdefinierten Befehl starten können, sodass Sie Sitzungen mit verschiedenen .screenrc-Dateien wiederherstellen können, wenn Sie verschiedene Sitzungen wiederherstellen möchten. screen -t .... Sehen Siegnu.org Bildschirmhandbuch - Startdateien

Eine gute Möglichkeit, Terminalsitzungen dauerhaft zu halten, besteht darin, eine „Screen“-Sitzung auf dem Server auszuführen. Eine „Screen“-Sitzung bietet Ihnen mehrere Fenster auf diesem Server, in denen Sie bei anderen Computern oder was auch immer angemeldet sein können. Sie können mehrere „Screen“-Sitzungen auf dem Server ausführen. Sie können die Verbindung zu den benötigten Sitzungen trennen und wiederherstellen. „Screen“ ist eine altmodische Befehlszeilentastatur, aber es lohnt sich, sie zu lernen und damit herumzuspielen, um zu lernen, wie sie funktioniert. Sie hat einige große Vorteile:

  • einfach zu installieren, läuft auf jedem Unix (oder Cygwin), keine Grafiken erforderlich (außer Terminal-Textgrafiken)
  • ermöglicht dauerhafte Terminalsitzungen im Fenstermodus (solange der Server nicht neu gestartet wird)

* Bildschirm-Schnellstart *

RTFM:gnu.org Screen-Benutzerhandbuch

  • screen - Führen Sie screen aus, um einfach eine neue Sitzung zu erstellen
  • screen -ls - Listet laufende Bildschirmsitzungen auf
  • screen -r 20229.pts-2.bangor - erneut an Sitzung anhängen

Der* Das Bildschirm-ESCAPE-Zeichen ist standardmäßig Strg-a *es sei denn, irgendein verrückter Looper hat es in .screenrc geändert, z. B. „escape ^Zz“ für Leute, die keinen Wert auf die Hintergrundsteuerung von Prozessen legen. Um ein echtes Strg-a zum Terminal zu erhalten (gehe zum Zeilenanfang), wenn es auf dem Bildschirm läuft, drücken Sie einfach Strg-a Strg-a.

  • ESCAPE c - neues Bildschirmfenster erstellen
  • ESCAPE 0 (oder 1 2 3 4 5 6 7 8 9) – wechselt zu Fenster 0 (oder 1 2 . . )
  • ESCAPE p oder ESCAPE n - zum vorherigen oder nächsten Fenster wechseln
  • ESCAPE " - Fensterliste
  • ESCAPE h - zeigt die Bildschirmhilfe an

Hier in voller Länge zu einer anderen Frage habe ich ein Beispiel für eine Bildschirmhilfeseite, die Verwendung der Befehlszeile und ein Beispiel für .screenrc eingefügt:

Terminalemulator mit einer „Sitzung wiederherstellen“-Funktion wie Mac Terminal

verwandte Informationen