GNU Screen gebruiken op een Linux VPS

13 min leestijd·Matthieu·gnu-screenterminal-multiplexerlinuxvpssshscreen-session|

Leer GNU Screen van installatie tot dagelijks gebruik. Beheer sessies, splits, kopieerstand en .screenrc-configuratie. Houd processen draaiend na SSH-verbreken op Debian 12 en Ubuntu 24.04.

Je SSH't naar je server, start een langlopend proces en je verbinding valt weg. Het proces stopt. GNU Screen lost dit op. Het draait terminalsessies die onafhankelijk van je SSH-verbinding blijven bestaan. Je kunt loskoppelen, de verbinding sluiten, uren later opnieuw verbinden en precies verder gaan waar je gebleven was.

Wat is GNU Screen?

GNU Screen is een terminal multiplexer. Het maakt virtuele terminalsessies die op de server draaien, onafhankelijk van je SSH-verbinding. Binnen een Screen-sessie kun je meerdere vensters openen, je terminal in regio's splitsen en door eerdere uitvoer scrollen.

Screen zit tussen je SSH-client en de shell. Wanneer je loskoppelt van een Screen-sessie, blijven alle programma's erin draaien. Wanneer je opnieuw koppelt, zie je dezelfde uitvoer, dezelfde draaiende processen, dezelfde staat. Dit maakt het onmisbaar voor werk op een remote VPS waar SSH-verbindingen onverwacht kunnen wegvallen.

Screen bestaat sinds 1987. Het zit in de standaard repositories van elke grote Linux-distributie. De huidige versies zijn 4.9.0 op Debian 12 en 4.9.1 op Ubuntu 24.04.

Hoe installeer je GNU Screen op Debian en Ubuntu?

Screen is beschikbaar in de standaard repositories op zowel Debian 12 als Ubuntu 24.04. Installeer het met een enkel apt-commando. Op de meeste minimale VPS-images is het niet voorgeinstalleerd.

Werk de pakketindex bij en installeer Screen:

sudo apt update && sudo apt install -y screen

Bevestig de installatie:

screen --version

Op Debian 12 zie je:

Screen version 4.09.00 (GNU) 30-Jan-21

Op Ubuntu 24.04:

Screen version 4.09.01 (GNU) 20-Aug-23

Als je een versienummer ziet, is Screen klaar voor gebruik.

Hoe start en benoem je een Screen-sessie?

Om een nieuwe Screen-sessie te starten, voer je screen uit. Maar starten zonder naam maakt het later lastiger om terug te vinden. Geef je sessies altijd een naam met de -S vlag.

Start een benoemde sessie:

screen -S myproject

Je terminal wordt leeggemaakt en je bevindt je nu in een Screen-sessie. Alles wat je hier uitvoert, blijft bestaan zelfs als je SSH-verbinding wegvalt.

Test of je in een Screen-sessie zit:

echo $STY

Dit toont de sessienaam. Als het iets als 12345.myproject laat zien, zit je in Screen. Als er niets verschijnt, zit je niet in een sessie.

Screen-commandoreferentie

Alle Screen-commando's beginnen met de prefix-toets Ctrl-a, gevolgd door een andere toets. Deze prefix wordt het "escape character" genoemd.

Sneltoets Actie Opmerkingen
Ctrl-a d Loskoppelen van sessie Sessie blijft draaien
Ctrl-a c Nieuw venster maken Opent een nieuwe shell
Ctrl-a n Volgend venster Bladert vooruit
Ctrl-a p Vorig venster Bladert achteruit
Ctrl-a " Vensterlijst tonen Selecteer met pijltoetsen
Ctrl-a A Huidig venster hernoemen Typ nieuwe naam, druk op Enter
Ctrl-a k Huidig venster sluiten Vraagt om bevestiging
Ctrl-a S Horizontaal splitsen Hoofdletter S
Ctrl-a | Verticaal splitsen Pipe-teken
Ctrl-a Tab Wisselen tussen regio's Bladert door splits
Ctrl-a X Huidige regio sluiten Hoofdletter X
Ctrl-a [ Kopieerstand openen Ook Ctrl-a Esc
Ctrl-a ] Gekopieerde tekst plakken Plakt vanuit buffer
Ctrl-a ? Sneltoetsen tonen Ingebouwde hulp

