GNU Screen auf einem Linux VPS verwenden

13 Min. Lesezeit·Matthieu·gnu-screenterminal-multiplexerlinuxvpssshscreen-session|

Lernen Sie GNU Screen von der Installation bis zum täglichen Einsatz. Sitzungen verwalten, Bereiche aufteilen, .screenrc konfigurieren und Prozesse nach SSH-Trennungen auf Debian 12 und Ubuntu 24.04 am Laufen halten.

Sie verbinden sich per SSH mit Ihrem Server, starten einen lang laufenden Prozess, und die Verbindung bricht ab. Der Prozess stirbt. GNU Screen löst dieses Problem. Es führt Terminalsitzungen aus, die unabhängig von Ihrer SSH-Verbindung bestehen bleiben. Sie können sich abtrennen, die Verbindung schließen, Stunden später wieder verbinden und genau dort weitermachen, wo Sie aufgehört haben.

Was ist GNU Screen?

GNU Screen ist ein Terminal-Multiplexer. Er erzeugt virtuelle Terminalsitzungen, die auf dem Server laufen, unabhängig von Ihrer SSH-Verbindung. Innerhalb einer Screen-Sitzung können Sie mehrere Fenster öffnen, Ihr Terminal in Bereiche aufteilen und durch die Ausgabehistorie scrollen.

Screen sitzt zwischen Ihrem SSH-Client und der Shell. Wenn Sie sich von einer Screen-Sitzung abtrennen, laufen alle Programme darin weiter. Wenn Sie sich wieder verbinden, sehen Sie die gleiche Ausgabe, die gleichen laufenden Prozesse, den gleichen Zustand. Das macht Screen unverzichtbar für Arbeiten auf einem entfernten VPS, bei dem SSH-Verbindungen unerwartet abbrechen können.

Screen existiert seit 1987. Es ist in den Standard-Repositories jeder gängigen Linux-Distribution verfügbar. Die aktuellen Versionen sind 4.9.0 auf Debian 12 und 4.9.1 auf Ubuntu 24.04.

Wie installiert man GNU Screen auf Debian und Ubuntu?

Screen ist in den Standard-Repositories von Debian 12 und Ubuntu 24.04 verfügbar. Installieren Sie es mit einem einzigen apt-Befehl. Auf den meisten minimalen VPS-Images ist es nicht vorinstalliert.

Aktualisieren Sie den Paketindex und installieren Sie Screen:

sudo apt update && sudo apt install -y screen

Kontrollieren Sie die Installation:

screen --version

Auf Debian 12 sehen Sie:

Screen version 4.09.00 (GNU) 30-Jan-21

Auf Ubuntu 24.04:

Screen version 4.09.01 (GNU) 20-Aug-23

Wenn eine Versionsnummer angezeigt wird, ist Screen einsatzbereit.

Wie startet und benennt man eine Screen-Sitzung?

Um eine neue Screen-Sitzung zu starten, führen Sie screen aus. Ohne Namen wird es später schwieriger, die Sitzung zu identifizieren. Benennen Sie Ihre Sitzungen immer mit dem -S-Flag.

Starten Sie eine benannte Sitzung:

screen -S myproject

Ihr Terminal wird geleert und Sie befinden sich jetzt in einer Screen-Sitzung. Alles, was Sie hier ausführen, bleibt bestehen, auch wenn Ihre SSH-Verbindung abbricht.

Prüfen Sie, ob Sie sich in einer Screen-Sitzung befinden:

echo $STY

Dies gibt den Sitzungsnamen aus. Wenn etwas wie 12345.myproject angezeigt wird, sind Sie in Screen. Wenn nichts ausgegeben wird, sind Sie nicht in einer Sitzung.

Screen-Befehlsreferenz

Alle Screen-Befehle beginnen mit der Präfixtaste Ctrl-a, gefolgt von einer weiteren Taste. Dieses Präfix wird als "Escape-Zeichen" bezeichnet.

