Springe zu: Hauptnavigation, Themennavigation, Seiteninhalt, Spezielle Seiten

Mehrere Programme in einem Terminal mit Screen verwalten

In diesem Artikel gebe ich eine Einführung in das Programm screen. Mit diesem Tool kann man in einem Terminal mehrere Fenster mit jeweils eigenen Programmen öffnen. Eine Screen Sitzung kann unterbrochen und zu einem späteren zeitpunkt fortgesetzt werden. Außerdem können einem andere Benutzer im Mehrbenutzermodus über die Schulter schauen und gleichzeitig mit den geöffneten Programmen arbeiten.

Screen installieren

Die Installation von screen gestaltet sich einfach, da man nur das gleichnamige Paket screen installieren braucht: aptitude install screen

Scren starten

Wenn man screen ohne die Angabe weiterer Parameter aufruft, erscheint zunächst ein Startbildschirm, den man mit der Leer- oder Eingabetaste verlassen kann. Nun wird eine neue Sitzung gestartet und eine Shell geladen. Man bemerkt also auf den ersten Blick keinen Unterschied zur normalen Arbeit auf der Konsole. Ein paar gibt es allerdings: Wenn man am Zeilenanfang steht und die Rücktaste betätigt, ist kein kurzer Piepton zu hören, sondern es wird ein Statustext am unteren Bildschirmrand ausgegeben. Außerdem kann die Tastenkombination Strg+a nicht verwendet werden um zum Zeilenanfang zu springen. Diese Kombination leitet nämlich screeninterne Kommandos ein, wie später beschrieben wird.

Hier ein par Optionen, mit denen screen aufgerufen werden kann:

-c Datei
Es wird nicht die Konfigurationsatei .screenrc aus dem Homeverzeichnis, sondern die angegebene Datei verwendet.
-d [pid.sessionname] oder -D [pid.sessionname]
Eine bereits laufende Screensitzung wird in den HIntergrund geschickt. Die Option -D legt fest, dass man anschließend ausgeloggt wird.
-h Nummer
Legt die Größe des Scrollpuffers fest. Standardmäßig werden unter Debian 1000 Zeilen gespeichert.
-ls oder -list
Zeigt eine Liste verfügbarer Sitzungen an. Dabei wird standardmäßig die Form pid.tty.host verwendet. Eine Sitzung kann den Status "detached" (befindet sich im Hintergrund und wird nicht verwendet), "attached" (wird aktuell verwendet), "multi" (Mehrbenutzermodus ist aktiviert) oder "unreachable" besitzen. Eine "tote" sitzung mit dem unreachable oder dead -Status kann nicht mehr verwendet werden und sollte mit der Option -wipe entfernt werden.
-r [pid.sessionname] oder -r sessionowner/[pid.sessionname]
Stellt eine Verbindung zu einer Sitzung her, die sich gerade im Hintergrund (detached) befindet.
-R
Die zuletzt in den Hintergrund geschickte Session wird wieder aufgenommen.
-S sessionname
Startet eine neue Sitzung und legt den Namen der Sitzung fest. Dieser wird bei der Ausgabe der -ls Option angezeigt.
-t name
Der name des Standardfensters wird festgelegt. Jedes Fenster einer Sitzung kann einen eigenen Namen erhalten.
-v
Die Versionsnummer wird ausgegeben.
-wipe [Muster]
Nicht mehr lauffähige Sitzungen werden entfernt. Dabei kann optional ein Suchmuster angegeben werden. Anschließend wird eine Liste der verfügbaren sitzungen ausgegeben.
-x
Stellt eine Verbindung zu einer bereits laufenden Sitzung her, die sich im Mehrbenutzermodus befindet.

Tastenkombinationen innerhalb einer Sitzung

Screen kann über verschiedene Tastenkombinationen gesteuert werden, die bei Bedarf auch frei konfiguriert werden können. Eine Scren Tastenkombination beginnt standardmäßig mit der Tastenfolge Strg+a, was in der offiziellen Dokumentation mit den Zeichen C-a dargestellt wird. Daher übernehme ich diese Syntax in der folgenden Liste. Scren bietet aber auch eine interne Kommandozeile, über die das Verhalten weitreichend gesteuert werden kann. Die Angaben in Klammern stellen den jeweiligen Befehl für die Kommandozeile und die Konfigurationsdatei dar.

