Comando screen in Linux: scollegare e riprendere sessioni terminali

screen è un multiplexer di terminale: gestisce più terminali virtuali e permette di scollegare una sessione per riprenderla in seguito. Il flusso essenziale è creare la sessione, avviare il lavoro, premere Ctrl+A seguito da d minuscola per scollegarla e poi rientrare con screen -r.

È utile per un ambiente interattivo su SSH. Per un semplice comando non interattivo in background può bastare nohup; per ritrovare un terminale in cui continuare a digitare scegliete Screen o tmux.

Quando usare Screen

Ogni finestra di GNU Screen ospita una shell o un programma. Le finestre continuano a esistere quando ne visualizzate un'altra o scollegate l'intera sessione dal terminale. Il manuale di GNU Screen distribuito da Debian descrive opzioni, associazioni dei tasti e impostazioni.

  • Eseguire compilazioni, elaborazioni o backup lunghi su un server raggiunto via SSH.
  • Scollegarsi da un computer e riprendere il terminale da un altro.
  • Tenere shell, editor e monitoraggio dei log in finestre separate della stessa sessione.
  • Ritrovare un programma interattivo già avviato.

Il server e i processi devono restare in esecuzione. Screen non sopravvive al riavvio e non riavvia automaticamente un programma guasto; nemmeno protegge dalle terminazioni imposte dalle politiche del sistema o dall'amministratore. Per servizi continuativi valutate un gestore come systemd.

Installare Screen e avviare una sessione

Installazione e versione

Scegliete solo il comando adatto alla vostra distribuzione. Su Debian e Ubuntu:

sudo apt update
sudo apt install screen

Su sistemi che usano DNF:

sudo dnf install screen

Se il pacchetto manca su Rocky Linux, controllate i repository della vostra release; l'elenco Fedora/EPEL di Screen permette di verificare le versioni disponibili. Non usate pacchetti di una release diversa. Su Arch Linux:

sudo pacman -S screen

Dopo l'installazione controllate il comando disponibile:

screen --version

Il risultato deve identificare GNU Screen e la versione installata. La disponibilità delle opzioni va confrontata con screen --help e man screen del sistema. Per l'uso ordinario non avviate Screen con sudo: le sessioni appartengono all'account che le crea.

Creare una sessione con un nome

screen -S backup

-S backup assegna il nome backup alla nuova sessione. Quando compare la shell, eseguite al suo interno i comandi di lavoro. Un eventuale messaggio iniziale di Screen può richiedere Invio o Spazio prima di mostrare la shell.

printf '%s\n' "$STY"

STY contiene normalmente l'identificativo della sessione nella shell avviata da Screen. Un valore non vuoto è un'indicazione del contesto, non una prova indipendente: le variabili possono essere ereditate o modificate. Usate anche l'elenco delle sessioni quando avete dubbi.

Avviare direttamente un programma

Per una prova riproducibile, lavorate in una directory di esercizio scrivibile. Il comando cat > sovrascrive screen-demo.sh se esiste: conservate prima un file omonimo o scegliete un altro nome. Questo esempio completo crea uno script Bash che stampa sei righe a intervalli di cinque secondi:

cat > screen-demo.sh <<'EOF'
#!/usr/bin/env bash
for i in 1 2 3 4 5 6; do
  printf 'Passaggio %s/6\n' "$i"
  sleep 5
done
EOF
chmod u+x screen-demo.sh
screen -S demo ./screen-demo.sh

Nel terminale dovreste vedere Passaggio 1/6 e poi le righe successive. Scollegatevi con Ctrl+A, d e rientrate rapidamente con screen -r demo per osservare il lavoro mentre è ancora attivo. Dopo circa 30 secondi lo script termina; se non ci sono altre finestre, termina anche la sessione. Non aspettate di ritrovarla dopo la fine dello script.

Per conservare il terminale dopo un comando, create prima una sessione con una shell, come screen -S backup, e avviate il programma da lì. Il nome della sessione non esegue un backup: solo i comandi che lanciate al suo interno svolgono il lavoro.

Scorciatoie: distinguere maiuscole e minuscole

