Der Terminal-Multiplexer Screen in der Praxis

Aus LinuxUser 03/2015

Der Terminal-Multiplexer Screen in der Praxis

© lightwise, 123RF

Geteilter Ansicht

Mit Screen verwalten Sie bequem viele Terminalfenster in einer einzigen Sitzung. Vor allem für Admins, die ihr tägliches Werk ohne grafische Umgebung verrichten, bietet ein Terminal-Multiplexer zahlreiche Annehmlichkeiten.

Auch in Zeiten, in denen auf dem Schreibtisch eines Administrators Rechner mit leistungsfähigen Prozessoren und mehrere Monitore mit tollen grafischen Oberflächen stehen, gilt es, die Server in den Rechenzentren und entsprechenden, oft weit abgelegenen Räumen nach wie vor über die Kommandozeile zu steuern. Upgrades, Neuinstallationen, Programmentwicklung und Monitoring – da kommen viele Dinge zusammen, die parallel laufen müssen. Oft hockt der Admin vor etlichen Terminalsitzungen und greift auf diesem Weg auf einen oder mehrere Server zu. Viele Fenster bergen jedoch die Gefahr, im Chaos die Übersicht zu verlieren.

Terminal-Multiplexer wie Tmux oder Screen bringen Ordnung in das Chaos: Sie ermöglichen unter anderem mehrere Terminalfenster in einer Sitzung und erlauben das Parken und Wiederaufrufen einer Session, ohne die darin laufenden Prozesse zu unterbrechen. Das hilft auch dann, wenn sich überraschend eine Netzverbindung verabschiedet. Zudem lassen sich Sitzungen mit Kollegen teilen, was bei kniffligen Problemen oft schneller zu einer Lösung führt.

Wir werfen hier einen näheren Blick auf das Multiplexer-Urgestein GNU Screen [1]. Es wurde 1987 von Oliver Laumann an der Technischen Universität Berlin unter dem Namen BSD Screen entwickelt und über die User-Group Net.sources veröffentlicht. In den Jahren 1993 bis 2002 entwickelten hauptsächlich Jürgen Weigert und Michael Schroeder von der Universität Erlangen Screen weiter. Wayne Davison übernahm den Staffelstab 2004, bevor der Multiplexer in einen mehrjährigen Dornröschenschlaf versank, währenddessen es nur sehr geringfügige Neuerungen gab. Umso mehr überraschte es, als Anfang dieses Jahres der aktuelle Maintainer Amadeusz Slawinski die Veröffentlichung einer neuen Screen-Version bekannt gab [2].

Screen bietet deutlich mehr als nur weiterlaufende und von andernorts wieder aufrufbare Prozesse in einem Terminalfenster oder kollaborativen Zugriff auf die Kommandozeile. Innerhalb einer Screen-Session lassen sich mehrere Terminalfenster öffnen, Tastatureingaben loggen oder Inhalte zwischen zwei Fenstern auszutauschen. Arbeitet in einem Terminal etwa ein länger laufender Prozess, lässt sich Screen anweisen, eine Benachrichtigung auszugeben, sobald es Änderungen auf der Kommandozeilenebene gibt. Daneben lässt sich ein Fenster auch teilen, sodass man mehrere Sitzungen parallel einsieht.

Installation

GNU Screen lässt sich unter allen gängigen Distributionen schnell und bequem aus den Paketquellen installieren. Unter Debian und dessen Derivaten wie Ubuntu oder Mint installieren Sie den Multiplexer mit apt-get install screen. Anwender von Arch Linux behelfen sich mit pacman -S screen. Möchten Sie die neueste Version installieren, müssen Sie den Quellcode [3] herunterladen und mit dem klassischen Dreischritt ./configure; make; sudo make install selbst kompilieren.

Screen im Einsatz

Sie starten den Terminalmultiplexer über den simplen Aufruf screen. Je nach Distribution lädt Screen in einem Infoschirm oder direkt in einem Terminalfenster. In diesem geben Sie Ihre Befehle genauso ein, wie Sie es in einem gewöhnlichen Terminal auch tun – so weit, so gut. Der einzige Vorteil besteht bisher darin, dass sich die Screen-Session wieder aufrufen lässt, falls die Verbindung einmal abbricht. Doch Screen kann viel mehr.

