Appunti e altro materiale |
Appunti |










GNU Screen: sopravvivenza in console

nota: questi appunti non sono miei, ma li ho presi in rete tanto tempo fa. Purtroppo non ho più i riferimenti. Farò una nuova ricerca e se trovo la pagina originale, inserirò il link.

GNU Screen è un emulatore di terminali sviluppato dal Progetto GNU. Consente all’utente di accedere a varie sessioni ed è molto utilie per tenere traccia delle sessioni aperte anche dopo il riavvio del computer. # apt-get install screen dopo averlo installato basta lanciare il comando:
$ screen

Comandi utilissimi ed indispensabili per l’utilizzo di screen:

Comando

Descrizione

Ctrl+a [0-9]

Vai alla finestra n°x

Ctrl+a c

Crea una nuova finestra

Ctrl+a  e poi A Rinomina una finestra

Ctrl+a d

Chiudi screen e salva lo stato (detach)

Ctrl+a k

Chiudi la finestra corrente

Ctrl+a n

Vai alla finestra successiva

Ctrl+a p

Vai alla finestra precedente

Ctrl+a x

Blocca screen

Shift+PgUp / Shift+PgDn

Scrolla la history

Una volta chiuso screen per riaprirlo e ripristinare la sessione precente basta fare:

screen -r [session]

Per personalizzare screen basta creare un file di configurazione (.screenrc) nella home.

Esempio del mio file /home/utente/.screenrc:

# use visual bell
#vbell on
# sostituire ctrl-a con ctrl-\
escape ^\\\
# set a big scrolling buffer
defscrollback 5000
# Set the caption on the bottom line
caption always "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= @%H - %LD %d %LM %Y- %c"
#tasto backspace
bindkey -d ^? stuff ^H
bindkey -d ^@ stuff ^H
#
## do not trash BackSpace, usually DEL
bindkey -k kb
bindkey -d -k kb
#
## do not trash Delete, usually ESC [ 3 ~
bindkey -k kD
bindkey -d -k kD

Screen è un window manager a pieno schermo che permettere di condividere un terminale fisico tra più processi”.

Nel periodo in cui l’interfaccia 3D sembra essere la funzionalità fondamentale che il sistema operativo deve offrire all’utente, perchè mai dovremmo preoccuparci di un software che svolge un compito apparentemente così semplice ed insignificante? Semplicemente perché per noi nerd è dannatamente utile… vediamo come.

La funzionalità più notevole di screen consiste nel poterlo “staccare” dal terminale reale a cui è connesso lasciandolo in esecuzione in background con tutti i processi ad esso collegati per poi riportarlo in foreground in un secondo tempo. Questo torna utile per esempio quando occorre lavorare su macchine remote tramite ssh: a volte capita di dover eseguire lavori in batch che richiedono tempo: basta connettersi, aprire una shell sotto screen, avviare l’elaborazione e “staccare” screen; si potrà poi successivamente riprendere il lavoro sulla sessione sospesa ricollegandosi, anche da un altro host, e riportando in primo piano screen. Altro caso in cui torna utile è quando si dispone di una connessione instabile: nel caso di perdita di connettività la sessione interrotta può essere ripresa dal punto esatto in cui era stata lasciata.

Cominciamo a fare pratica: apriamo il nostro emulatore di terminale preferito e digitiamo semplicemente:
screen top
Questo comando non fa altro che lanciare il comando top all’interno di una sessione screen; se viene lanciato senza argomenti apre una shell all’interno di una nuova sessione.

A questo punto “disconnettiamo” la sessione screen dal terminale digitando CTRL+a seguito da d (detach): vedremo scomparire la schermata di top e screen stamperà a schermo ” [detached]“. Questo significa che è ancora in esecuzione ma non più collegato al terminale.

Per riprendere la sessione basterà digitare, anche da un altro terminale:
screen -r
che riporterà top sul terminale esattamente come lo avevamo lasciato.

Ora possiamo creare un nuovo “terminale virtuale” nella nostra sessione screen: per farlo è sufficiente premere CTRL+a seguito da c (create): vedremo scomparire l’interfaccia di top che verrà sostituita dal classico prompt della shell sul quale possiamo lavorare normalmente, per esempio aprendo una istanza di vim. Per tornare al terminale contenente top possiamo usare la sequenza CTRL+a n (next) oppure CTRL+a Spazio. Per navigare tra i terminali virtuali nell’ordine inverso invece si usa CTRL+a p (previous). CTRL-a CTRL-a scambia il terminale attuale con il precedente.