Tastenkombination Aktion Hinweise
Ctrl-a d Von Sitzung abtrennen Sitzung läuft weiter
Ctrl-a c Neues Fenster erstellen Öffnet eine neue Shell
Ctrl-a n Nächstes Fenster Vorwärts durchschalten
Ctrl-a p Vorheriges Fenster Rückwärts durchschalten
Ctrl-a " Fensterliste anzeigen Mit Pfeiltasten auswählen
Ctrl-a A Aktuelles Fenster umbenennen Namen eingeben, Enter drücken
Ctrl-a k Aktuelles Fenster schließen Bestätigung erforderlich
Ctrl-a S Horizontal teilen Großes S
Ctrl-a | Vertikal teilen Pipe-Zeichen
Ctrl-a Tab Zwischen Bereichen wechseln Durchschalten der Splits
Ctrl-a X Aktuellen Bereich schließen Großes X
Ctrl-a [ Kopiermodus starten Auch Ctrl-a Esc
Ctrl-a ] Kopierten Text einfügen Fügt aus dem Puffer ein
Ctrl-a ? Tastenbelegung anzeigen Eingebaute Hilfe

Wie trennt und verbindet man eine Screen-Sitzung?

Das ist der zentrale Workflow. Sie starten einen Prozess in Screen, trennen sich, und der Prozess läuft weiter. Später verbinden Sie sich wieder, um den Stand zu prüfen.

Abtrennen von der aktuellen Sitzung:

Drücken Sie Ctrl-a dann d.

Sie sehen:

[detached from 12345.myproject]

Ihre Sitzung läuft jetzt im Hintergrund. Sie können Ihre SSH-Verbindung bedenkenlos schließen.

Auflisten aller Sitzungen:

screen -ls

Ausgabe:

There are screens on:
	12345.myproject	(03/19/2026 02:15:30 PM)	(Detached)
1 Sockets in /run/screen/S-your_user.

Wieder verbinden mit einer Sitzung:

screen -r myproject

Sie sind zurück in Ihrer Sitzung mit allen Ausgaben und Prozessen.

Wenn Sie nur eine abgetrennte Sitzung haben, funktioniert screen -r auch ohne Namen.

Wie erzwingt man die Wiederverbindung bei bereits verbundener Sitzung?

Manchmal zeigt eine Sitzung (Attached) an, obwohl Sie nicht verbunden sind. Das passiert, wenn SSH ohne saubere Trennung abbricht. Screen denkt, die alte Verbindung sei noch aktiv.

Verwenden Sie diese Entscheidungstabelle für die richtigen Flags:

Szenario Befehl Wirkung
Sitzung zeigt "Attached", aber Sie sind nicht verbunden screen -D -r myproject Erzwingt Abtrennung der alten Verbindung, verbindet dann hier
Sitzung zeigt "Attached" und Sie möchten sie teilen screen -x myproject Verbindet ohne die andere Verbindung abzutrennen (Multi-Display)
Sitzung zeigt "Attached", Sie möchten sie übernehmen screen -d -r myproject Trennt die Gegenseite, verbindet lokal

Der häufigste Fall ist screen -D -r. Es behandelt veraltete Verbindungen von abgestürzten SSH-Sitzungen.

Prüfen Sie den Sitzungsstatus nach der Wiederverbindung:

screen -ls

Die Sitzung sollte jetzt (Attached) anzeigen.

Wie hält man einen Prozess nach SSH-Trennung am Laufen?

Starten Sie eine Screen-Sitzung, führen Sie Ihren Prozess darin aus und trennen Sie sich. Der Prozess überlebt SSH-Trennungen, Netzwerkausfälle und sogar das Schließen Ihres Laptops.

Hier ist der vollständige Workflow:

screen -S training

Innerhalb der Sitzung starten Sie Ihren lang laufenden Prozess:

python3 train_model.py --epochs 100

Trennen Sie sich mit Ctrl-a d. Sie sehen:

[detached from 12345.training]

Schließen Sie SSH. Holen Sie sich einen Kaffee. Kommen Sie später zurück:

ssh user@your-server
screen -r training

Ihr Trainingsjob läuft noch und Sie können die gesamte Ausgabe sehen, die während Ihrer Abwesenheit produziert wurde.