Bei der Arbeit mit Screen kommen Sie um das Verinnerlichen einiger Tastenkürzel nicht herum. Screen benutzt [Strg]+[A] als Steuersignal für weitere Kommandos. Geben Sie etwa danach noch ein [C] ein, öffnen Sie innerhalb von Screen ein weiteres Fenster. [Strg]+[A],[Umschalt]+[2] listet alle Fenster auf und erlaubt einen Wechsel (Abbildung 1) zwischen ihnen. Alternativ nutzen Sie die Nummer aus der Übersicht und springen direkt mit [Strg]+[A] gefolgt von der Fensternummer (zwischen 0 und 9) in das gewünschte Fenster. [Strg]+[A] gefolgt von der Eingabe eines Fragezeichens zeigt Ihnen eine Übersicht über alle Tastenkommandos an. Mit [Strg]+[A],[K] beenden Sie das Fenster wieder; das Schließen des letzten Fensters terminiert auch die Screen-Sitzung.

Abbildung 1: Screen verwaltet innerhalb einer Sitzung mehrere Fenster, die Sie individuell benennen dürfen.

Abbildung 1: Screen verwaltet innerhalb einer Sitzung mehrere Fenster, die Sie individuell benennen dürfen.

Sollte der ungewöhnliche Fall eintreten, dass Sie in einer Session mehr als zehn Terminalfenster starten, dann wechseln Sie mittels [Strg]+[A] und [Umschalt]+[#], gefolgt von der Nummer, in ein Fenster mit einer mehrstelligen Nummer. Dazu muss Screen allerdings mit einer höheren MAXWIN-Einstellung kompiliert worden sein. Alternativ blättern Sie mit [Strg]+[A] gefolgt von [N] beziehungsweise [P] vor- oder rückwärts durch die Fenster. In welchem Fenster Sie sich gerade befinden, erfahren Sie mit [Strg]+[A],[W].

Nutzen Sie mehrere Screen-Fenster, dann verlieren Sie schnell die Übersicht, da beim Einsatz der Bash-Shell sämtliche Fenster einfach nur bash heißen – wo welcher Prozess läuft, lässt sich nicht erkennen. Sie könnten sich nun merken, was sich hinter den einzelnen Fensternummern verbirgt. Besser helfen Sie sich allerdings mit [Strg]+[A],[Umschalt]+[A] und der Möglichkeit, jedem Fenster einen eigenen Namen zu geben. So wissen Sie sofort, ob das Update in Fenster 7 oder 9 läuft und die Config-Datei mit Vim im Fenster 5 bearbeitet wird. Setzen Sie einmal ungewollt das Kommandozeichen an Screen ab, teilen Sie Screen mithilfe von [AltGr]+[Q] mit, dass es sich um einen Irrtum handelt.

Murphys Gesetz verlangt, dass Sie immer dann die Laufzeit eines Prozesses unterschätzen, wenn Sie zu einer festen Uhrzeit das Büro verlassen müssen. Kandidaten dafür sind beispielsweise ein vollständiger Scan des Netzwerks oder eine komplette LaTeX-Installation. Haben Sie solch einen Vorgang in weiser Voraussicht in einer Screen-Sitzung gestartet, dann koppeln Sie die Sitzung mit [Strg]+[A],[D] einfach vom Terminal ab. Später loggen Sie sich via SSH auf dem Server ein und nehmen die Sitzung mit screen -r wieder auf.

Führen Sie mehrere Sitzungen parallel aus, geben Sie dem Aufruf noch die zu Screen gehörige PID mit, die Sie mittels screen -ls zutage fördern. Alternativ geben Sie der Screen-Session beim Start mit dem Parameter -S <§§I>Titel<§§I> einen Namen mit. Läuft die Sitzung bereits, wechseln Sie mit [Strg]+[A],[Umschalt]+[.] auf die Screen-Kommandozeile und benennen dann die Sitzung mithilfe des Kommandos sessionname <§§I>Titel<§§I>.

Auf Wunsch informiert Sie Screen über den Fortschritt eines lang laufenden Prozesses. Laden Sie beispielsweise große Dateien herunter, migrieren Server oder kompilieren große Programme, weisen Sie Screen mit [Strg]+[A],[Umschalt]+[M] und [Strg]+[A],[Umschalt]+[-] an, kurz Bescheid zu geben, wenn es in einem Fenster Aktivitäten feststellt oder ein Job abgeschlossen wurde.

Alternativ teilen Sie das Screen-Fenster in mehrere Bereiche und behalten so länger laufende Prozesse im Blick (Abbildung 2). Ältere Screen-Versionen erlauben nur ein horizontales Teilen, das Sie mit [Strg]+[A],[Umschalt]+[S] aktivieren. In den neuen Screen-Generationen ermöglicht das Programm über [Strg]+[A],[AltGr]+[<] auch eine vertikale Aufteilung. Die einzelnen Unterfenster bezeichnet Screen dabei als Regionen. Sie wechseln mit [Strg]+[A],[Tab] zwischen den sichtbaren Regionen. Mit [Strg]+[A],[Umschalt]+[X] beenden Sie die gerade aktivierte Region wieder.

Abbildung 2: Screen bietet Ihnen die Möglichkeit, das Terminalfenster in mehrere Regionen aufzuteilen.

Abbildung 2: Screen bietet Ihnen die Möglichkeit, das Terminalfenster in mehrere Regionen aufzuteilen.

Drückt die Blase oder muss ein Admin, der gerade vor einer Screen-Sitzung mit brisanten Informationen sitzt, seine Arbeit kurz unterbrechen, lässt sich die Sitzung mit [Strg]+[A],[X] sperren. Vorsicht: Die Sperrung verhindert nicht, dass sich jemand von einem anderen Ort in die Session hackt. Die Session wird nur nicht abgekoppelt, falls jemand sich von einem anderen Rechner anmeldet und mit screen -r -D nach ihr greift (wobei das -D für “detach” steht). Eine ungesperrte Sitzung ließe sich jetzt flugs entführen.

Logging, Copy und Paste

Es gibt Arbeiten, die gut dokumentiert werden wollen oder müssen. Dazu kopieren Admins oft im Nachhinein sämtliche Befehle und deren Ausgaben in ein Textdokument. Mit Screen klappt dies viel einfacher: Auf Wunsch protokolliert das Programm alle Ein- und Ausgaben mit. Sie aktivieren die Funktion mit der Tastenkombination [Strg]+[A],[Umschalt]+[H]. Anschließend finden Sie die Log-Datei in screenlog.<§§I>#<§§I>, wobei die Raute für die Nummer des jeweiligen Terminalfensters in der Screen-Sitzung steht (Abbildung 3).

Abbildung 3: Auf Wunsch schreibt Screen sämtliche Ein- und Ausgaben in einer Protokolldatei mit.

Abbildung 3: Auf Wunsch schreibt Screen sämtliche Ein- und Ausgaben in einer Protokolldatei mit.

Screen bietet Ihnen auch die Möglichkeit, innerhalb eines Fensters verschiedene Passagen zu kopieren. Dazu wechseln Sie mittels [Strg]+[A],[AltGr]+[8] oder [Strg]+[A],[Esc] in den Kopiermodus. In diesem navigieren Sie mit den Pfeiltasten oder nach Vim-Manier mit [H],[J],[K] oder [L] durch die Ausgaben. An der Startstelle angelangt, betätigen Sie die Leertaste und markieren den zu kopierenden Inhalt (Abbildung 4). Durch ein erneutes Drücken der Leertaste kopiert Screen alles in einen Puffer, den Sie anschließend mit [Strg]+[A],[AltGr]+[9] wieder ausgeben.

Abbildung 4: Sollten Sie vergessen haben, das Log zu aktivieren, lassen sich Inhalte der Screen-Sitzung per Copy & Paste zwischen den Fenstern übertragen.

Abbildung 4: Sollten Sie vergessen haben, das Log zu aktivieren, lassen sich Inhalte der Screen-Sitzung per Copy & Paste zwischen den Fenstern übertragen.

Multiuser

Ein interessantes Feature von Screen stellt der Multiuser-Modus dar, bei dem mehrere Nutzer einer Sitzung beiwohnen dürfen. Das ist vor allem hilfreich, wenn jemand mangels grafischer Oberfläche auf dem Schlauch steht und Hilfe auf der Kommandozeile braucht. Screen lässt sich gleich beim Start multiuserfähig machen, indem Sie den Parameter -m in das Startkommando hängen. In einer laufenden Screen-Session erledigt das [Strg]+[A],[Umschalt]+[.] und das Kommando multiuser on. Danach legen Sie mit [Strg]+[A],[Umschalt]+[.] und acladd <§§I>Nutzer<§§I> fest, welcher Nutzer an der Sitzung teilnehmen darf.

Standardmäßig darf dieser Nutzer alles, was sich aber leicht mit dem Kommando aclchg <§§I>Nutzer<§§I> <§§I>Perm-Bits<§§I> <§§I>Liste<§§I> einschränken lässt. Anstelle nur eines Namens dürfen Sie auch mehrere Benutzer anführen. Die Perm-Bits sind rwx für Lesen, Schreiben und Ausführen – wie Sie es etwa schon von chmod kennen. Sie setzen die Bits nach dem Schema +/-Perm-Bit; ein Plus verleiht ein Recht, ein Minus entzieht es. Bei der Liste handelt es sich um die Fenster, die den anderen Nutzern zugänglich sein dürfen. Dass der Nutzer Fred beispielsweise im Fenster 1 nur zuschauen darf, jedoch nicht selbst agieren, erreichen Sie mit aclchg fred -w 1. Ersetzen Sie die Fensterliste durch "#", gelten die Rechte für alle Fenster einer Sitzung.

Nach dem Setzen der Rechte melden sich die erlaubten Anwender mit ihrem Benutzerkonto auf dem System an und treten anschließend mit screen -x <§§I>Account<§§I>/ der Screen-Session des Nutzers Account bei. Gibt es mehrere Sessions, muss nach dem Schrägstrich die PID oder der Titel der Sitzung folgen. Diese listet screen -ls <§§I>Nutzer<§§I>/ vorab auf (Abbildung 5). Eventuell müssen Sie für Screen noch das SUID-Bit setzen und das Verzeichnis /var/run/screen für alle lesbar machen, damit der Multiuser-Modus funktioniert. Das erledigen Sie auf der Kommandozeile mit chmod u+s /usr/bin/screen sowie chmod 755 /var/run/screen. Haben die Screen-Gäste genug gesehen und getan, entziehen Sie ihnen mit acldel username die Zugriffsrechte wieder. Den Multiusermodus einfach nur abzuschalten, genügt dazu nicht: Wer in der Session eingeloggt ist, bleibt das bis zum expliziten Rausschmiss.

Abbildung 5: Wie bei einem Remote-Desktop lässt sich eine Screen-Sitzung mit anderen Benutzern teilen.

Abbildung 5: Wie bei einem Remote-Desktop lässt sich eine Screen-Sitzung mit anderen Benutzern teilen.

Terminal-Emulator

Screen fungiert nicht nur als flexibler Terminalmultiplexer, sondern arbeitet auch als serielles Kommunikationsprogramm. So erreichen Sie beispielsweise die Ausgaben eines Arduino oder eines anderen Geräts mit serieller Konsole auch dann noch, wenn dieses gar nicht mehr ordnungsmäßig startet.

In der Grundeinstellung überträgt Screen mit 115200 bps, 8 Bits, No-Stop-Bit und deaktivierter Flusskontrolle. Bis auf die Geschwindigkeit sollten diese Voreinstellungen für die meisten Geräte gut funktionieren. Um sich beispielsweise mit einem streikenden Guruplug zu verbinden, genügt der Befehl screen screen /dev/ttyUSB0 (Abbildung 6). Die serielle Ausgabe eines Arduino mit standardmäßig voreingestellten 9600 bps holen Sie dagegen mit screen /dev/ttyUSB0 9600 auf den Schirm.

Abbildung 6: Screen arbeitet nicht nur als flexibler Terminalmultiplexer, sondern auch als serielles Kommunikationsprogramm.

Abbildung 6: Screen arbeitet nicht nur als flexibler Terminalmultiplexer, sondern auch als serielles Kommunikationsprogramm.

Screen und Skripte

Screen lässt sich zudem über Skripte ansteuern. Dies bedeutet, dass sich beim Start des Multiplexers oder auch später von der Kommandozeile aus Befehle in einzelne Sessions schicken lassen. So würde etwa screen -X stuff "ls -lh\r" beispielsweise im Fenster 0 der Screen-Sitzung das Kommando ls -lh ausführen. Das abschließende \r (“carriage return”) benötigt Screen, um den Befehl auch auszuführen. Fehlt es, schreibt Screen den Befehl nur in das Fenster. Möchten Sie ein anderes Fenster ansteuern, bestimmen Sie dieses zusätzlich über die Option -p gefolgt von Fenstertitel oder Nummer.

Auf diese Weise übergeben Sie nicht nur Befehle für das Terminal an Screen, sondern auch viele Screen-Kommandos. So schließt screen -p 2 -X kill das Fenster 2 der Screen-Sitzung, screen -X multiuser on macht eine Sitzung multiuserfähig. Läuft mehr als eine Screen-Session, teilen Sie die gewünschte Sitzung dem System mit -S <§§I>PID<§§I> mit. Alternativ können Sie hier auch den Session-Titel verwenden.

Fazit

Tummeln Sie sich viel auf der Kommandozeile, lohnt es sich, sich mit Screen auseinanderzusetzen: Es macht die Arbeit in vielerlei Hinsicht leichter. Das gilt zwar auch für andere Terminal-Multiplexer, aber Screen nutzt im Gegensatz zu Tmux noch grundsätzlich die Tastenbindungen, die früher in vielen Programmen für serielle Konsolen üblich waren.

Screen verfügt über einen riesigen Funktionsumfang, der in der Praxis allerdings eher selten vollständig zum Einsatz kommt. Trotzdem sollten Sie die Dokumentation zumindest einmal überfliegen und kleine Häkchen in den grauen Zellen verankern, die vielleicht später bei der Lösung eines Problems helfen. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 03/2015 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben