Lo schermo o GNU screen è un multiplexer di terminale. Usandolo, è possibile eseguire qualsiasi numero di applicazioni basate su console, shell di comandi interattivi, applicazioni basate su corsi, ecc. Puoi usare screen per continuare l’esecuzione del programma dopo che hai accidentalmente chiuso il terminale, o anche dopo che ti sei disconnesso e in seguito riprendi proprio dove ti trovi.
Un esempio pratico è quando stai eseguendo un compito su una macchina Linux remota in cui hai una sessione ssh. Molte volte avete visto che questa sessione ssh viene terminata e non potete più lavorare. Ecco che arriva l’utilità screen per aiutare a riprendere le sessioni.
Come funziona screen?
Quando screen viene chiamato, crea una singola finestra con una shell in essa (o il comando specificato) e poi si toglie di mezzo in modo da poter utilizzare il programma come si farebbe normalmente. Poi, in qualsiasi momento, potete creare nuove finestre (a tutto schermo) con altri programmi al loro interno (incluse altre shell), uccidere la finestra corrente, visualizzare un elenco delle finestre attive, copiare testo tra le finestre, passare da una finestra all’altra, ecc.
Screen gestisce una sessione che consiste di una o più finestre contenenti ciascuna una shell o un altro programma. Inoltre, screen può dividere il display di un terminale in più regioni, ognuna delle quali visualizza il contenuto di una finestra. Tutte le finestre eseguono i loro programmi completamente indipendenti l’una dall’altra. I programmi continuano ad essere eseguiti quando la loro finestra non è attualmente visibile e anche quando l’intera sessione dello schermo è staccata dal terminale dell’utente. Questo è pratico per prevenire il timeout involontario della sessione ssh.
Ora controlliamo come usare questa utilità in Linux.
1) Inviare nuove finestre
Se il comando schermo non è già presente sul vostro sistema, potete installarlo con il comando qui sotto.
Su Debian
# apt-get install screen
Su Centos
# yum install screen
È possibile avviare screen semplicemente digitando screen al prompt dei comandi. Questo comando screen avvierà una nuova finestra all’interno dello schermo.
# screen
È possibile avviare una nuova finestra all’interno dello schermo e anche dare un nome alla finestra, per esempio aloft. Si crea una sessione con identificata da quel nome. Il nome può essere usato per riattaccare in una fase successiva.
# screen -S aloft
Nota che puoi fare tutto il tuo lavoro come se fossi nel normale ambiente CLI.
2) Elenca tutti i processi dello schermo
Come siamo in grado di avviare nuove finestre all’interno dello schermo, è possibile visualizzare le schermate attualmente aperte comprese quelle in esecuzione in background. Elencherà tutte le sessioni dello schermo esistenti.
# screen -lsThere is a screen on: 10437.aloft (Attached)1 Socket in /var/run/screen/S-root.
3) Comando principale dello schermo
È possibile operare con lo schermo utilizzando alcuni comandi. Elencheremo di seguito i comandi principali più utili.
-
Ctrl-a
seguito dac
: crea una nuova finestra -
Ctrl-a
seguito daw
: visualizza l’elenco di tutte le finestre attualmente aperte -
Ctrl-a
seguito daA
: rinomina le finestre attuali. Il nome apparirà quando si elencherà la lista delle finestre aperte conCtrl-a
seguito daw
. -
Ctrl-a
seguito dan
: vai alle finestre successive -
Ctrl-a
seguito dap
: torna alle finestre precedenti -
Ctrl-a
seguito da Ctrl-a: torna alle ultime finestre utilizzate. -
Ctrl-a
seguito da un numero da 0 a X: passare alla finestra n° X. -
Ctrl-a
seguito da"
: scegliere le finestre in cui andare avanti. -
Ctrl-a
seguito dak
: chiudere le finestre attuali (kill) -
Ctrl-a
seguito daS
: dividere orizzontalmente le finestre attuali. Per passare da una finestra all’altra, fareCtrl-a
seguito daTab
. -
Ctrl-a
seguito da|
: divide verticalmente le finestre correnti -
Ctrl-a
seguito dad
: staccare una sessione dello schermo senza fermarla -
Ctrl-a
seguito dar
: riattacca una sessione di schermo staccata -
Ctrl-a
seguito da: incolla il testo copiato
4) Mostra i parametri dello schermo
È possibile elencare tutti i parametri dello schermo per aiuto. Per farlo, digitate Ctrl-a
seguito dal carattere ?
. Verrà visualizzata una lista di tutti i comandi.
5) Staccare la sessione
Il miglior vantaggio del comando schermo è la possibilità di staccare una sessione schermo. È possibile avviare una sessione a schermo su un computer in ufficio, staccare la sessione dal terminale locale, andare a casa, accedere al nostro computer in ufficio da remoto e riattaccare la sessione a schermo al terminale del nostro computer di casa. Durante il tempo intercorso, tutti i lavori sul computer dell’ufficio hanno continuato ad essere eseguiti. Questa funzione serve a prevenire la perdita di dati che si verifica improvvisamente durante la caduta della connessione ssh.
Per capire bene di cosa stiamo parlando, facciamo un esempio. Lanciamo un processo di installazione.
Ora stacchiamo lo schermo con Ctrl-a
seguito da d
. Possiamo controllare con il comando qui sotto.
# screen -lsThere is a screen on: 12449.win (Detached)1 Socket in /var/run/screen/S-root.
È possibile staccare lo schermo con il comando screen -d
seguito dall’id dello schermo o dal suo nome. Ciò significa che sarà necessario aprire un’altra finestra o console per staccare la sessione se la console corrente ha un processo in corso. È necessario innanzitutto elencare lo schermo corrente collegato.
# screen -lsThere is a screen on: 13686.win200 (Attached)1 Socket in /var/run/screen/S-root.
Ora su un nuovo terminale, inserire il comando qui sotto.
# screen -d 13686
o potete usare il nome
# screen -d win200
Avrete un output come quello che segue che indica che lo schermo è stato staccato.
6) Riattaccare una sessione
Dopo aver staccato lo schermo, è possibile riattaccarlo con il comando. Normalmente la vostra sessione dello schermo è ancora in funzione, quindi tutti i vostri processi non vengono fermati. Prima di riattaccare una sessione, è necessario elencare la sessione come sopra, quindi scegliere la sessione da riattaccare.
# screen -r 13686
o puoi usare
# screen -r win200
Puoi vedere che dopo aver riattaccato la sessione, le finestre mostrano la fine del processo che è completato. Significa che puoi lavorare su ssh e staccare una sessione che riattaccherai a casa tua per continuare il tuo processo di lavoro senza perdere nulla.
7) Creare una nuova shell interattiva
Se hai dei lavori da fare e non vuoi perdere il tuo lavoro, è possibile creare una nuova shell interattiva. Potete facilmente avere alcune shell interattive (numerate da 0 a X) aperte in una finestra di terminale. Quando iniziate una nuova sessione, sarete nella shell 0.
Per fare questo, è necessario creare nuove finestre all’interno di finestre esistenti con Ctrl-a
seguito da c
. Avrete qualcosa come qui sotto.
Si può vedere la schermata 3 nella parte superiore dello screenshot che indica che siamo sulla terza schermata. In basso possiamo anche vedere 3
8) Passare tra le finestre dello schermo
Quando avete aperto più di una finestra dello schermo, per passare da una finestra all’altra, premete Control-a
seguito da space
o il numero della shell. Per esempio, per passare alla shell numero 1, premere Control-a
poi 1
. Per esempio, ci sposteremo sulla prima schermata.
La parte superiore e inferiore dello screenshot mostra che siamo sulla prima schermata.
9) Dividere le finestre
Per avere una visione globale del vostro lavoro, potete avere bisogno di dividere le vostre finestre invece di avere più finestre. Ctrl-a
seguito da S
o |
dividono lo schermo orizzontalmente o verticalmente. È possibile ripetere l’operazione senza limiti. Per spostare un’altra finestra, usate Ctrl-a
seguito da Tab
.
Quando il cursore si trova sulle finestre in basso, è possibile creare una nuova finestra (Ctrl-a
seguito da c
) o chiamare una finestra esistente (Ctrl-a
seguito da un numero).
Per chiudere una finestra divisa, usate Ctrl-a
seguito da X
(Notate che è il carattere maiuscolo).
10) Riconnettersi a una sessione ssh disconnessa
Quando si accede per la prima volta,
- eseguire screen per avviare una sessione di schermo. Otterrai un’altra shell, esegui i comandi in quella.
# screen -S remote_session
- Quando hai finito, staccate la sessione dello schermo e poi fate il logout da ssh
- Potete prima elencare tutte le sessioni dello schermo
- Reconnettetevi alla vostra sessione dello schermo e continuate il vostro lavoro
# screen -d -r remote_ression
Il comando schermo è molto usato per la sessione ssh perché aiuta a continuare il lavoro dopo una disconnessione senza perdere i processi in corso.
11) Scorrere verso l’alto nelle finestre di screen
Siccome screen si occupa di gestire i vostri programmi remoti, non potete usare le funzioni di scorrimento del vostro emulatore di terminale mentre eseguite screen. Devi usare i comandi di Screen per accedere al buffer di scorrimento.
- Usa
Ctrl-a
seguito daescape
- Premi il
Up
eDown
o i tastiPgUp
ePgDn
per scorrere l’output precedente.
Si può vedere dove si trova il mio cursore nello screenshot. Ogni terminale virtuale ha il proprio buffer di scrollback.
12) Vedere il proprietario di ogni sessione dello schermo
I comandi screen -ls
o screen -list
mostrano solo le proprie sessioni dello schermo anche per root. Per quanto ne so, questo è il massimo che si può ottenere per lo schermo stesso.
Se volete vedere quali sessioni di schermo sono state avviate da quali utenti guardate in ogni directory utente in /var/run/screen/
.
13) Condividere una sessione di schermo con un account
È possibile avere due persone connesse allo stesso account da postazioni remote. Possono facilmente condividere una sessione di schermo (così quello che uno scrive lo vede l’altro e viceversa). Per fare questo:
- Crea una sessione di schermo nominata:
# screen -d -m -S share_session
- Attaccate alla sessione dello schermo nella vostra finestra del terminale
# screen -x share_session
- Fate che anche l’altra persona (loggata con lo stesso account) di collegarsi anch’essa alla sessione dello schermo
# screen -x share_session
avrete esattamente lo stesso output visualizzato sull’altra postazione. Tutto ciò che apparirà sul vostro terminale apparirà anche sul terminale dell’altro utente.
14) Bloccare la sessione dello schermo
È possibile bloccare la sessione dello schermo senza bloccare la sessione utente normale. Ciò significa che potete lasciare il vostro computer ed essere sicuri che nessuno verrà ad effettuare operazioni non autorizzate. Per fare questo, utilizzate il comando Ctrl-a
seguito da x
(Notate che è il carattere minuscolo).
Screen used by root <root> on centos-01.Password:
15) Terminare la sessione dello schermo
Quando avete finito e volete uscire dalla sessione dello schermo, potete usare il comando Ctrl-a
seguito da k
. Ti verrà richiesta una conferma.
Puoi anche usare il comando exit. Se vuoi salvare il processo in corso, puoi semplicemente staccare la sessione dello schermo prima di terminarla.
Conclusione
L’utilità schermo può monitorare una finestra per attività o inattività. Questo è ottimo se stai scaricando file di grandi dimensioni, compilando o aspettando l’output. In quel momento, se necessario, puoi anche avviare qualche processo da un computer usando il comando screen e staccarlo quando hai finito.