Wie verwaltet man mehrere Fenster in Screen?

Eine einzelne Screen-Sitzung kann mehrere Fenster enthalten. Jedes Fenster ist eine unabhängige Shell. Stellen Sie sich Fenster wie Tabs in einem Webbrowser vor.

Erstellen Sie ein neues Fenster in Ihrer Sitzung:

Drücken Sie Ctrl-a c.

Eine neue Shell öffnet sich. Ihr vorheriges Fenster ist weiterhin vorhanden. Wechseln Sie zwischen Fenstern:

  • Ctrl-a n wechselt zum nächsten Fenster
  • Ctrl-a p wechselt zum vorherigen Fenster
  • Ctrl-a 0 bis Ctrl-a 9 springt zum Fenster nach Nummer
  • Ctrl-a " zeigt eine Liste aller Fenster. Wählen Sie mit den Pfeiltasten und drücken Sie Enter.

Benennen Sie das aktuelle Fenster um:

Drücken Sie Ctrl-a A, geben Sie einen Namen ein und drücken Sie Enter.

Prüfen Sie, in welchem Fenster Sie sich befinden:

Drücken Sie Ctrl-a ", um die Fensterliste zu sehen. Das aktuelle Fenster hat ein Sternchen.

Schließen Sie ein Fenster mit exit in seiner Shell oder drücken Sie Ctrl-a k und bestätigen Sie mit y.

Wie teilt man das Terminal in Bereiche auf?

Screen kann Ihr Terminal in mehrere Bereiche (Regions) aufteilen, wobei jeder ein anderes Fenster anzeigt. Das ist nützlich, um Logs in einem Bereich zu überwachen, während Sie in einem anderen arbeiten.

Monitoring-Layout Schritt für Schritt aufbauen

Wir bauen ein Layout mit 3 Bereichen: eine Haupt-Shell oben, Logs unten links und Systemüberwachung unten rechts.

Schritt 1: Starten Sie eine benannte Sitzung:

screen -S monitor

Schritt 2: Teilen Sie horizontal. Drücken Sie Ctrl-a S (großes S).

Ihr Terminal teilt sich in einen oberen und unteren Bereich. Der Cursor bleibt im oberen Bereich.

Schritt 3: Wechseln Sie zum unteren Bereich. Drücken Sie Ctrl-a Tab.

Der untere Bereich ist leer. Sie müssen ihm ein Fenster zuweisen.

Schritt 4: Erstellen Sie ein neues Fenster im unteren Bereich. Drücken Sie Ctrl-a c.

Jetzt haben Sie eine Shell im unteren Bereich.

Schritt 5: Teilen Sie den unteren Bereich vertikal. Drücken Sie Ctrl-a | (Pipe-Zeichen).

Die untere Hälfte hat jetzt einen linken und rechten Abschnitt. Wechseln Sie zum neuen rechten Abschnitt mit Ctrl-a Tab.

Schritt 6: Erstellen Sie ein weiteres Fenster. Drücken Sie Ctrl-a c.

Schritt 7: Starten Sie Ihre Monitoring-Tools. Navigieren Sie zwischen Bereichen mit Ctrl-a Tab:

  • Oberer Bereich: Ihre Haupt-Arbeitsshell
  • Unten links: führen Sie tail -f /var/log/syslog aus
  • Unten rechts: führen Sie htop aus

Befehle zur Bereichsverwaltung

Tastenkombination Aktion
Ctrl-a S Horizontal teilen
Ctrl-a | Vertikal teilen
Ctrl-a Tab Zum nächsten Bereich wechseln
Ctrl-a X Aktuellen Bereich schließen (Fenster bleibt offen)
Ctrl-a Q Alle Bereiche außer dem aktuellen schließen
Ctrl-a :resize +5 Aktuellen Bereich um 5 Zeilen vergrößern
Ctrl-a :resize -5 Aktuellen Bereich um 5 Zeilen verkleinern

