Piccola guida su GNU Screen

Da Wiki di NetBSD Italia.

Indice

Introduzione a GNU Screen

GNU screen è un programma molto utile, nelle classifiche dei programmi più utili da console è sempre nei primissimi posti. Per una descrizione completa di cosa è screen vi rimando al sito gnu: http://www.gnu.org/software/screen/ Sinteticamente si può dire che GNU Screen permette di eseguire più processi shell in un singolo terminale. In questo modo in un singolo terminale si possono avere più istanze di shell, e ancora meglio si può dividere il terminale in più regioni.

Perché usare GNU Screen?

Ci sono tanti motivi, ma basta un esempio per convincere tutti. :) Se siete soliti utilizzare ssh per collegarvi a macchine remote vi(1) sarà sicuramente capitato di voler terminare la sessione lasciando un programma di esecuzione: dando il semplice exit tutti i programmi lanciati durante la sessione vengono terminati, costringendoci a lasciare aperta la sessione. Qui entra in gioco Screen..

Installazione

# cd /usr/pkgsrc/misc/screen
# make install clean

Per iniziare ad usarlo basta scrivere da terminale:

$ screen

Nota sui tasti

xxx       indica di premere il tasto xxx (Es: Ctrl è il tasto Ctrl)
-         combina due tasti che devono essere premuti contemporaneamente (Es: Ctrl-a)
<..>      < e > racchiudono tutta la successione di tasti.

Esempio: <Crtl-a "> Bisogna premere contemporaneamente il tasto Crtl ed il tasto a, e successivamente dopo averli rilasciati premere il tasto " (shift-2)

Usare GNU screen

A seconda di come è configurato, Screen può visualizzare un messaggio di benvenuto all'avvio. Per disabilitarlo è necessario inserire nel file /etc/screenrc la riga:

startup_message off

Se si preme spazio o invio ci si ritrova in una shell. La prima cosa che possiamo fare una volta entrati in screen è premere <Ctrl-a ">, il quale visualizza la lista di terminali. Al momento è presente solo un terminale. Tramite il tasto <Esc> si può uscire da quella finestra. Si può premere <Ctrl-a w> per visualizzarli brevemente nella title bar in basso. Un nuovo terminale è creato premendo >Ctrl-a c>. Premendo nuovamente <Ctrl-a "> si potrà visualizzare la lista dei terminali. Una volta creato un nuovo terminale è utile potergli dare un nome. Per fare questo premere <Crtl-a A> ed inserire un nome. Per creare direttamente un nuovo terminale con nome, premere <Ctrl-a :> ed inserire un nome. Premendo <Ctrl-a n> o <Ctrl-a p> si può scorrere tra le finestre, rispettivamente verso il successivo ed il precedente. Passiamo alla vera caratteristica di screen. Premendo <Ctrl-a d> è possibile fare il "detach", ossia la schermada di screen apparentemente si chiude, ma screen continua indisturbato in background. In qualsiasi momento è possibile fare un "attach", ricollegarsi a screen e ricominciare a lavorare. Una volta effettuato il detach, da terminale è possibile scrivere:

$ screen -ls

per visualizzare le istanze di screen (si ce ne possono essere più di una) Per ricollegarsi (re-attach) basterà scrivere:

$ screen -R

Se ci sono più sessioni di screen è possibile specificare a quale sessione vogliamo ricollegarci.

There are screens on:
       5619.ttyp0.notebook     (Detached)
       151.ttyp0.notebook      (Detached)
       25415.ttyp0.notebook    (Detached)
3 Sockets in /tmp/screens/S-root.

Se vogliamo ricollegarci alla seconda sessione per esempio, basta scrivere:

$ screen -r 151.ttyp0.notebook

oppure

$ screen -r 2

Una colsa molto utile potrebbe essere quella di creare sessioni con dei nomi. Per farlo bisogna far partire Screen in questo modo:

$ screen -S nomesessione

Questi sono i comandi base per cominciare ad utilizzare Screen, ma ovviamente Screen ovvre molto di più..