C-a " oder C-a ' (windowlist -b)
Eine Liste der verfügbaren Fenster erscheint. Mit den Pfeiltasten kann man sich durch die Liste bewegen und das gewünschte Fenster mit der Entertaste aufrufen.
C-a 0...9 (select 0..9)
Mit der Tastenkombination Strg+a gefolgt von einer Ziffer zwischen 0 und 9 kann man direkt zu einem der zehn Fenster navigieren. Selbstverständlich können aber auch mehr als zehn Fenster gleichzeitig geöffnet werden. Diese lassen sich dann allerdings nicht direkt aufrufen.
C-a C-a (other)
Wechselt zwischn diesem und dem zuletzt verwendeten Fenster. Wenn das zuvor verwendete Fenster nicht mehr existiert, wird zum nächsten Fenster gesprungen.
C-a a (meta)
Übergibt die Tastenkombination Strg+a, a an die im Fenster laufende Anwendung. So kann z. B. zum Zeilenanfang der shell gesprungen werden.
C-a A (title)
Der titel des Screenfensters kann verändert werden.
C-a b oder C-a C-b (break)
Ein Break-Befehl wird an das Terminal gesendet.
C-a c oder C-a C-c (screen)
Eine Shell wird in einem neuen Fenster geöffnet und zu diesem gewechselt.
C-a C (clear)
Das aktuelle Fenster wird gelöscht und der Inhalt im Scrollpuffer gespeichert.
C-a d oder C-a C-d (detach)
Die Screensitzung wird vom Terminal getrentn und in den Hintergrund geschickt. Ruft man screen mit der Option -r auf, kann die Sitzung fortgesetzt werden.
C-a D D (pow_detach)
Schickt screen in den Hintergrund und sendet ein HANGUP Signal an die Anwendung, die screen aufgerufen hatte. Wird screen aus einer Shell gestartet, wird man ausgeloggt.
C-a C-g (vbell)
Wechselt zwischn der akustischen und der visuellen Glocke. Diese ist für den Piepton verantwortlich, der z. B. beim Erreichen des Zeilenanfangs mit der rücktaste ertönt.
C-a h (hardcopy)
Der Inhalt des aktuellen Fensters wird in der Datei hardcopy.n im aktuellen Verzeichnis abgelegt. n steht hier für die Nummer des Fensters.
C-a H (log)
Schaltet die Protokollierung der Fensteraktivitäten ein und aus. Die Protokolldatei wird unter dem Namen screenlog.n im aktuellen Verzeichnis abgelegt, wobei n durch die Nummer des Fensters ersetzt wird.
C-a k oder C-a C-k (kill)
Das aktuelle Fenster wird samt den laufenden Anwendungen zerstört.
C-a m oder C-a C-m (lastmsg)
Zeigt die zuletzt angezeigte Statusnachricht erneut an.
C-a M (monitor)
Schaltet die Überwachung des aktuellen Fensters ein und aus. Verändert sich der Inhalt eines überwachten Fensters während es nicht aktiv ist, wird ein Hinweis in der Statuszeile ausgegeben.
C-a n oder C-a Leertaste (next)
Wechselt zum nächsten Fenster.
C-a p oder C-a C-p oder C-a h oder C-a Backspace (prev)
Wechselt zum vorherigen Fenster.
C-a N (number)
Gibt den Namen des Fensters und seine Nummer aus.
C-a ? (help)
Gibt eine Liste der Tastenkombinationen aus. Mit der Leertaste kommtm an zur nächsten Seite.
C-a :
Zeigt die screeninterne Kommandozeile an, auf der zum Beispiel die in Klammern angegebenen Befehle eingegeben werden können.
C-a [ oder C-a [ C-a [ oder C-a ESC (copy)
aktiviert den Kopier-Scrollback Modus. Mit den Pfeiltasten kann man sich durch die bereits angezeigten zeilen bewegen und Text kopieren.
C-a ] oder C-a C-] (paste)
Fügt den kopierten Text an der Cursorposition ein.

Die Scren Konfigurationsdatei screenrc

Das verhalten von screen wird über die Konfigurationsdatei screenrc gesteuert. Die benutzerspezifische Datei liegt im Heimatverzeichnis unter dem namen .screenrc. Diese überschreibt die in /etc/screenrc gemachten angaben. In der Konfigurationsdatei können Tastaturbelegungen verändert, Fensternamen oder Statusmeldungen konfiguriert und weitere Dinge eingestellt werden. Beginnt eine Zeile mit dem #-Zeichen, wird sie als Kommentar angesehen und ignoriert. Leerzeilen werden ebenfalls nicht ausgewertet.

Praktische Tips

In den folgenden Abschnitten zeige ich kleine Tipps für die Arbeit mit screen.

Den Begrüßungsbildschirm deaktivieren

Soll der Begrüßungsbildschirm nicht mehr angezeigt werden, ist in der Konfigurationsdatei ~/.screenrc folgender Eintrag einzufügen: startup_message off

Signalton aktivieren

Standardmäßig wird statt des Signaltons der Text “Wuff, Wuff!!” in der Statuszeile ausgegeben. Wer lieber den aus der Bash gewohnten Piepton hören möchte, trägt in der ~/.screenrc folgendes ein: vbell on

Will man das Verhalten in der laufenden Sitzung umstellen, ist die Tastenkombination Strg+a,Strg+g zu drücken.

Eine laufende Sitzung in den Hintergrund schicken und später fortsetzen

Da ich diese Funktion am häufigsten verwende, möchte ich sie an einem kleinen Beispiel demonstrieren. Gebe vor dem Start von screen den Befehl zum Ausgeben der verfügbaren Sitzungen ein:

simon@lenny:~$ screen -ls
No Sockets found in /var/run/screen/S-simon.
simon@lenny:~$

Wie man sieht, ist aktuell keine Sitzung vorhanden. wir starten eine Sitzung und geben ihr den Namen test:

simon@lenny:~$ screen -S test

Jetzt wird eine neue Sitzung gestartet und der Begrüßungsbildschirm angezeigt. Diesen verlässt man mit der Enter- oder Leertaste.

Um die Funktionsweise von screen zu demonstrieren, kann man den Befehl top eingeben. Das Programm zeigt Informationen über laufende Prozesse und die CPU- und speicherauslastung an. Wir wollen uns nun aus der Sitzung ausklinken und zur Bash des echten Terminals zurückkehren. Dazu drückt man die Tastenkombination Strg+A+d.

Jetzt wird die Sitzung im Hintergrund weiter ausgeführt, was die Ausgabe des folgenden Befehls veranschaulicht:

simon@lenny:~$ screen -ls
There is a screen on:
    2673.test    (Detached)
1 Socket in /var/run/screen/S-simon.

simon@lenny:~$

Um uns mit der Sitzung test zu verbinden, rufen wir folgendes Kommando auf: screen -r test

Die Ausgabe des Programms top wird angezeigt. Das Programm wird übrigens mit der Taste q beendet. Jetzt wird wieder der prompt der test Sitzung angezeigt. Möchte man die Sitzung beenden, kann die Shell mit dem Befehl exit verlassen werden.

Screen mit mehreren Benutzern verwenden

Das folgende kleine Beispiel zeigt, wie man Screen zum gleichzeitigen Arbeiten verwenden kann. Diese Funktion eignet sich gut um einem Administrator oder anwender über die Schulter zu schauen, da die gemachten Tastatureingaben und Programmausgaben auf dem Bildschirm des Gastes angezeigt werden und dieser auch Eingaben vornehmen kann.

Ich gehe davon aus, dass simon die Sitzung erstellt und sich der Gast später auch unter simons Account mit der Sitzung verbinden möchte.

In einer Screen sitzung muss der Multiuser Modus aktiviert werden. Nur so ist es einem Benutzer gestattet, sich mit der laufenden Sitzung zu verbinden. Standardmäßig kann ja nur der Initiator der Session mit dieser verbunden sein. Mit der Tastenkombination Strg+A+: wird der Prompt von screen aktiviert. Hier gibt man den Befehl multiuser ein und bestätigt ihn mit der Entertaste. Es wird angezeigt, dass der MultiuserModus aktiviert wurde.

Jetzt kann sich der Benutzer simon erneut auf der Shell einloggen und mit dem folgenden Befehl ebenfalls eine Verbindung zur laufenden Sitzung herstellen: screen -x

Wenn alles funktioniert, werden Tastatureingaben auf beiden Konsolen angezeigt. Will der Gastbenutzer die Verbindung trennen, verwendet er die Tastenkombination Strg+A+d.

Datum der Veröffentlichung: Samstag, 31.01.2009

Nach oben

Diese Seite drucken