Utilizzare un desktop environment per accedere ad una o più console di sistema è un’operazione comoda e semplice: basta aprire due o tre finestre, ognuna
delle quali conterrà il terminale. Ma utilizzare un’interfaccia grafica per svolgere task del genere, tipici dell’ amministratore di sistema è quantomeno superfluo, oltre che inefficiente.
Un terminal multiplexer è un’applicazione che consente l’utilizzo simultaneo di più terminali, offrendo la possibilità ad ogni utente di
passare facilmente da un terminale all’altro sfruttando un’unica interfaccia a riga di comando. Su Linux, due dei più diffusi ed utilizzati terminal
multiplexer sono GNU Screen e tmux. Nel seguito, vedremo le caratteristiche principali di entrambi questi software, e ne
ricaveremo un interessante confronto.
Un buon terminal multiplexer
In generale, possiamo pensare ad un terminal multiplexer come un “antenato” degli attuali window manager, che ci consentono di utilizzare
più di un’applicazione (grafica) simultaneamente. In questo senso, possiamo certamente affermare che la caratteristica fondamentale di un terminal
multiplexer è proprio la capacità di visualizzare contemporaneamente gli output di più terminali. Questo genere di necessità è molto
frequente, per esempio quando si vogliono eseguire diversi e processi, e magari tenerne sotto controllo l’esecuzione tramite apposite applicazioni di
controllo (si pensi al comando top).
Figura 1 – Gli output di alcuni terminali gestiti tramite un terminal multiplexer (fonte: nerdyshawn.com)
Ma i terminal multiplexer hanno anche altre caratteristiche significative. Innanzitutto, essi consentono di eseguire applicazioni in modo persistente
eventuali problemi di instabilità del segnale. Per fare un esempio, possiamo avviare l’esecuzione di un’applicazione dalla nostra workstation dell’ufficio,
ed osservare gli effetti dell’esecuzione solo dopo essere ritornati a casa, anche dopo avere chiuso il terminale su cui l’esecuzione era iniziata. Al tempo
stesso, possiamo far sì che più utenti si connettano simultaneamente allo stesso terminale, ed alla stessa sessione, pur utilizzando computer differenti:
quest’altra caratteristica è nota come session sharing
Ovviamente, esistono diverse implementazioni del concetto di terminal multiplexer. Quelli che descriveremo nel seguito, GNU Screen
tmux
opzione, segnaliamo l’apposita sezione sulla pagina di Wikipedia
GNU Screen
Il terminal multiplexer “per eccellenza” dei sistemi GNU/Linux si chiama GNU Screen, ed è stato originariamente sviluppato nel 1987.
Questa sua quasi trentennale storia è garanzia di solidità, in quanto in tutti questi anni lo sviluppo di questa applicazione è stato (ed
è tuttora) corredato da innumerevoli test, essendo stato utilizzato da un vastissimo numero di utenti. Inoltre, è bene sottolineare che, essendo parte del
progetto GNU, questo software aderisce in pieno allo filosofia del free software, di cui avevamo già parlato in precedenza.
Possiamo scaricare Screen dall’apposita pagina del sito ufficiale del progetto GNU,
sebbene in genere la maggior parte delle principali distribuzioni Linux lo includa tra i repository ufficiali. Una volta installato, possiamo avviarlo
semplicemente digitando il comando screen sul terminale, in seguito al quale ci verrà mostrata una classica shell vuota. Utilizzando la
terminologia di Screen, diciamo che abbiamo generato una session, che contiene una sola window, dove per window si
intende un “contenitore” di una shell o di un qualsiasi altro software. In aggiunta a ciò, Screen è in grado di suddividere il display in più region, ognuna delle quali rappresenta una window.
Gestire le window di Screen
Ma come si utilizzando le funzionalità di Screen? Per prima cosa, possiamo volere eseguire un generico programma, per esempio il comando top, che
rimarrà in esecuzione finché lo desidereremo. Ora, supponiamo di voler creare una nuova window, al fine di potere avviare un nuovo
programma. Per farlo, utilizziamo prima la combinazione di tasti CTRL+A, e poi premiamo il tasto C. Vedremo subito “scomparire” l’output
del comando top, ed al suo posto “ricomparirà” una shell vuota, che rappresenta la nuova window. In questo modo abbiamo messo in background la
window che sta eseguendo top. A questo punto, per ritornare alla window precedente, possiamo utilizzare CTRL+A, seguito
da P (che sta per “previous”; analogamente, per passare alla window successiva, utilizzeremo CTRL+A seguito da N).
Esistono diversi comandi come quelli già visti, e tutti iniziano con CTRL+A. Per visualizzarli tutti esiste la combinazione CTRL+A
seguita da ?, che mostra una lista dei comandi supportati. Tra questi, CTRL+A seguito da “ mostrerà la lista di tutte le window, ad ognuna delle quali è assegnato un numero. Possiamo scegliere, quindi, a quale delle window accedere,
utilizzando l’opzione CTRL+A seguito dal numero della window (ad esempio, CTRL+A 3). Per chiudere una window, invece, possiamo utilizzare CTRL+A seguito da K.
Gestire e creare più region
La caratteristica più visivamente interessante è la possibilità di suddividere il display in più region. Per farlo, possiamo utilizzareCTRL+A seguito da | se vogliamo effettuare lo splitting del display in senso verticale, oppure da S se vogliamo suddividerlo in senso orizzontale. In questo modo, possiamo suddividere in modo binario gerarchico l’intero
display, sfruttando al meglio lo spazio disponibile. Se ne abbiamo bisogno, inoltre, possiamo rimuovere la region in cui ci troviamo
utilizzando CTRL+A seguito da X, oppure chiudere tutte le region eccetto quella corrente utilizzando il tasto Q.
Figura 2 – Regioni multiple su GNU Screen (fonte: linuxcommand.org)
Sfruttare le session
Con GNU Screen possiamo sfruttare la persistenza, tramite l’utilizzo delle session. Una session può essere collegata ad un terminale, a
più terminali o a nessun terminale; indipendentemente da ciò, qualsiasi processo che è in esecuzione in una window di quella session continuerà ad essere
eseguito. Di conseguenza, se poniamo un processo in esecuzione su una window, e poi chiudiamo il terminale, possiamo comunque accedere alla window
associando un nuovo terminale ad essa. I comandi di interesse in questo senso sono:
- screen -list
- screen -d -r
- screen -D -R
Altre informazioni su GNU Screen
Infine, è possibile agire su alcune opzioni di personalizzazione di GNU Screen, per esempio modificando le combinazioni di tasti o
associando ad alcuni tasti specifiche operazioni. Per operare in tal senso, possiamo agire sui file di configurazione /etc/screenrc e ~/.screenrc, ma non entreremo ulteriormente nei dettagli in questo articolo. Per maggiori informazioni sulle possibilità di personalizzazione di
Screen, rimandiamo ad un’interessante guida.
Abbiamo detto, finora, che GNU Screen ha alle spalle una lunga esperienza, che gli conferisce grande stabilità e la rende una soluzione
più che rodata. Ma “l’anzianità” di Screen ha anche i suoi difetti, che riguardano principalmente la manutenzione del codice sorgente, che
risulta essere decisamente complessa. Ciò implica che lo sviluppo di GNU Screen, negli ultimi anni, ha riguardato principalmente la correzione di alcuni
bug, piuttosto che l’introduzione di nuove feature. Da questo punto di vista, utilizzare tmux può rappresentare un vantaggio.
tmux
A differenza di GNU Screen, tmux è un progetto molto più giovane, nato nel 2007, vent’anni dopo il primo rilascio di Screen. Nonostante
ciò, è anch’esso molto utilizzato, e sebbene non è considerato robusto e garantito come GNU Screen, è certamente molto più semplice da manutenere,
prestandosi molto di più all’introduzione di nuove funzionalità.
Generalmente tutte le maggiori distribuzioni Linux includono tmux tra le applicazioni dei repository ufficiali, sebbene possiamo anche in questo caso
scaricarlo ed installarlo tramite il sito ufficiale. Per avviarlo, è sufficiente digitare il comando tmux sulla shell. Anche con tmux si parla di window e session, mentre le region vengono chiamate pane; ciò che cambia sono i
comandi e le combinazioni di tasti, ed anche qualche funzionalità.
Avvio e gestione delle window
All’avvio di tmux possiamo creare una nuova session, ed assegnare ad essa un nome (che può tornare utile per recuperarla in un secondo
momento). Possiamo anche assegnare un nome alla window che genereremo. Per farlo, aggiungiamo degli opportuni parametri al comando tmux:
[code] tmux new -s "nome_session" -n "nome_window" [/code]
La prima differenza visibile tra Screen e tmux sta nel fatto che quest’ultimo include una barra di stato, posta nella parte inferiore di
ogni pane, che mostra il numero di window attive, il nome della session e della window ed altre informazioni utili.
A questo punto, ci serve capire come creare nuove window, e come cambiare il focus per spostarsi da una all’altra. Essenzialmente, il funzionamento è
simile a quello di Screen, ma anziché la combinazione CTRL+A
CTRL+B
comandi principali
per la gestione delle window:
Comando | Descrizione |
---|---|
CTRL+B ? |
Mostra la lista dei comandi |
CTRL+B C |
Crea una nuova window |
CTRL+B N |
Sposta il focus alla window successiva |
CTRL+B P |
Sposta il focus alla window precedente |
CTRL+B 0 |
Sposta il focus alla window 0 (il comportamento è analogo per i numeri da 1 a 9) |
CTRL+B W |
Mostra la lista delle finestre |
CTRL+B , |
Rinomina la window corrente |
Comando |
Descrizione |
---|---|
CTRL+B “ |
Divide il pane orizzontalmente |
CTRL+B % |
Divide il pane verticalmente |
CTRL+B [freccia direzionale] |
Sposta il focus sul panel indicato dalla freccia direzionale che abbiamo premuto |
CTRL+B CTRL+[freccia SU] |
Aumenta il carattere del pane corrente di 1pt |
CTRL+B CTRL+[freccia GIÙ] |
Diminuisce il carattere del pane corrente di 1pt |
CTRL+B ALT+[freccia SU] |
Aumenta il carattere del pane corrente di 5pt |
CTRL+B ALT+[freccia GIÙ] |
Diminuisce il carattere del pane corrente di 5pt |
CTRL+B X |
Rimuove il pane corrente |