- Dave McKay
@TheGurkha
- March 27, 2020, 8:00am EDT

Con il comando Linux screen, è possibile spingere le applicazioni del terminale in esecuzione sullo sfondo e tirarle avanti quando si vuole vederle. Supporta anche la visualizzazione a schermo diviso e funziona su connessioni SSH, anche dopo essersi disconnessi e riconnessi!
Cos’è il comando schermo?
Il comando screen è un multiplexer di terminale, ed è assolutamente pieno di opzioni. Dire che può fare molto è il nonno degli eufemismi. La pagina man supera le 4.100 righe.
Questi sono i casi più comuni in cui si usa il comando screen, e li tratteremo ulteriormente in questo articolo:
- L’operazione standard è quella di creare una nuova finestra con una shell in essa, eseguire un comando, e poi spingere la finestra sullo sfondo (chiamato “distacco”). Quando volete vedere come sta andando il vostro processo, potete tirare di nuovo la finestra in primo piano (“riattaccare”) e usarla di nuovo. Questo è ottimo per processi lunghi che non vuoi terminare accidentalmente chiudendo la finestra del terminale.
- Una volta che hai una sessione
screenin esecuzione, puoi creare nuove finestre ed eseguire altri processi in esse. Si può facilmente passare da una finestra all’altra per monitorare i loro progressi. Si può anche dividere la finestra del terminale in regioni verticali o orizzontali, e visualizzare le variescreenfinestre in una finestra. - È possibile connettersi a una macchina remota, avviare una sessione
screene lanciare un processo. Puoi disconnetterti dall’host remoto, riconnetterti, e il tuo processo sarà ancora in esecuzione. - Puoi condividere una sessione
screentra due diverse connessioni SSH così due persone possono vedere la stessa cosa, in tempo reale.
Installazione di screen
Per installare screen su ubuntu, usate questo comando:
sudo apt-get install screen

Per installare screen su Manjaro, utilizzare il seguente comando:
sudo pacman -Sy screen

Su Fedora, si digita quanto segue:
sudo dnf install screen

Iniziare con screen
Per iniziare screen, basta digitare come mostrato di seguito e premere Invio:
screen

Vedrai una pagina di informazioni sulla licenza. Puoi premere la barra spaziatrice per leggere la seconda pagina o Invio per tornare al prompt dei comandi.

Sei rimasto al prompt dei comandi, e non sembra essere successo molto. Tuttavia, ora state eseguendo una shell all’interno di un emulatore di terminale multiplo. Perché questa è una buona cosa? Beh, iniziamo un processo che richiederà molto tempo per essere completato. Scaricheremo il codice sorgente dell’ultimo kernel Linux e lo reindirizzeremo in un file chiamato latest_kernel.zip.
Per farlo, digitiamo quanto segue:
curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip

Il nostro download inizia, e l’output curl ci mostra il progresso.

Non possiamo mostrarvi un’immagine del prossimo pezzo, perché è una sequenza di tasti. Si digita Ctrl+A, si rilasciano quei tasti, e poi si preme d per staccare lo schermo.
Il processo di download è ancora in corso ma la finestra che mostra il download viene rimossa. Sei tornato alla finestra del terminale da cui hai lanciato la sessione screen. Un messaggio vi dice che una finestra screen etichettata 23167.pts-0.howtogeek è stata staccata.
Avete bisogno del numero dall’inizio del nome della finestra per riattaccarla. Se lo dimenticate, potete sempre usare l’opzione -ls (elenco), come mostrato qui sotto, per ottenere un elenco delle finestre staccate:
screen -ls

Quando sei pronto, puoi usare l’opzione -r (reattach) e il numero della sessione per riattaccarla, così:
screen -r 23167

La finestra che ha lavorato in background è ora riportata alla finestra del terminale come se non fosse mai uscita.

Se è un processo che sta andando avanti fino alla sua conclusione alla fine si completerà. Se è un processo continuo, alla fine vorrai terminarlo. In entrambi i casi, quando il processo finisce, potete digitare exit per uscire dal screen. In alternativa, si può premere Ctrl+A, e poi K per uccidere forzatamente una finestra.
Digitare il seguente comando:
exit

Si ritorna alla precedente finestra del terminale, che mostrerà ancora il comando usato per riattaccare la finestra. Poiché abbiamo chiuso la nostra unica finestra staccata, otteniamo un messaggio che screen sta terminando.

RELATO: Come usare curl per scaricare file dalla riga di comando di Linux
Usare sessioni di schermo con nome
Puoi usare l’opzione -S (nome della sessione) per dare un nome alla tua sessione screen. Se si usa un nome memorabile piuttosto che l’identità numerica della sessione, è più conveniente riconnettersi a una sessione. Digitiamo quanto segue per nominare la nostra sessione “bigfile”:
screen -S bigfile

