Haui's bytes

news, diary, journal, whatever

Articles

GNU screen

Was ist screen?

GNU screen ist ein Fenstermanager für textbasierte Eingabefenster. Er erlaubt es mit einem einzigen Zugang verschiedene virtuelle Konsolensitzungen zu erstellen und zu verwalten.

Wofür wird screen gebraucht?

Häufig wird screen dort verwendet, wo keine grafische Oberfläche vorhanden ist, z.B. auf Servern. So ermöglicht er es, über einen einzigen Zugang (ein Terminal, Terminalemulator) mehrere Programme zu verwalten. Typische Beispiele hierfür sind Texteditoren, Mail-, IM-, und IRC-Clients. Aber auch auf normalen Desktopsystemen bringt screen einige Vorteile mit sich, so ist es möglich Programme ohne sichtbares Fenster im Hintergrund laufen zu lassen, sich zwischendurch auszuloggen, den X-Server neuzustarten, und die Programme dann ganz einfach wieder in den Vordergrund zu holen.

Wie funktioniert’s?

Zunächst stellen wir sicher, dass screen installiert ist. Sollte das nicht der Fall sein, so können wir uns entweder vertrauensvoll an unseren Paketmanager wenden, oder die Sourcen von der o.g. Seite herunterladen und kompilieren. Ist das erledigt, starten wir screen. Hierfür gibt es zwei Möglichkeiten: Die erste ist ein einfaches Ausführen des Befehls screen in einem Terminal oder Terminalemulator wie der KDE-Konsole. Dann startet screen eine Sitzung mit der Standardshell. Die zweite Möglichkeit erlaubt es, ein Programm direkt in screen aufzurufen. Wollen wir beispielsweise vim in screen starten, so tippen wir screen vim. Soweit ist alles wie gewohnt und wir können das Programm ganz normal benutzen. *Ein kurzer Einschub - die Escapesequenz Da eine Möglichkeit benötigt wird, um Befehle, die der Steuerung von screen dienen von denen, die an die Programme die in screen laufen zu unterscheiden, existiert eine sog. Escapesequenz. Defaultmäßig ist dies bei screen die Tastenkombination Strg-a, diese müssen wir vor jedem Kommando, das für screen bestimmt ist, drücken.*

Weitere Sitzungen

Wir befinden uns wieder am Anfang in einer geöffneten screen-Sitzung. Nun genügt ein einfaches Strg-a c um ein neues Fenster mit der Standardshell zu erstellen (“create”). Auch in dieser können wir wie gewohnt arbeiten und Programme starten. Um direkt ein anderes Programm als die Shell im neuen Fenster zu öffnen, drücken wir Strg-a : und tippen dann screen Kommando. Wollen wir nun zurück zum ersten Fenster, so drücken wir Strg-a p (“previous”). In die andere Richtung, also “vorwärts” können wir natürlich auch gehen, dies geschieht mittels Strg-a n (“next”) bzw. Strg-a Leertaste. Übrigens: screen verwaltet die Fenster praktisch “kreisförmig”, d.h. ein Strg-a n im letzten Fenster schickt uns wieder zurück zum ersten. Da uns 2 Fenster aber nicht reichen, öffnen wir mit Strg-a c immer weitere Fenster und würden so recht schnell den Überblick verlieren. Glücklicherweise bietet screen eine Übersichtsseite mit allen geöffnete Fenstern, die wir uns mit Strg-a “ anzeigen lassen können. Dort lassen sich einzelne Fenster bequem mit Hilfe der Pfeiltasten und der Eingabetaste selektieren. Die Nummern vor den Einträgen erfüllen selbstverständlich auch einen Zweck - Strg-a Ziffer springt zum Fenster mit der entsprechen Nummer, also in unserem Falle beispielsweise Strg-a 1 zum zweiten Fenster, das wir geöffnet haben (die Nummerierung beginnt bei 0). Schließen lässt sich ein Fenster am einfachsten, indem man das darin laufende Programm beendet.

screen advanced

Was ist nun aber, wenn man die gesamte screen-Sitzung zwar nicht schließen, aber ebensowenig störend im Terminalfenster laufen lassen will? Abhilfe schafft hier das sog. “detachen” (ablösen) der Sitzung. Alles was wir dazu tun müssen, ist ein einfaches Strg-a d. Jetzt können wir uns problemlos ausloggen, während unsere Programme im Hintergrund weiterlaufen. Screen stört sich im Übrigen auch nicht daran, wenn wir das Konsolenfenster direkt schließen, ohne vorher die Sitzung zu detachen. Wenn wir nun in unserer screen-Sitzung weiterarbeiten wollen, so öffnen wir wieder ein Konsolenfenster und geben den Befehl screen -r ein. Dies “attached” die vorhandene Sitzung wieder. Diese Methode funktioniert jedoch nur, solange wir eine einzige Instanz von screen laufen haben. Sobald es mehrere sind, muss die gewünschte Sitzungs-ID mit angegeben werden. Eine Übersicht über alle laufenden screens bekommt man mittels screen -ls, die Ausgabe sieht dann z.B. so aus:

There are screens on:
 20057.pts-5.localhost (13.08.2008 22:58:47) (Detached)
 19639.pts-0.localhost (13.08.2008 22:17:56) (Attached)

Der komplette Befehl lautet in diesem Fall dann screen -r 20057.pts-5.localhost oder verkürzt screen -r 20057. Ein weiteres Feature ist das parallele Anzeigen der gleichen Sitzung in verschiedenen Terminals. Dies kann nützlich sein, wenn man das gleiche Programm von verschieden Rechnern aus verwenden will. Bewerkstelligt wird das Ganze mit der Option -x, also beispielsweise screen -x 19639.pts-0.localhost. Noch “attachte” screens lassen sich übrigens nicht “reattachen” - wenn man sich darüber keine Gedanken machen will, so empfiehlt sich generell die Verwendung von screen -rx.

Zum Ende noch ein paar Tipps:

  • Strg-a ? zeigt eine Übersichtsseite mit den wichtigsten Befehlen an und dürfte sich gerade am Anfang als nützlich erweisen.
  • Die manpage von screen ist sehr ausführlich und gibt einen sehr viel tiefen Einblick als diese Kurzanleitung, so wird dort auch auf Themen eingegangen, die ich hier gar nicht angesprochen habe (~/.screenrc u.ä.).
  • Im WWW finden sich jede Menge weiterführende Dokumente, wie z.B. diese Anleitung aus dem Gentoo-Wik.

Fehler gefunden? ->