Regioni

Un'altra interessante funzionalità di Screen è la possibilità di gestione delle regioni. Con le regioni è possibile utilizzando una singola finestra per visualizzare più terminali. Screen può dividere orizzontalmente la finestra in regioni. Per creare una nuova regione <Crtl-a S>. Per entrare nella nuova regione appena create bisogna premere <Ctrl-a tab>. Per chiudere una regione <Ctrl-a X>. Una regione (selezionata) può essre ridimensionata con <Ctrl-a +> e <Ctrl-a ->. Di default la regione è ridimensionata a passi di 3 righe. Alternativamente si può anche specificare il numero di righe. Per farlo bisogna entrare nella modalità comandi con <Ctrl-a :>, e semplicemente scrivere 'resize n'.

Scrolling

Premendo <Ctrl-a Esc> si entra nella modalità scrollback. Appena fatto un messaggio appare nella status bar in basso, che dice "Copy mode...". Ora si può fare scrolling sia in basso che in alto usando i tasti <PageUp>/<PageDown>, o <Ctrl-u>/<Ctrl-d>. Già di per se è utile, ma diventa molto potente questa modalità quando è combinata al copia/incolla.

Nota: se vuoi usare questa caratteristica ed utilizzi un terminale URxvt, potresti voler inserire nel file ~/.Xdefaults:

URxvt*secondaryScroll: true

Questa riga abilita l'uso di <Shift-PageUp>/<Shift-PageDown> per andare avanti e indietro nello scroll buffer. Un'altra funzionalità vitale se si usa un terminale è inserire nel file ~/.screenrc:

altscreen on

per prevenire il problema che quando si apre un file in vim (per esempio), alla sua chiusura sul prompt viene visualizzato in alto il contenuto del file.

Copia/Incolla

Il copia funziona selezionando una posizione di partenza e una di arrivo per il testo da copiare. Questi due punti possono essere settati utilizzando il tasto <Spazio>. Si può spostarsi tra il testo utilizzando le frecce, oppure i tasti <h>, <j>, <k> ed <l>. Il contenuto copiato nel buffer può essere poi incollati in qualsiasi altra finestra della sessione corrente di Screen premendo <Ctrl-a J>.

NOTA: ovviamente per fare questo bisogna essere nella modalità scrollback.

Si possono anche copiare file dentro Screen, o concatenare selezioni di varie finestre dentro un file locale. Per farlo, dopo aver selezionato e copiato dentro il buffer si deve premere <Ctrl-a :> e scrivere 'bufferfile file.txt'. Il file verrà sovrascritto se già esiste con <Ctrl-a >>.

Settaggi

Una cosa interessante è il poter cambiare la sequenze di escape <Ctrl-a> che precede tutti i comandi. Per farlo bisogna inserire nel file ~/.screenrc:

escape ``

Per cambiarlo ad esempio con "`" Un'altra cosa interessante è il poter l'aspetto della status bar. Ad esempio inserire nel file ~/.screenrc:

hardstatus alwayslastline                                                                                               
hardstatus string '%{= mK}%-Lw%{= KW}%50>%n%f* %t%{= mK}%+Lw%< %{= kG}%-=%D %d %M %Y %c:%s%{-}'

oppure:

 hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'

o ancora:

hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c %{g}]'

Questa è una piccola variazione della barra precedente, ma che mostra il carico di lavoro:

hardstatus string '%{gk}[ %{G}%H %{g}][%= %{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%l%{g}]%{=b C}[ %m/%d %c ]%{W}'

Avviare Screen con ssh

$ ssh -t user@host screen -RD

In questo modo, appena loggati via ssh, ci ritroviamo a lavorare dentro Screen. Se dobbiamo scollegarci, ma non vogliamo interrompere le operazioni in corso, basta fare un detach <Ctrl-a d>. La connessione si chiude, però screen no. Basterà ripetere il comando successivamente per ricollegarsi e continuare il lavoro.

Strumenti personali