Quando screen lancia la nostra sessione, vediamo una finestra vuota con un prompt dei comandi. Stiamo per scaricare un grosso file, quindi possiamo usare un processo di lunga durata come esempio.
Scriviamo quanto segue:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip

Quando il download inizia, premiamo Ctrl+A, e poi premiamo D per staccare la sessione. Digitiamo quanto segue per usare l’opzione -ls (lista) con screen per vedere i dettagli della nostra sessione staccata:
screen -ls

Dietro l’identificatore numerico (23266), vediamo il nome della nostra sessione (bigfile). Digitiamo quanto segue, compreso il nome della sessione, per riattaccarla:
screen -r bigfile

Siamo ricollegati alla nostra finestra di download e vediamo che il lungo download è ancora in corso.

Quando il download è completo, digitiamo exit per chiudere la finestra della sessione.
Usare lo schermo con più finestre
Finora abbiamo usato screen per mettere un singolo processo in background in una finestra staccata. Tuttavia, screen è in grado di fare molto di più. Successivamente, eseguiremo alcuni processi che ci permettono di monitorare alcuni aspetti del nostro computer.
Scriviamo quanto segue per avviare una sessione di schermo chiamata “monitor”:
screen -S monitor

Al prompt dei comandi nella nostra nuova finestra di sessione, lanceremo dmesg e useremo le opzioni -H (leggibile dall’uomo) e -w (aspetta nuovi messaggi). Questo visualizzerà i messaggi del buffer del kernel; i nuovi messaggi appariranno man mano che si presentano.
Scriviamo quanto segue:
dmesg -H -w

I messaggi esistenti appaiono. Non veniamo riportati al prompt dei comandi perché dmseg è in attesa di nuovi messaggi, e li mostrerà man mano che arrivano.

RELATO: Come usare il comando dmesg su Linux
Vogliamo eseguire un’altra applicazione, quindi abbiamo bisogno di una nuova finestra screen. Premiamo Ctrl+A, e poi C per creare una nuova finestra. Useremo watch per eseguire ripetutamente vmstat, in modo da ottenere una visualizzazione frequentemente aggiornata dell’utilizzo della memoria virtuale sul nostro computer.
Al nuovo prompt dei comandi, digitiamo quanto segue:
watch vmstat

L’output vmstat appare e si aggiorna ogni due secondi.

I nostri due processi sono ora in esecuzione. Per passare da una finestra all’altra screen, si preme Ctrl+A, e il numero della finestra. La prima che abbiamo creato è la finestra zero (0), la successiva è la finestra 1, e così via. Per passare alla prima finestra (quella dmesg), si preme Ctrl+A e 0.

Se premiamo Ctrl+A e 1, ci riporta alla vmstat finestra.

Questo è piuttosto ingegnoso! Possiamo premere Ctrl+A, e poi D per staccarci da questa sessione; possiamo riattaccarci più tardi. Entrambe le sessioni saranno ancora in esecuzione. Di nuovo, per passare da una finestra all’altra, premiamo Ctrl+A e il numero (0 o 1) della finestra a cui vogliamo passare.
Passiamo al passo successivo e visualizziamo entrambe le schermate in una finestra. Quando fai questo, allungherai la finestra del tuo terminale ad una dimensione che rende utile questo passo. I nostri esempi sono limitati alle dimensioni dei nostri screenshot, quindi le nostre finestre sembreranno un po’ strette.
Per fare questo, premiamo Ctrl+A, e poi Shift+S (la “S” maiuscola è necessaria).
La finestra si divide in due “regioni.”

La regione superiore mostra ancora vmstat, e la regione inferiore è vuota. Il cursore è evidenziato nello screenshot qui sotto. Per spostarlo nella regione inferiore, premiamo Ctrl+A, e poi Tab.

Il cursore si sposta nella regione inferiore, che in realtà è solo uno spazio vuoto. Non è una shell, quindi non possiamo scriverci nulla. Per ottenere una visualizzazione utile, premiamo Ctrl+A, e poi premiamo “0” per visualizzare la finestra dmesg in questa regione.

Questo ci dà entrambi gli output live in una finestra divisa. Se premiamo Ctrl+A e D per staccare la finestra, e poi la riattacchiamo, perderemo la vista split-pane. Tuttavia, possiamo ripristinarla con le seguenti scorciatoie da tastiera:
- Ctrl+A, S: divide la finestra orizzontalmente.
- Ctrl+A, Tab: Spostati nella regione inferiore.
- Ctrl+A, 0: Visualizza la finestra zero nella regione inferiore.
Possiamo fare un ulteriore passo avanti. Ora divideremo il pannello inferiore verticalmente, e aggiungeremo un terzo processo alla visualizzazione. Con il cursore nella regione inferiore, premiamo Ctrl+A e C per creare una nuova finestra con una shell al suo interno. La regione inferiore visualizza la nuova finestra e ci dà un prompt dei comandi.

