Come usare GNU Screen su un VPS Linux
Impara GNU Screen dall'installazione all'uso quotidiano. Gestisci sessioni, dividi regioni, configura .screenrc e mantieni i processi attivi dopo la disconnessione SSH su Debian 12 e Ubuntu 24.04.
Come usare GNU Screen su un VPS Linux
Ti connetti via SSH al server, avvii un processo di lunga durata e la connessione cade. Il processo muore. GNU Screen risolve questo problema. Esegue sessioni terminale che persistono indipendentemente dalla connessione SSH. Puoi fare il detach, disconnetterti, riconnetterti ore dopo e riprendere esattamente da dove avevi lasciato.
Questo tutorial copre GNU Screen dall'installazione ai workflow quotidiani su Debian 12 e Ubuntu 24.04. Imparerai la gestione delle sessioni, la gestione delle finestre, le regioni split, la copy mode e la personalizzazione di .screenrc.
Cos'e GNU Screen?
GNU Screen e un terminal multiplexer. Crea sessioni terminale virtuali che girano sul server, indipendenti dalla connessione SSH. All'interno di una sessione Screen, puoi aprire piu finestre, dividere il terminale in regioni e scorrere la cronologia dell'output.
Screen si posiziona tra il client SSH e la shell. Quando fai il detach da una sessione Screen, tutti i programmi al suo interno continuano a girare. Quando fai il reattach, vedi lo stesso output, gli stessi processi in esecuzione, lo stesso stato. Questo lo rende indispensabile per qualsiasi lavoro su un VPS remoto dove le connessioni SSH possono cadere inaspettatamente.
Screen esiste dal 1987. Si trova nei repository predefiniti di ogni distribuzione Linux principale. Le versioni attuali sono 4.9.0 su Debian 12 e 4.9.1 su Ubuntu 24.04.
Come installare GNU Screen su Debian e Ubuntu?
Screen e disponibile nei repository predefiniti sia su Debian 12 che su Ubuntu 24.04. Si installa con un singolo comando apt. Nella maggior parte delle immagini VPS minimali non e preinstallato.
Aggiorna l'indice dei pacchetti e installa Screen:
sudo apt update && sudo apt install -y screen
Verifica l'installazione:
screen --version
Su Debian 12 vedrai:
Screen version 4.09.00 (GNU) 30-Jan-21
Su Ubuntu 24.04:
Screen version 4.09.01 (GNU) 20-Aug-23
Se vedi un numero di versione, Screen e pronto all'uso.
Come avviare e nominare una sessione Screen?
Per avviare una nuova sessione Screen, esegui screen. Ma avviare senza un nome rende piu difficile identificarla in seguito. Nomina sempre le sessioni con il flag -S.
Avvia una sessione con nome:
screen -S myproject
Il terminale si svuota e ora sei dentro una sessione Screen. Tutto cio che esegui qui persiste anche se la connessione SSH cade.
Verifica di essere dentro una sessione Screen:
echo $STY
Questo stampa il nome della sessione. Se mostra qualcosa come 12345.myproject, sei dentro Screen. Se non stampa nulla, non sei in una sessione.
Riferimento comandi Screen
Tutti i comandi Screen iniziano con il tasto prefisso Ctrl-a, seguito da un altro tasto. Questo prefisso e chiamato "escape character".
| Scorciatoia | Azione | Note |
|---|---|---|
Ctrl-a d |
Detach dalla sessione | La sessione continua a girare |
Ctrl-a c |
Crea una nuova finestra | Apre una nuova shell |
Ctrl-a n |
Finestra successiva | Scorre in avanti |
Ctrl-a p |
Finestra precedente | Scorre all'indietro |
Ctrl-a " |
Lista finestre | Seleziona con i tasti freccia |
Ctrl-a A |
Rinomina la finestra corrente | Digita il nuovo nome, premi Invio |
Ctrl-a k |
Chiudi la finestra corrente | Chiede conferma |
Ctrl-a S |
Split orizzontale | S maiuscola |
Ctrl-a | |
Split verticale | Carattere pipe |
Ctrl-a Tab |
Passa tra le regioni | Scorre tra gli split |
Ctrl-a X |
Chiudi la regione corrente | X maiuscola |
Ctrl-a [ |
Entra in copy mode | Anche Ctrl-a Esc |
Ctrl-a ] |
Incolla il testo copiato | Incolla dal buffer |
Ctrl-a ? |
Mostra le associazioni tasti | Help integrato |
Come fare detach e reattach di una sessione Screen?
Questo e il workflow fondamentale. Avvii un processo in Screen, fai il detach, e il processo continua a girare. Piu tardi, fai il reattach per controllarne lo stato.
Detach dalla sessione corrente:
Premi Ctrl-a poi d.
Vedrai:
[detached from 12345.myproject]
La sessione ora gira in background. Puoi chiudere la connessione SSH in sicurezza.
Lista di tutte le sessioni:
screen -ls
Output:
There are screens on:
12345.myproject (03/19/2026 02:15:30 PM) (Detached)
1 Sockets in /run/screen/S-your_user.
Reattach a una sessione:
screen -r myproject
Sei di nuovo nella tua sessione con tutto l'output e i processi intatti.
Se hai una sola sessione in stato detached, screen -r senza nome funziona ugualmente.
Come forzare il reattach quando una sessione risulta gia collegata?
A volte una sessione mostra (Attached) anche se non sei connesso. Questo succede quando SSH cade senza una disconnessione pulita. Screen pensa ancora che la vecchia connessione sia attiva.
Usa questa tabella decisionale per scegliere i flag corretti:
| Scenario | Comando | Cosa fa |
|---|---|---|
| La sessione mostra "Attached" ma non sei connesso | screen -D -r myproject |
Forza il detach della vecchia connessione, poi fa il reattach qui |
| La sessione mostra "Attached" e vuoi condividerla | screen -x myproject |
Fa il reattach senza fare il detach dell'altra connessione (multi-display) |
| La sessione mostra "Attached" e vuoi prenderne il controllo | screen -d -r myproject |
Fa il detach del lato remoto, fa il reattach localmente |
Il caso piu comune e screen -D -r. Gestisce le connessioni stale da sessioni SSH interrotte.
Verifica lo stato della sessione dopo il reattach:
screen -ls
La sessione dovrebbe ora mostrare (Attached).
Come mantenere un processo attivo dopo la disconnessione SSH?
Avvia una sessione Screen, esegui il processo al suo interno e fai il detach. Il processo sopravvive alle disconnessioni SSH, ai problemi di rete e anche alla chiusura del laptop.
Ecco il workflow completo:
screen -S training
Dentro la sessione, avvia il processo di lunga durata:
python3 train_model.py --epochs 100
Fai il detach con Ctrl-a d. Vedrai:
[detached from 12345.training]
Chiudi SSH. Vai a prendere un caffe. Torna piu tardi:
ssh user@your-server
screen -r training
Il tuo job di training sta ancora girando, e puoi vedere tutto l'output prodotto mentre eri via.
Come gestire piu finestre in Screen?
Una singola sessione Screen puo contenere piu finestre. Ogni finestra e una shell indipendente. Pensa alle finestre come schede in un browser web.
Crea una nuova finestra dentro la sessione:
Premi Ctrl-a c.
Si apre una nuova shell. La finestra precedente e ancora li. Passa tra le finestre:
Ctrl-a npassa alla finestra successivaCtrl-a ppassa alla finestra precedenteCtrl-a 0fino aCtrl-a 9salta alla finestra per numeroCtrl-a "mostra la lista di tutte le finestre. Usa i tasti freccia per selezionarne una e premi Invio.
Rinomina la finestra corrente per identificarla piu facilmente:
Premi Ctrl-a A, digita un nome e premi Invio.
Controlla in quale finestra ti trovi:
Premi Ctrl-a " per vedere la lista finestre. La finestra corrente ha un asterisco.
Chiudi una finestra digitando exit nella sua shell, o premi Ctrl-a k e conferma con y.
Come dividere il terminale in regioni?
Screen puo dividere il terminale in piu regioni, ciascuna che mostra una finestra diversa. Utile per monitorare i log in un pannello mentre lavori in un altro.
Costruire un layout di monitoraggio passo dopo passo
Costruiamo un layout a 3 pannelli: una shell principale in alto, log in basso a sinistra e monitoraggio di sistema in basso a destra.
Passo 1: Avvia una sessione con nome:
screen -S monitor
Passo 2: Split orizzontale. Premi Ctrl-a S (S maiuscola).
Il terminale si divide in una regione superiore e una inferiore. Il cursore resta nella regione superiore.
Passo 3: Spostati nella regione inferiore. Premi Ctrl-a Tab.
La regione inferiore e vuota. Devi assegnarle una finestra.
Passo 4: Crea una nuova finestra nella regione inferiore. Premi Ctrl-a c.
Ora hai una shell nella regione inferiore.
Passo 5: Dividi la regione inferiore verticalmente. Premi Ctrl-a | (carattere pipe).
La meta inferiore ora ha una sezione sinistra e una destra. Spostati nella nuova sezione destra con Ctrl-a Tab.
Passo 6: Crea un'altra finestra. Premi Ctrl-a c.
Passo 7: Avvia i tuoi strumenti di monitoraggio. Naviga tra le regioni con Ctrl-a Tab:
- Regione superiore: la tua shell di lavoro principale
- Basso-sinistra: esegui
tail -f /var/log/syslog - Basso-destra: esegui
htop
Comandi gestione regioni
| Scorciatoia | Azione |
|---|---|
Ctrl-a S |
Split orizzontale |
Ctrl-a | |
Split verticale |
Ctrl-a Tab |
Passa alla regione successiva |
Ctrl-a X |
Chiudi la regione corrente (la finestra resta aperta) |
Ctrl-a Q |
Chiudi tutte le regioni tranne la corrente |
Ctrl-a :resize +5 |
Ingrandisci la regione corrente di 5 righe |
Ctrl-a :resize -5 |
Riduci la regione corrente di 5 righe |
Una cosa da sapere: Screen non salva il layout delle regioni quando fai il detach. Al reattach, tutti gli split sono persi e vedi una singola finestra. Le finestre stesse (e i loro processi) vengono preservate. Devi rifare lo split manualmente. Se vuoi layout persistenti, aggiungi comandi layout al tuo .screenrc o considera tmux, che preserva il layout dei pannelli al detach.
Come usare la copy mode e lo scrollback?
Per impostazione predefinita, non puoi scorrere verso l'alto in una sessione Screen con la rotella del mouse o Shift-PgUp. Screen cattura tutto l'input. Per visualizzare l'output precedente, devi entrare in copy mode.
Entra in copy mode premendo Ctrl-a [ o Ctrl-a Esc.
Ora sei in una modalita di navigazione simile a vi:
| Tasto | Azione |
|---|---|
| Tasti freccia | Muovi il cursore |
h/j/k/l |
Muovi il cursore (stile vi) |
Ctrl-u |
Scorri in su di mezza pagina |
Ctrl-d |
Scorri in giu di mezza pagina |
0 |
Inizio riga |
$ |
Fine riga |
g |
Vai all'inizio dello scrollback |
G |
Vai alla fine dello scrollback |
/ |
Cerca in avanti |
? |
Cerca all'indietro |
Space |
Imposta marcatore (inizio/fine selezione) |
Enter |
Copia il testo selezionato ed esci dalla copy mode |
Esc |
Esci dalla copy mode senza copiare |
Per copiare testo: entra in copy mode, spostati all'inizio del testo desiderato, premi Space per impostare il primo marcatore, spostati alla fine, premi di nuovo Space. Il testo viene copiato nel buffer di Screen.
Per incollare: premi Ctrl-a ].
Il buffer di scrollback predefinito contiene 100 righe. Troppo poche per un uso reale. Aumentalo nel tuo .screenrc:
defscrollback 10000
Questo ti da 10.000 righe di scrollback per finestra.
Come configurare Screen con .screenrc?
Screen legge ~/.screenrc all'avvio. Questo file controlla il comportamento predefinito, le associazioni dei tasti, la barra di stato e le finestre di avvio.
Come si presenta un buon .screenrc?
Ecco un .screenrc completo con ogni direttiva spiegata:
# 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
Crea questo file:
nano ~/.screenrc
Incolla la configurazione qui sopra e salva.
Spiegazione della stringa hardstatus
La riga hardstatus e la parte piu potente (e confusa) di .screenrc. Ecco cosa significa ogni token nell'esempio:
| Token | Significato |
|---|---|
%{= kG} |
Imposta colore: sfondo nero, testo verde brillante |
%H |
Hostname del sistema |
%-Lw |
Tutte le finestre prima di quella corrente |
%{r}(%{W}%n*%f%t%{r}) |
Finestra corrente: parentesi rosse, numero finestra bianco + flag + titolo |
%+Lw |
Tutte le finestre dopo quella corrente |
%Y-%m-%d |
Data in formato AAAA-MM-GG |
%c |
Ora corrente in HH:MM |
Codici colore: k nero, r rosso, g verde, y giallo, b blu, m magenta, c ciano, w bianco. Maiuscolo per varianti brillanti/grassetto.
Avvia una nuova sessione per vedere la barra di stato:
screen -S test
Dovresti vedere una barra di stato verde in basso che mostra l'hostname, la lista finestre e la data e ora correnti.
Cambiare il tasto escape
Se Ctrl-a entra in conflitto con il tuo workflow (e anche "vai a inizio riga" in bash), puoi riassegnarlo:
# Use Ctrl-j as the escape key instead of Ctrl-a
escape ^Jj
Dopo questa modifica, tutti i comandi Screen usano Ctrl-j invece di Ctrl-a. Scegli un tasto che usi raramente.
Quali sono i workflow comuni con GNU Screen su un VPS?
Mantenere un deployment attivo
screen -S deploy
./deploy.sh --production
# Ctrl-a d to detach
Controlla piu tardi:
screen -r deploy
Monitorare piu file di log
screen -S logs
Dentro la sessione:
Ctrl-a Sper lo split orizzontale- Nella regione superiore:
tail -f /var/log/nginx/access.log Ctrl-a Tabper spostarti in bassoCtrl-a cper una nuova finestratail -f /var/log/nginx/error.log
Eseguire un job di training lungo (sviluppatori AI)
screen -S training
python3 -u train.py --model llama --epochs 50 2>&1 | tee training.log
# Ctrl-a d to detach
Il flag -u disabilita il buffering dell'output di Python cosi vedi l'output in tempo reale quando fai il reattach. Il piping attraverso tee salva l'output su file come backup.
Detach rapido e riconnessione dopo caduta SSH
Se la connessione SSH cade mentre sei dentro Screen, riconnettiti semplicemente:
ssh user@your-server
screen -D -r
screen -D -r trova la tua sessione, forza il detach della connessione stale e fa il reattach.
GNU Screen vs tmux: quale usare?
Screen e tmux sono entrambi terminal multiplexer. Risolvono lo stesso problema di base. Ecco un confronto onesto:
| Caratteristica | GNU Screen | tmux |
|---|---|---|
| Prima release | 1987 | 2007 |
| Licenza | GPL-3.0 | ISC (simile a BSD) |
| Sviluppo attivo | Lento (5.0 rilasciato ad agosto 2024 dopo anni di inattivita) | Attivo (release regolari) |
| Persistenza layout pannelli | Perso al detach | Preservato al detach |
| Prefisso tasti predefinito | Ctrl-a |
Ctrl-b |
| Configurazione | .screenrc (sintassi custom) |
.tmux.conf (sintassi custom) |
| Ecosistema plugin | Nessuno | Ampio (tpm, tmux-resurrect, ecc.) |
| Stato RHEL/Fedora | Rimosso da RHEL 8 | Incluso di default |
| Supporto porta seriale | Si (screen /dev/ttyUSB0) |
No |
| Risorse formative | Mature ma datate | Abbondanti e aggiornate |
Quando usare Screen:
- Ti serve l'accesso alla porta seriale (
screen /dev/ttyUSB0 115200) - Sei su un sistema datato dove Screen e preinstallato e tmux no
- Ti serve un workflow semplice di detach/reattach e nient'altro
Quando usare tmux:
- Vuoi layout dei pannelli persistenti che sopravvivano al detach
- Vuoi un ecosistema di plugin attivo
- Sei su RHEL 8+ o Fedora (Screen non e nei repository)
- Ti serve la creazione scriptata di finestre/pannelli
Entrambi gli strumenti gestiscono il caso d'uso fondamentale (mantenere i processi attivi dopo la disconnessione SSH) ugualmente bene. Se parti da zero, tmux ha piu slancio e impostazioni predefinite migliori. Se Screen fa gia parte del tuo workflow, non c'e motivo urgente per cambiare. Consulta il nostro tutorial su tmux per una guida completa.
Risoluzione dei problemi comuni di Screen
"There is a screen on ... (Attached)" ma non sei connesso
Questo succede dopo un crash SSH. La vecchia connessione non ha fatto un detach pulito.
screen -D -r session_name
Questo forza il detach della connessione fantasma e fa il reattach del tuo terminale.
Sessioni morte nella lista
A volte le sessioni appaiono come (Dead) dopo un riavvio del server o un crash.
screen -wipe
Output:
There are screens on:
12345.old_session (Dead ???)
Removed dead screens.
1 socket wiped out.
Questo rimuove i file socket stale. Esegui screen -ls per confermare che sono stati rimossi.
Il terminale e bloccato / non accetta input
Probabilmente hai premuto Ctrl-a s per sbaglio. Questo e il segnale di controllo di flusso XOFF che mette in pausa l'output del terminale.
Soluzione:
Ctrl-a q
Questo invia XON per riprendere l'output. Se non usi mai il controllo di flusso, disabilitalo nel tuo .screenrc:
defflow off
Screen mostra caratteri illeggibili
Il terminale e Screen non concordano sulla codifica o il supporto colori. Aggiungi al tuo .screenrc:
defutf8 on
term screen-256color
Poi avvia una nuova sessione. Le sessioni esistenti non recepiscono le modifiche a .screenrc.
Dove sono i log di Screen?
Screen di per se non scrive log di sistema. Per abilitare il logging per finestra:
Ctrl-a H
Questo attiva/disattiva il logging per la finestra corrente. I log vengono salvati in screenlog.N nella directory dove hai avviato la sessione. N corrisponde al numero della finestra.
Per verificare se Screen e in esecuzione a livello di sistema:
ps aux | grep screen
Riferimento flag CLI comuni
| Flag | Descrizione | Esempio |
|---|---|---|
-S name |
Avvia una sessione con nome | screen -S myapp |
-r [name] |
Reattach a una sessione in stato detached | screen -r myapp |
-d -r name |
Detach remoto, reattach qui | screen -d -r myapp |
-D -r name |
Forza detach e reattach | screen -D -r myapp |
-x name |
Collegati a una sessione gia collegata (multi-display) | screen -x myapp |
-ls |
Lista tutte le sessioni | screen -ls |
-wipe |
Rimuovi sessioni morte | screen -wipe |
-X command |
Invia un comando a una sessione attiva | screen -S myapp -X quit |
-dmS name |
Avvia una sessione con nome in stato detached | screen -dmS daemon |
-L |
Abilita il logging dall'avvio | screen -L -S myapp |
Avviare una sessione in modalita detached (-dmS) e utile per script e unita systemd che devono lanciare sessioni Screen senza un terminale interattivo.
Copyright 2026 Virtua.Cloud. Tutti i diritti riservati. Questo contenuto e un'opera originale del team Virtua.Cloud. La riproduzione, ripubblicazione o redistribuzione senza autorizzazione scritta e vietata.
Pronto a provare?
Distribuisci il tuo server in pochi secondi. Linux, Windows o FreeBSD.
Vedi piani VPS