Spass mit Screen

Screen ist ein hilfreiches Programm, mit dem du innerhalb einer Terminal-Sitzung mehrere virtuelle Terminals nutzen kannst. Beispielsweise musst du also nur eine ssh-Sitzung eröffnen und kannst trotzdem entfernte Programme auf mehreren Konsolen gleichzeitig ausführen.

Besonders angenehm ist es auch, in einer screen-Sitzung auf einem entfernten Rechner ein langwieriges Programm zu starten (z.B. einen schönen neuen Kernel kompilieren), da du zwischenzeitlich die screen-Konsole abhängen und die Netzwerkverbindung trennnen kannst. Später kannst du dich einfach wieder in die alte Sitzung einhängen.

Es geht los:

  • Screen einmalig starten:
    screen
  • Ansonsten lässt sich auch direk eine Kommando mit Screen ausführen:
    screen vi file.txt

Falls dich der Start-Info-Bildschirm stört, dann kannst du ihn per Option startup_message in der /etc/screenrc unterdrücken.

Um der Sitzung einen Namen zu geben, kann der Parameter -S sitzungsname verwendet werden. Dies gilt sowohl für die Erzeugung, als auch für einen späteren Zugriff auf die Sitzung.

Tastenkombinationen

Kombination Bedeutung
Ctrl-a gibt dir die Macht über die Konsolen
C-a ? zeigt wichtige Kürzel
C-a c öffnet ein neues Fenster
C-a w zeigt alle offenen Fenster
C-a 0 springt zum ersten Fenster, 1 zum zweiten usw.
C-a space schaltet die Fenster einzeln durch
C-a A benennt das aktuelle Fenster um
C-a a schaltet zwischen zwei Fenstern hin und her
C-a h schreibt den aktuellen Bildschirminhalt in hardcopy.N
C-a H beginnt/beendet das Protokollieren in die Datei screenlog.N
C-a C-k
C-a ESC Scroll-Modus: mit den Cursortasten kannst du dich nun beliebig in der Terminal-History bewegen; zweimal ESC beendet diesen Modus

Ausklinken aus einer screen-Sitzung

Kombination Bedeutung
C-a d detach, trennt dich von der Matrix (sie läuft im Hintergrund weiter)
C-d (EOF - gleichbedeutend mit exit) - die aktuelle Shell wird geschlossen und damit auch das aktuelle Fenster - mit dem Schließen des letzten Fensters wird screen beendet

Einhängen in eine alte Sitzung

  • screen -r klappt, falls du dich per detach freiwillig aus der Sitzung ausgehängt hast
  • screen -x damit hängst du dich in eine laufende Sitzung (falls die Netzwerkverbindung zwischendurch unterbrochen wurde oder du gleichzeitig mit anderen Menschen im selben Fenster arbeiten willst)
  • screen -d -r trennt eine screen-Sitzung von ihrer ursprünglichen Konsole und verbindet sie anschließend mit der aktuellen Konsole

Einschleusen von Tastatureingaben

  • screen [-S screenname] -X readbuf [DATEI] liest den Inhalt von DATEI (Standard: /tmp/screen-exchange) in den internen Zwischenspeicher der screen-Sitzung
  • screen [-S screenname] -X paste \. sendet den Inhalt dieses Zwischenspeichers in das aktuelle Fenster der screen-Sitzung (eigentlich ist es nur paste ., allerdings führt die bash ohne backslash eine Substitution durch)
  • Das folgende Skript sendet seine Parameter als Zeichen in das screen-Sitzung (diese kann mit -S screenname gewählt werden):
    #!/bin/sh
    TMP_FILE=/tmp/screen-exchange-$$
    [ "$1"  = "-S" ] && shift && SC_OPTS="$SC_OPTS -S $1" && shift
    echo -en "$@" > "$TMP_FILE"
    screen $SC_OPTS -X readbuf "$TMP_FILE"
    screen $SC_OPTS -X paste \.
    rm "$TMP_FILE"

Automatisiertes Öffnen mehrerer Programme

Folgende Datei ist ausführbar und startet mehrere Fenster mit verschiedenen Programmen:

 #!/usr/bin/screen -c

setenv FOO "bar"

# Teile den Bildschirm horizontal in zwei Bereiche
split

screen -t "dmesg" 0 bash

focus down
screen -t "top" 1 top

focus up