Se abbiamo un terminale abbastanza grande possiamo voler visualizzare più terminali virtuali contemporaneamente: possiamo dividere il terminale reale usando la sequenza CTRL+a S (Split) creando due finestre. Per spostarsi tra le finestre la sequenza da usare è CTRL+a Tab. Per chiudere la finestra attuale bisogna digitare CTRL+A X.

La sequenza per avere un elenco dei terminali virtuali è CTRL+a “. Ciascuno dei terminali può essere rinominato con CTRL+a A (nAme).

Screen termina quando tutti i processi da esso controllati terminano.

È anche possibile il copia e incolla tra i terminali virtuali: la procedura di copia si avvia con CTRL+a [, si punta il cursore sull'inizio dell'area da selezionare usando grosso modo gli stessi comandi di movimento impiegati da vim (tasti freccia, h, j, k, l, 0, $, ecc..), si preme Spazio per segnare l'inizio, ci si sposta alla fine e si termina premendo ancora Spazio. Per incollare la selezione basta premere CTRL+a ].

Le impostazioni di screen vengono caricate dai file ~/.screenrc e /etc/screenrc: possono essere rimappati i tasti, impostati programmi da avviare automaticamente ecc… Qui riporto il contenuto del mio ~/.screenrc per dei settaggi di base:
startup_message off
defscrollback 2000
defutf8 on
vbell off
hardstatus off
# Riabilita la barra di scorrimento xterm
termcapinfo xterm*|rxvt ti@:te@
bind k
bind ^k
bind .
bind ^\
bind \\
bind ^h
bind h
bind 'K' kill
bind 'I' login on
bind 'O' login off
bind '}' history

Le possibilità offerte da screen non finiscono certamente qui: può loggare l’attività dei terminali, può gestire porte seriali, ma per un elenco esaustivo delle potenzialità e per approfondire il suo funzionamento vi rimando al manuale di screen.

Per avviare una nuova sessione di screen:

# screen

Una volta nella sessione di screen, è possibile utilizzarne i comandi per gestire varie schermate (nuovi prompt della shell). Tutti i comandi di screen comunciano con Ctrl-a.

Per aprire una nuova schermata

Ctrl-a Ctrl-c.

Per passare di schermata in schermata:

Ctrl-a Ctrl-a per accedere all'ultima utilizzata. Ctrl-a Ctrl-n per la successiva, Ctrl-a Ctrl-p per la precedente.

Per disconnettervi, lasciando la sessione in esecuzione in background: Ctrl-a Ctrl-d.

Con Ctrl-a Ctrl-? si ottiene la lista completa dei comandi disponibili.

Per connettersi a una sessione già in esecuzione in background, utilizzare "screen" con le seguenti opzioni:

  • -d -r   riapre una sessione e, se necessario, prima la stacca.

  • -d -R   riapre una sessione e, se necessario, prima la stacca o comunque la crea.

  • -d -RR   come sopra; usa la prima sessione se ce ne sono più di una disponibili.

  • -D -r   riapre una sessione; se necessario prima stacca e slogga da remoto.

  • -D -R   apre immediatamente una sessione; questo significa che se c'è una sessione aperta in corso, poi la riapre; se necessario prima stacca e slogga da remoto. Se non c'è una sessione in corso ne viene aperta una e viene notificato l'utente.

  • -D -RR   apre immediatamente una sessione; usa la prima sessione se ce ne sono più di una disponibili.

[[Nota: E' sempre una buona idea controllare lo stato delle sessioni aperte tramite "screen-list".]]

Un'altra opzione carina è: Ctrl-a Ctrl-S per dividere la schermata in due parti verticali; Ctrl-a Ctrl-Q serve per riunire le due metà e Ctrl-a Ctrl-Tab per cambiare il focus.

Per avere la lista delle schermate aperte in una sessione digita Ctrl-a Ctrl-"; per rinominare la schermata in uso con un nome più facile da ricordare usa Ctrl-a Ctrl-A

With all this Ctrl-a business if you miss sending Ctrl-a to the running program(for example to jump to the beginning of the readline buffer used to edit the commands we are passing to bash), do a Ctrl-a a. (N.d.T.: questa la lascio non tradotta visto che non l'ho capita.

Puoi anche monitorare le schermate silenti con Ctrl-a Ctrl-_ [underscore], per sapere quando un programma ha terminato in una delle finestre nascoste.

Ora, ne sono sicuro, sarà ben dura che tu riesca a vivere senza screen. :-)

Un'altra cosetta: screen mantiene invariate le impostazioni del DISPLAY del terminale da cui è stato aperto; così se voglio aprire velocemente emacs, ad esempio, io stacco la schermata, faccio partire il programma e poi riattacco nuovamente.

-Inizio pagina-  | Altertux 2006| theme (Sandbox)