Beachten Sie: Screen speichert Ihr Bereichslayout nicht beim Abtrennen. Wenn Sie sich wieder verbinden, sind alle Splits weg und Sie sehen ein einzelnes Fenster. Die Fenster selbst (und ihre Prozesse) bleiben erhalten. Sie müssen die Bereiche manuell neu aufteilen. Wenn Sie persistente Layouts brauchen, fügen Sie Layout-Befehle zu Ihrer .screenrc hinzu oder ziehen Sie tmux auf einem Linux-VPS verwenden in Betracht, das Pane-Layouts beim Abtrennen beibehlt.

Wie verwendet man den Kopiermodus und Scrollback?

Standardmäßig können Sie in einer Screen-Sitzung nicht mit dem Mausrad oder Shift-PgUp nach oben scrollen. Screen fängt alle Eingaben ab. Um frühere Ausgaben zu sehen, müssen Sie den Kopiermodus (Copy Mode) aktivieren.

Aktivieren Sie den Kopiermodus mit Ctrl-a [ oder Ctrl-a Esc.

Sie befinden sich jetzt in einem vi-ähnlichen Navigationsmodus:

Taste Aktion
Pfeiltasten Cursor bewegen
h/j/k/l Cursor bewegen (vi-Stil)
Ctrl-u Halbe Seite nach oben scrollen
Ctrl-d Halbe Seite nach unten scrollen
0 Zeilenanfang
$ Zeilenende
g Zum Anfang des Scrollback
G Zum Ende des Scrollback
/ Vorwärts suchen
? Rückwärts suchen
Space Markierung setzen (Anfang/Ende der Auswahl)
Enter Ausgewählten Text kopieren und Kopiermodus verlassen
Esc Kopiermodus ohne Kopieren verlassen

Um Text zu kopieren: Aktivieren Sie den Kopiermodus, bewegen Sie den Cursor zum Anfang des gewünschten Textes, drücken Sie Space für die erste Markierung, bewegen Sie den Cursor zum Ende, drücken Sie erneut Space. Der Text wird in den Einfügepuffer von Screen kopiert.

Zum Einfügen: Drücken Sie Ctrl-a ].

Der Standard-Scrollback-Puffer fasst 100 Zeilen. Das ist zu wenig für echte Arbeit. Erhöhen Sie ihn in Ihrer .screenrc:

defscrollback 10000

Das gibt Ihnen 10.000 Zeilen Scrollback pro Fenster.

Wie konfiguriert man Screen mit .screenrc?

Screen liest ~/.screenrc beim Start. Diese Datei steuert das Standardverhalten, Tastenbelegungen, die Statusleiste und Startfenster.

Wie sieht eine gute .screenrc aus?

Hier ist eine vollständige .screenrc mit Erklärung jeder Direktive:

# Disable the startup splash message
startup_message off

# Use bash as the default shell
shell /bin/bash

# Set scrollback buffer to 10,000 lines
defscrollback 10000

# Use 256-color terminal
term screen-256color

# Disable visual bell (use audible bell instead)
vbell off

# Enable alternate screen support (clears screen after less/vim exit)
altscreen on