Hoe koppel je los en koppel je opnieuw aan een Screen-sessie?

Dit is de kernworkflow. Je start een proces in Screen, koppelt los en het proces blijft draaien. Later koppel je opnieuw om het te controleren.

Loskoppelen van je huidige sessie:

Druk op Ctrl-a en dan d.

Je ziet:

[detached from 12345.myproject]

Je sessie draait nu op de achtergrond. Je kunt je SSH-verbinding veilig sluiten.

Alle sessies weergeven:

screen -ls

Uitvoer:

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

Opnieuw koppelen aan een sessie:

screen -r myproject

Je bent terug in je sessie met alle uitvoer en processen intact.

Als je slechts een losgekoppelde sessie hebt, werkt screen -r zonder naam ook.

Hoe forceer je opnieuw koppelen als een sessie al gekoppeld is?

Soms toont een sessie (Attached) terwijl je niet verbonden bent. Dit gebeurt wanneer SSH wegvalt zonder een nette afkoppeling. Screen denkt nog dat de oude verbinding actief is.

Gebruik deze beslistabel om de juiste vlaggen te kiezen:

Scenario Commando Wat het doet
Sessie toont "Attached" maar je bent niet verbonden screen -D -r myproject Forceert loskoppeling van de oude verbinding, koppelt hier opnieuw
Sessie toont "Attached" en je wilt meekijken screen -x myproject Koppelt zonder de andere verbinding los te koppelen (multi-display)
Sessie toont "Attached", je wilt deze overnemen screen -d -r myproject Koppelt de remote kant los, koppelt lokaal opnieuw

Het meest voorkomende geval is screen -D -r. Dit handelt verouderde verbindingen van gecrashte SSH-sessies af.

Controleer de sessiestatus na opnieuw koppelen:

screen -ls

De sessie zou nu (Attached) moeten tonen.

Hoe houd je een proces draaiend na SSH-verbreken?

Start een Screen-sessie, voer je proces erin uit en koppel los. Het proces overleeft SSH-verbreken, netwerkproblemen en zelfs het dichtklappen van je laptop.

Hier is de volledige workflow:

screen -S training

Start in de sessie je langlopend proces:

python3 train_model.py --epochs 100

Koppel los met Ctrl-a d. Je ziet:

[detached from 12345.training]

Sluit SSH. Ga koffie halen. Kom later terug:

ssh user@your-server
screen -r training

Je trainingstaak draait nog steeds en je kunt alle uitvoer zien die het produceerde terwijl je weg was.

Hoe beheer je meerdere vensters in Screen?

Een enkele Screen-sessie kan meerdere vensters bevatten. Elk venster is een onafhankelijke shell. Zie vensters als tabbladen in een webbrowser.

Maak een nieuw venster in je sessie:

Druk op Ctrl-a c.

Er opent een nieuwe shell. Je vorige venster is er nog. Wissel tussen vensters:

  • Ctrl-a n gaat naar het volgende venster
  • Ctrl-a p gaat naar het vorige venster
  • Ctrl-a 0 tot Ctrl-a 9 springt naar venster op nummer
  • Ctrl-a " toont een lijst van alle vensters. Gebruik pijltoetsen om er een te selecteren en druk op Enter.

Hernoem het huidige venster voor makkelijkere identificatie:

Druk op Ctrl-a A, typ een naam en druk op Enter.

Controleer in welk venster je zit:

Druk op Ctrl-a " om de vensterlijst te zien. Het huidige venster heeft een asterisk.