Premete Ctrl+A, rilasciate i tasti e poi premete il secondo carattere indicato. Nella tabella d, c, n, p e k sono minuscole; A e H sono maiuscole. Non sono intercambiabili: per esempio C maiuscola pulisce lo schermo e N maiuscola mostra il numero della finestra.

Sequenza Funzione Effetto
Ctrl+A, d Scollegare la sessione Lascia i programmi attivi e restituisce il terminale esterno.
Ctrl+A, c Creare una finestra Apre una nuova shell nella sessione.
Ctrl+A, n Finestra successiva Passa alla finestra seguente.
Ctrl+A, p Finestra precedente Passa alla finestra precedente.
Ctrl+A, " Elenco delle finestre Permette di selezionare una finestra dall'elenco.
Ctrl+A, A Rinominare la finestra Richiede un titolo per la finestra corrente.
Ctrl+A, [ Copia e scorrimento Permette di consultare l'output precedente.
Ctrl+A, H Registrazione dell'output Attiva o interrompe il log della finestra corrente.
Ctrl+A, k Chiudere la finestra Distrugge la finestra dopo conferma; può interrompere il lavoro.
Ctrl+A, ? Aiuto Mostra le associazioni dei tasti.

Per inviare il carattere Ctrl+A al programma nella finestra, premete Ctrl+A seguito da a minuscola. La sequenza con A maiuscola rinomina invece la finestra. Le personalizzazioni in .screenrc possono cambiare queste associazioni.

Scollegare e riprendere una sessione

Scollegarsi mantenendo il lavoro

Dall'interno premete Ctrl+A, d. Ritornate così alla shell esterna e potete chiudere SSH mentre la sessione resta sul server. Al distacco inatteso del terminale, l'opzione autodetach, normalmente attiva, permette la separazione automatica. Non è una protezione contro il riavvio o la chiusura dei processi da parte del sistema.

Leggere l'elenco delle sessioni

screen -ls

L'elenco contiene l'identificativo, spesso nella forma PID.nome, e lo stato. Detached indica una sessione scollegata dal display; Attached una sessione collegata a un terminale. Il processo resta sul server originale: da un altro computer accedete prima via SSH allo stesso server e con lo stesso account.

Rientrare nella sessione giusta

screen -r backup

Se il nome corrisponde a più sessioni, copiate dall'elenco l'identificativo completo e usatelo al posto di backup. Un nome significativo riduce gli errori, ma non impedisce di creare nomi duplicati. Se la sessione risulta già collegata, verificate chi sta usando quel terminale prima di procedere:

screen -d -r backup

-d -r scollega il display precedente e collega quello corrente. Non è il comando per terminare il programma, ma può sottrarre il terminale a una persona che sta lavorando: usatelo solo quando intendete trasferire il collegamento.

Usare più finestre nella stessa sessione

Creare e nominare le finestre

Con Ctrl+A, c create una finestra; con Ctrl+A, A assegnate un titolo. Potete dedicare una finestra al lavoro, una ai log e un'altra al controllo del sistema. Il titolo della finestra è distinto dal nome della sessione assegnato con -S.

Passare da una finestra all'altra

Usate Ctrl+A, n e Ctrl+A, p oppure aprite l'elenco con Ctrl+A, ". Prima di eseguire un comando, verificate il contesto e il titolo della finestra selezionata.

Terminare il lavoro e chiudere

Quando avete concluso il lavoro e siete al prompt della shell, chiudete quella shell:

exit

Alla chiusura dell'ultima finestra termina anche la sessione. Se volete riprendere più tardi, scollegatevi con Ctrl+A, d. Evitate di distruggere una finestra che sta ancora eseguendo un programma importante.

Consultare l'output e registrare i log

Scorrere l'output precedente

Entrate nella modalità di copia e scorrimento con Ctrl+A, [. Usate i tasti di navigazione previsti dalla vostra configurazione, normalmente frecce e Page Up/Page Down, ed Esc per uscire. Il buffer conserva un numero limitato di righe; per impostarne 10.000 all'avvio:

screen -h 10000 -S analysis

Il buffer è distinto dal file di log e non è un archivio illimitato. Per dati che devono restare disponibili, predisponete anche una registrazione adatta al programma.

Registrare l'output in un file

Ctrl+A, H, con H maiuscola, cambia lo stato del log della finestra. Il nome predefinito è screenlog.N, dove N è il numero della finestra; per la finestra 0 è screenlog.0. Potete attivare la registrazione all'avvio e scegliere un nome:

screen -L -Logfile backup-screen.log -S backup

Usate questo comando dall'esterno di una sessione e scegliete un nome libero; se avete già una sessione backup, distinguetela nell'elenco. Il file si trova nella directory predefinita della finestra, che non cambia semplicemente perché il programma esegue cd. Il log aggiunge i nuovi dati a un file esistente e può essere scritto con ritardo per il buffering.

L'attivazione non riversa nel file il vecchio buffer di scorrimento: registra il nuovo output. Controllate quindi posizione, accesso al file e spazio disponibile. Password, token e dati riservati stampati sul terminale possono finire nel log; definite protezione e conservazione prima di usarlo su operazioni sensibili.

Problemi e permessi delle sessioni

Sessione ancora Attached o voce Dead

Dopo un'interruzione di rete può rimanere lo stato Attached. Consultate l'elenco e accertatevi che non vi sia un altro collegamento attivo prima di usare screen -d -r nome_sessione. Per voci effettivamente morte, screen -wipe rimuove i riferimenti obsoleti; non recupera processi terminati. Non trattate un problema di permessi come prova che una sessione sia morta.

Proteggere l'account che possiede la sessione

Le sessioni seguono i permessi dell'account di sistema. Chi ottiene l'accesso allo stesso account può potenzialmente ritrovare anche il terminale: preferite account personali e chiavi SSH personali, con privilegi adeguati. Non lasciate shell amministrative o schermate riservate accessibili in una sessione condivisa.

Confrontare Screen, tmux, nohup e systemd

Strumento Impiego Caratteristiche
screen Terminale interattivo da riprendere Finestre multiple, separazione e riconnessione del terminale.
tmux Lavoro interattivo e disposizione di pannelli Gestione di finestre, pannelli e configurazione della sessione.
nohup Comando batch non interattivo Ignora SIGHUP, ma non fornisce un terminale da riprendere.
systemd Servizio gestito nel tempo Può gestire avvio, riavvio, dipendenze e registri secondo la configurazione dell'unità.

Per il caso non interattivo trovate esempi nella guida al comando nohup. Per Screen, la priorità è poter rientrare nel terminale; per un servizio, sono invece centrali avvio e controllo del processo.

Domande frequenti

Il lavoro continua se cade SSH?

Può continuare se Screen si scollega correttamente e server e processi rimangono attivi. Riavvii, errori del programma o politiche che terminano i processi possono interromperlo: verificate il comportamento sul vostro sistema prima di affidargli un lavoro importante.

Che cosa faccio se screen -r trova più sessioni?

Consultate screen -ls e specificate l'identificativo completo desiderato. Il nome breve, come backup, funziona solo se seleziona senza ambiguità la sessione da riprendere.

Come invio Ctrl+A al programma anziché a Screen?

Con le associazioni predefinite premete Ctrl+A, rilasciate e poi premete a minuscola. A maiuscola rinomina la finestra. Se cambiate il prefisso con -e o in .screenrc, aggiornate anche le istruzioni condivise.

Posso ripristinare una sessione dopo il riavvio del server?

Screen non ricrea automaticamente processi e terminali dopo il riavvio. Per l'avvio automatico configurate un servizio o uno scheduler appropriato; per recuperare i dati servono le funzioni del programma e una strategia di salvataggio.

Riepilogo

Create la sessione con screen -S nome, lavorate al suo interno, scollegatevi con Ctrl+A, d e rientrate con screen -r nome. Usate titoli di finestra e identificativi di sessione per ritrovare il contesto corretto.

Screen conserva un terminale su un sistema in esecuzione. Per riavvio automatico e gestione continuativa del processo scegliete strumenti di servizio, mantenendo separata la protezione di dati, account e log.