GNU Screen gebruiken op een Linux VPS
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 ngaat naar het volgende vensterCtrl-a pgaat naar het vorige vensterCtrl-a 0totCtrl-a 9springt naar venster op nummerCtrl-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/sysloguit - Rechtsonder: voer
htopuit
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:
Ctrl-a Som horizontaal te splitsen- In de bovenregio:
tail -f /var/log/nginx/access.log Ctrl-a Tabom naar onder te gaanCtrl-a cvoor een nieuw venstertail -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. →