Sluit een venster door exit te typen in de shell, of druk op Ctrl-a k en bevestig met y.

Hoe splits je de terminal in regio's?

Screen kan je terminal in meerdere regio's splitsen, elk met een ander venster. Dit is handig voor het monitoren van logs in het ene paneel terwijl je in het andere werkt.

Stap voor stap een monitoringlayout bouwen

Laten we een 3-paneel layout bouwen: een hoofdshell bovenaan, logs linksonder en systeemmonitoring rechtsonder.

Stap 1: Start een benoemde sessie:

screen -S monitor

Stap 2: Splits horizontaal. Druk op Ctrl-a S (hoofdletter S).

Je terminal splitst in een boven- en onderregio. De cursor blijft in de bovenregio.

Stap 3: Ga naar de onderregio. Druk op Ctrl-a Tab.

De onderregio is leeg. Je moet er een venster aan toewijzen.

Stap 4: Maak een nieuw venster in de onderregio. Druk op Ctrl-a c.

Nu heb je een shell in de onderregio.

Stap 5: Splits de onderregio verticaal. Druk op Ctrl-a | (pipe-teken).

De onderste helft heeft nu een linker- en rechtersectie. Ga naar de nieuwe rechtersectie met Ctrl-a Tab.

Stap 6: Maak nog een venster. Druk op Ctrl-a c.

Stap 7: Start je monitoringtools. Navigeer tussen regio's met Ctrl-a Tab:

  • Bovenregio: je hoofdwerkshell
  • Linksonder: voer tail -f /var/log/syslog uit
  • Rechtsonder: voer htop uit

Regiobeheercommando's

Sneltoets Actie
Ctrl-a S Horizontaal splitsen
Ctrl-a | Verticaal splitsen
Ctrl-a Tab Naar volgende regio
Ctrl-a X Huidige regio sluiten (venster blijft open)
Ctrl-a Q Alle regio's sluiten behalve huidige
Ctrl-a :resize +5 Huidige regio 5 regels vergroten
Ctrl-a :resize -5 Huidige regio 5 regels verkleinen

Goed om te weten: Screen bewaart je regiolayout niet wanneer je loskoppelt. Na opnieuw koppelen zijn alle splits weg en zie je een enkel venster. De vensters zelf (en hun processen) blijven behouden. Je moet handmatig opnieuw splitsen. Als je persistente layouts wilt, voeg dan layout-commando's toe aan je .screenrc of overweeg Tmux gebruiken op een Linux VPS, dat paneel-layouts behoudt bij loskoppelen.

Hoe gebruik je kopieerstand en scrollback?

Standaard kun je niet omhoog scrollen in een Screen-sessie met je muiswiel of Shift-PgUp. Screen vangt alle invoer op. Om eerdere uitvoer te bekijken, moet je de kopieerstand (copy mode) openen.

Open kopieerstand door Ctrl-a [ of Ctrl-a Esc te drukken.

Je bevindt je nu in een vi-achtige navigatiemodus:

Toets Actie
Pijltoetsen Cursor verplaatsen
h/j/k/l Cursor verplaatsen (vi-stijl)
Ctrl-u Halve pagina omhoog scrollen
Ctrl-d Halve pagina omlaag scrollen
0 Begin van regel
$ Einde van regel
g Ga naar bovenkant scrollback
G Ga naar onderkant scrollback
/ Vooruit zoeken
? Achteruit zoeken
Space Markering zetten (begin/einde selectie)
Enter Geselecteerde tekst kopieren en kopieerstand verlaten
Esc Kopieerstand verlaten zonder kopieren

Om tekst te kopieren: open kopieerstand, ga naar het begin van de gewenste tekst, druk op Space om de eerste markering te zetten, ga naar het einde, druk nogmaals op Space. De tekst wordt naar Screen's plakbuffer gekopieerd.

Om te plakken: druk op Ctrl-a ].

De standaard scrollback-buffer bevat 100 regels. Dat is te weinig voor echt werk. Vergroot het in je .screenrc:

defscrollback 10000

Dit geeft je 10.000 regels scrollback per venster.

Hoe configureer je Screen met .screenrc?

Screen leest ~/.screenrc bij het opstarten. Dit bestand regelt standaardgedrag, sneltoetsen, de statusbalk en opstartvensters.

Hoe ziet een goede .screenrc eruit?

Hier is een complete .screenrc met uitleg bij elke instelling:

# 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

Maak dit bestand aan:

nano ~/.screenrc

Plak de configuratie hierboven en sla op.

Hardstatus-formatstring uitgelegd

De hardstatus-regel is het krachtigste (en meest verwarrende) onderdeel van .screenrc. Dit is wat elk token in het voorbeeld betekent:

Token Betekenis
%{= kG} Kleur instellen: zwarte achtergrond, felgroene tekst
%H Systeemhostnaam
%-Lw Alle vensters voor het huidige
%{r}(%{W}%n*%f%t%{r}) Huidig venster: rode haakjes, wit vensternummer + vlaggen + titel
%+Lw Alle vensters na het huidige
%Y-%m-%d Datum in JJJJ-MM-DD formaat
%c Huidige tijd in UU:MM

Kleurcodes: k zwart, r rood, g groen, y geel, b blauw, m magenta, c cyaan, w wit. Hoofdletters voor felle/vetgedrukte varianten.

Start een nieuwe sessie om de statusbalk te zien:

screen -S test

Je zou een groene statusbalk onderaan moeten zien met je hostnaam, vensterlijst en de huidige datum en tijd.

De escape-toets wijzigen

Als Ctrl-a conflicteert met je workflow (het is ook "ga naar het begin van de regel" in bash), kun je het opnieuw toewijzen:

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

Na deze wijziging gebruiken alle Screen-commando's Ctrl-j in plaats van Ctrl-a. Kies een toets die je zelden gebruikt.

Veelgebruikte GNU Screen workflows op een VPS

Een deployment draaiend houden

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

Later controleren:

screen -r deploy

Meerdere logbestanden monitoren

screen -S logs

In de sessie:

  1. Ctrl-a S om horizontaal te splitsen
  2. In de bovenregio: tail -f /var/log/nginx/access.log
  3. Ctrl-a Tab om naar onder te gaan
  4. Ctrl-a c voor een nieuw venster
  5. tail -f /var/log/nginx/error.log

Een lange trainingstaak draaien (AI-ontwikkelaars)

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

De -u vlag schakelt Python output buffering uit zodat je uitvoer in realtime ziet wanneer je opnieuw koppelt. Pipen door tee slaat uitvoer op naar een bestand als backup.

Snel loskoppelen en opnieuw verbinden na SSH-verbreken

Als je SSH wegvalt terwijl je in Screen zit, verbind je gewoon opnieuw:

ssh user@your-server
screen -D -r

screen -D -r vindt je sessie, forceert loskoppeling van de verouderde verbinding en koppelt opnieuw.

GNU Screen vs tmux: welke moet je gebruiken?

Screen en tmux zijn beide terminal multiplexers. Ze lossen hetzelfde kernprobleem op. Hier is een eerlijke vergelijking:

Functie GNU Screen tmux
Eerste release 1987 2007
Licentie GPL-3.0 ISC (BSD-achtig)
Actieve ontwikkeling Langzaam (5.0 uitgebracht aug 2024 na jaren inactiviteit) Actief (regelmatige releases)
Paneel-layout persistentie Verloren bij loskoppelen Behouden bij loskoppelen
Standaard toetsprefix Ctrl-a Ctrl-b
Configuratie .screenrc (eigen syntax) .tmux.conf (eigen syntax)
Plugin-ecosysteem Geen Groot (tpm, tmux-resurrect, enz.)
RHEL/Fedora status Verwijderd sinds RHEL 8 Standaard meegeleverd
Seriele poort ondersteuning Ja (screen /dev/ttyUSB0) Nee
Leermiddelen Volwassen maar verouderd Overvloedig en actueel