Prossimo, eseguiamo il comando df per controllare l’uso del file system:
df

Quando vediamo df in esecuzione, premiamo Ctrl+A e il carattere pipe (|). Questo divide verticalmente la regione inferiore. Premiamo Ctrl+A e Tab per spostarci nella nuova regione. Successivamente, premiamo Ctrl+A e 0 per visualizzare la finestra dmesg.

Si può anche passare da una regione all’altra, e aggiungere altre suddivisioni verticali o orizzontali. Ecco alcune combinazioni di tasti più utili:
- Ctrl+A: Salta avanti e indietro tra la regione corrente e quella precedente.
- Ctrl+A, Q: Chiudi tutte le regioni tranne quella corrente.
- Ctrl+A, X: Chiudi la regione corrente.
Utilizzare lo schermo su SSH
Con screen, è possibile avviare una sessione in finestra, staccarla in modo che sia ancora in esecuzione in background, disconnettersi o rientrare, e riattaccare la sessione.
Facciamo una connessione SSH al nostro computer da un altro con il comando ssh. Dobbiamo fornire il nome dell’account con cui ci connetteremo e l’indirizzo del computer remoto.
Per il nostro esempio, digitiamo quanto segue:
ssh [email protected]

Dopo esserci autenticati sul computer remoto e aver fatto il login, digitiamo quanto segue per avviare una sessione screen chiamata “ssh-geek”:
screen -S ssh-geek

A scopo dimostrativo, eseguiremo top nella finestra screen, ma si può avviare qualsiasi processo di lunga durata o senza fine.
Scriviamo quanto segue:
top

Una volta che top è in esecuzione nella finestra, premiamo Ctrl+A, e poi D per staccare la finestra.

Siamo tornati alla finestra originale del terminale remoto.

Se digitiamo exit, come mostrato sotto, si disconnette la sessione SSH e siamo di nuovo sul nostro computer locale:
exit

Digitiamo quanto segue per riconnetterci:
ssh [email protected]

Dopo esserci riconnessi e aver fatto il login, possiamo digitare quanto segue per riattaccare la screen sessione:
screen -r ssh-geek

Siamo ora ricollegati alla nostra istanza ancora in esecuzione di top.

Questo è ottimo se vuoi iniziare un processo su una macchina, e poi riprendere da dove hai lasciato su un’altra.
RELATO: Come creare e installare chiavi SSH dalla shell di Linux
Condividere una sessione dello schermo
Puoi anche usare una sessione screen per permettere a due persone di vedere e interagire con la stessa finestra. Supponiamo che qualcuno con Fedora sul suo computer voglia connettersi al nostro server Ubuntu.
Dovrebbe digitare quanto segue:
ssh [email protected]

Dopo che si è connesso, inizia una sessione a schermo chiamata “ssh-geek” usando l’opzione -S (nome della sessione). Usa anche le opzioni -d (distacco) e -m (creazione forzata) per creare una nuova sessione screen già distaccata.
Si digita quanto segue:
screen -d -m -S ssh-geek

Digita quanto segue, usando l’opzione -X (modalità multischermo) per collegare la sessione:
screen -X ssh-geek

Su un computer Manjaro, un’altra persona si connette al computer Ubuntu con le stesse credenziali di account, come mostrato di seguito:
ssh [email protected]

Una volta connessa, digita il comando screen e usa l’opzione -X (modalità multischermo) per unirsi alla stessa sessione in finestra, così:
screen -X ssh-geek

Ora, qualsiasi cosa una delle due persone digiti, l’altra la vedrà. Per esempio, quando una persona emette il comando “date”, entrambi lo vedono mentre viene digitato, così come il suo output.


Entrambe le persone stanno ora condividendo una sessione screen in esecuzione su un computer Ubuntu remoto.
Per essere un software che ha visto la luce per la prima volta nel 1987, screen ha ancora una buona produttività. Familiarizzare con esso sarà tempo ben speso!
RELATO: 37 Comandi Linux importanti da conoscere
Dave McKay ha usato i computer per la prima volta quando il nastro di carta perforato era in voga, e da allora ha sempre programmato. Dopo oltre 30 anni nell’industria IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera, ha lavorato come programmatore freelance, come manager di un team internazionale di sviluppo software, come project manager di servizi IT e, più recentemente, come Data Protection Officer. Dave è un evangelista di Linux e un sostenitore dell’open source.Read Full Bio ”