# Status bar at the bottom of the screen
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][ %=%{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][ %{B}%Y-%m-%d %{W}%c %{g}]'

# Detach on hangup (SSH disconnect)
autodetach on

# Don't block the whole session if a window goes unresponsive
nonblock on

# Log new screen windows in utmp
deflogin on

# Start window numbering at 1 instead of 0
bind c screen 1
bind ^c screen 1
bind 0 select 10

# Named windows at startup
screen -t shell 1
screen -t logs 2
screen -t work 3

Erstellen Sie diese Datei:

nano ~/.screenrc

Fügen Sie die obige Konfiguration ein und speichern Sie.

Hardstatus-Formatzeichenkette erklärt

Die Hardstatus-Zeile ist der mächtigste (und verwirrendste) Teil der .screenrc. Hier ist die Bedeutung jedes Tokens im Beispiel:

Token Bedeutung
%{= kG} Farbe setzen: schwarzer Hintergrund, hellgrüner Text
%H System-Hostname
%-Lw Alle Fenster vor dem aktuellen
%{r}(%{W}%n*%f%t%{r}) Aktuelles Fenster: rote Klammern, weiße Fensternummer + Flags + Titel
%+Lw Alle Fenster nach dem aktuellen
%Y-%m-%d Datum im Format JJJJ-MM-TT
%c Aktuelle Uhrzeit im Format HH:MM

Farbcodes: k Schwarz, r Rot, g Grün, y Gelb, b Blau, m Magenta, c Cyan, w Weiß. Großbuchstaben für helle/fette Varianten.

Starten Sie eine neue Sitzung, um die Statusleiste zu sehen:

screen -S test

Sie sollten eine grüne Statusleiste am unteren Rand sehen, die Ihren Hostnamen, die Fensterliste und das aktuelle Datum mit Uhrzeit anzeigt.

Escape-Taste ändern

Wenn Ctrl-a mit Ihrem Workflow kollidiert (es ist auch "zum Zeilenanfang gehen" in Bash), können Sie es umbinden:

# Use Ctrl-j as the escape key instead of Ctrl-a
escape ^Jj

Nach dieser Änderung verwenden alle Screen-Befehle Ctrl-j statt Ctrl-a. Wählen Sie eine Taste, die Sie selten benutzen.

Gängige GNU-Screen-Workflows auf einem VPS

Deployment am Laufen halten

screen -S deploy
./deploy.sh --production
# Ctrl-a d to detach

Später prüfen:

screen -r deploy

Mehrere Logdateien überwachen

screen -S logs

Innerhalb der Sitzung:

  1. Ctrl-a S für horizontale Teilung
  2. Im oberen Bereich: tail -f /var/log/nginx/access.log
  3. Ctrl-a Tab zum unteren Bereich wechseln
  4. Ctrl-a c für ein neues Fenster
  5. tail -f /var/log/nginx/error.log

Langen Trainingsjob ausführen (KI-Entwickler)

screen -S training
python3 -u train.py --model llama --epochs 50 2>&1 | tee training.log
# Ctrl-a d to detach

Das -u-Flag deaktiviert die Python-Ausgabepufferung, damit Sie beim Wiederverbinden die Ausgabe in Echtzeit sehen. Die Weiterleitung durch tee speichert die Ausgabe als Backup in einer Datei.

Schnelles Abtrennen und Wiederverbinden nach SSH-Abbruch

Wenn Ihre SSH-Verbindung während einer Screen-Sitzung abbricht, verbinden Sie sich einfach neu:

ssh user@your-server
screen -D -r

screen -D -r findet Ihre Sitzung, erzwingt die Abtrennung der veralteten Verbindung und verbindet sich neu.

GNU Screen vs. tmux: Was sollten Sie verwenden?

Screen und tmux sind beide Terminal-Multiplexer. Sie lösen das gleiche Kernproblem. Hier ist ein ehrlicher Vergleich:

Merkmal GNU Screen tmux
Erstveröffentlichung 1987 2007
Lizenz GPL-3.0 ISC (BSD-ähnlich)
Aktive Entwicklung Langsam (5.0 erschien Aug 2024 nach Jahren der Inaktivität) Aktiv (regelmäßige Releases)
Pane-Layout-Persistenz Geht beim Abtrennen verloren Bleibt beim Abtrennen erhalten
Standard-Tastenkombination Ctrl-a Ctrl-b
Konfiguration .screenrc (eigene Syntax) .tmux.conf (eigene Syntax)
Plugin-Ökosystem Keines Groß (tpm, tmux-resurrect usw.)
RHEL/Fedora-Status Seit RHEL 8 entfernt Standardmäßig enthalten
Seriell-Port-Unterstützung Ja (screen /dev/ttyUSB0) Nein
Lernressourcen Ausgereift, aber veraltet Zahlreich und aktuell

Wann Screen verwenden:

  • Sie brauchen seriellen Port-Zugang (screen /dev/ttyUSB0 115200)
  • Sie arbeiten auf einem älteren System, auf dem Screen vorinstalliert ist und tmux nicht
  • Sie brauchen einen einfachen Abtrennen/Wiederverbinden-Workflow und nichts weiter

Wann tmux verwenden:

  • Sie möchten persistente Pane-Layouts, die das Abtrennen überleben
  • Sie möchten ein aktives Plugin-Ökosystem
  • Sie arbeiten auf RHEL 8+ oder Fedora (Screen ist nicht in den Repositories)
  • Sie brauchen skriptgesteuerte Fenster-/Pane-Erstellung

Beide Tools bewältigen den Hauptanwendungsfall (Prozesse nach SSH-Trennung am Laufen halten) gleich gut. Wenn Sie neu anfangen, hat tmux mehr Dynamik und bessere Standardeinstellungen. Wenn Screen bereits Teil Ihres Workflows ist, gibt es keinen dringenden Grund zu wechseln. Lesen Sie unser tmux auf einem Linux-VPS verwenden für eine ausführliche Anleitung.

Fehlerbehebung bei gängigen Screen-Problemen

"There is a screen on ... (Attached)", aber Sie sind nicht verbunden

Das passiert nach einem SSH-Absturz. Die alte Verbindung hat sich nicht sauber abgetrennt.

screen -D -r session_name

Dies erzwingt die Abtrennung der Geisterverbindung und verbindet Ihr Terminal neu.

Tote Sitzungen in der Liste

Manchmal zeigen Sitzungen nach einem Serverneustart oder -absturz (Dead) an.

screen -wipe

Ausgabe:

There are screens on:
	12345.old_session	(Dead ???)
Removed dead screens.
1 socket wiped out.

Dies entfernt veraltete Socket-Dateien. Führen Sie screen -ls aus, um zu prüfen, ob sie entfernt wurden.

Terminal ist eingefroren / nimmt keine Eingaben an

Sie haben vermutlich versehentlich Ctrl-a s gedrückt. Das ist das XOFF-Flusssteuerungssignal, das die Terminalausgabe pausiert.

Lösung:

Ctrl-a q

Dies sendet XON, um die Ausgabe fortzusetzen. Wenn Sie die Flusssteuerung nie verwenden, deaktivieren Sie sie in Ihrer .screenrc:

defflow off

Screen zeigt verzerrte Zeichen

Ihr Terminal und Screen sind sich über Kodierung oder Farbunterstützung nicht einig. Fügen Sie dies Ihrer .screenrc hinzu:

defutf8 on
term screen-256color

Starten Sie dann eine neue Sitzung. Bestehende Sitzungen übernehmen keine .screenrc-Änderungen.

Wo sind die Screen-Logs?

Screen schreibt selbst kein Systemlog. Um die Protokollierung pro Fenster zu aktivieren:

Ctrl-a H

Dies schaltet die Protokollierung für das aktuelle Fenster um. Logs werden als screenlog.N in dem Verzeichnis gespeichert, in dem Sie die Sitzung gestartet haben. Das N entspricht der Fensternummer.

Um zu prüfen, ob Screen auf Systemebene läuft:

ps aux | grep screen

CLI-Flags-Referenz

Flag Beschreibung Beispiel
-S name Benannte Sitzung starten screen -S myapp
-r [name] An abgetrennte Sitzung wieder verbinden screen -r myapp
-d -r name Gegenseite abtrennen, hier verbinden screen -d -r myapp
-D -r name Abtrennung erzwingen und verbinden screen -D -r myapp
-x name An bereits verbundene Sitzung anhängen (Multi-Display) screen -x myapp
-ls Alle Sitzungen auflisten screen -ls
-wipe Tote Sitzungen entfernen screen -wipe
-X command Befehl an laufende Sitzung senden screen -S myapp -X quit
-dmS name Abgetrennte benannte Sitzung starten screen -dmS daemon
-L Protokollierung von Anfang an aktivieren screen -L -S myapp

Eine Sitzung im abgetrennten Modus starten (-dmS) ist nützlich für Skripte und systemd-Units, die Screen-Sitzungen ohne interaktives Terminal starten müssen.

Bereit, es selbst auszuprobieren?

Linux-VPS in Sekunden einsatzbereit.