Wanneer Screen gebruiken:

  • Je hebt seriele poorttoegang nodig (screen /dev/ttyUSB0 115200)
  • Je werkt op een ouder systeem waar Screen voorgeinstalleerd is en tmux niet
  • Je hebt een simpele loskoppel/opnieuw-koppel workflow nodig en verder niets

Wanneer tmux gebruiken:

  • Je wilt persistente paneel-layouts die loskoppelen overleven
  • Je wilt een actief plugin-ecosysteem
  • Je werkt op RHEL 8+ of Fedora (Screen zit niet in de repositories)
  • Je hebt gescripte venster/paneel-creatie nodig

Beide tools handelen het kerngebruik (processen levend houden na SSH-verbreken) even goed af. Als je fris begint, heeft tmux meer momentum en betere standaardinstellingen. Als Screen al onderdeel is van je workflow, is er geen dringende reden om te wisselen. Bekijk onze Tmux gebruiken op een Linux VPS voor een volledige uitleg.

Veelvoorkomende Screen-problemen oplossen

"There is a screen on ... (Attached)" maar je bent niet verbonden

Dit gebeurt na een SSH-crash. De oude verbinding heeft niet netjes losgekoppeld.

screen -D -r session_name

Dit forceert loskoppeling van de spookverbinding en koppelt je terminal opnieuw.

Dode sessies in de lijst

Soms tonen sessies (Dead) na een serverherstart of crash.

screen -wipe

Uitvoer:

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

Dit verwijdert verouderde socketbestanden. Voer screen -ls uit om te bevestigen dat ze weg zijn.

Terminal is bevroren / accepteert geen invoer

Je hebt waarschijnlijk per ongeluk Ctrl-a s ingedrukt. Dit is het XOFF flow control-signaal dat terminal-uitvoer pauzeert.

Oplossing:

Ctrl-a q

Dit stuurt XON om uitvoer te hervatten. Als je flow control nooit gebruikt, schakel het uit in je .screenrc:

defflow off

Screen toont onleesbare tekens

Je terminal en Screen zijn het niet eens over encoding of kleurondersteuning. Voeg toe aan je .screenrc:

defutf8 on
term screen-256color

Start dan een nieuwe sessie. Bestaande sessies nemen .screenrc-wijzigingen niet over.

Waar zijn Screen's logs?

Screen logt zelf niet naar een systeemlog. Om logging per venster in te schakelen:

Ctrl-a H

Dit schakelt logging in/uit voor het huidige venster. Logs worden opgeslagen als screenlog.N in de map waar je de sessie startte. De N komt overeen met het vensternummer.

Om te controleren of Screen op systeemniveau draait:

ps aux | grep screen

Veelgebruikte CLI-vlaggen referentie

Vlag Beschrijving Voorbeeld
-S name Start een benoemde sessie screen -S myapp
-r [name] Opnieuw koppelen aan losgekoppelde sessie screen -r myapp
-d -r name Remote loskoppelen, hier koppelen screen -d -r myapp
-D -r name Geforceerd loskoppelen en opnieuw koppelen screen -D -r myapp
-x name Koppelen aan reeds gekoppelde sessie (multi-display) screen -x myapp
-ls Alle sessies weergeven screen -ls
-wipe Dode sessies verwijderen screen -wipe
-X command Commando sturen naar draaiende sessie screen -S myapp -X quit
-dmS name Start een losgekoppelde benoemde sessie screen -dmS daemon
-L Logging inschakelen vanaf start screen -L -S myapp

Een sessie starten in losgekoppelde modus (-dmS) is handig voor scripts en systemd-units die Screen-sessies moeten starten zonder een interactieve terminal.

Klaar om het zelf te proberen?

Uw Linux VPS is in enkele seconden klaar.