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, mantenendo lo stato di esecuzione di un processo anche quando esso è eseguito da un terminale remoto, e potendo gestire
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 e tmux, sono probabilmente le due soluzioni più diffuse e rilevanti, ed è questo il motivo per il quale le abbiamo scelte. Per qualche altra
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.
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: mostra la lista delle session attualmente in esecuzione;
- screen -d -r: associa una session al terminale corrente;
- screen -D -R: associa una session al terminale corrente, espellendo tutti gli altri utenti dal terminale precedente.
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, viene utilizzata CTRL+B. Elenchiamo i 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 |
Gestione e creazione dei pane
Come abbiamo già detto, una caratteristica fondamentale dei terminal multiplexer è la capacità di gestire e visualizzare simultaneamente gli output di
diversi terminali. Per farlo, dobbiamo suddividere il display in più pane. La differenza principale rispetto a Screen, è che su tmux ogni
pane equivale ad un terminale, e quindi possiamo gestire più window da un singolo pane.
Di seguito, elenchiamo anche in questo caso una serie di comandi per la gestione dei pane.
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 |
Si noti che la rimozione di un pane termina ogni applicazione che vi era stata eseguita (cosa che non succede con Screen, in cui rimuovere una region non
significa rimuovere anche la window che essa rappresenta).
Gestione delle session
Anche in tmux la gestione delle session ha un ruolo fondamentale in termini di persistenza, dal momento che possiamo porre una session in
background (tramite il detaching di essa, operazione che può effettuata col comando CTRL+B seguito dal tasto D), per poi
riutilizzarla in un secondo momento. Per crearne una nuova, basta semplicemente utilizzare il comando:
[code] tmux new [/code]
Possiamo eventualmente far seguire quest’ultima stringa dall’opzione -n (già vista) per assegnare un nome alla session. Possiamo rinominare la
session con il comando CTRL+B seguito dal tasto $.
A questo punto, potremmo avere la necessità di riassociare una specifica session al terminale corrente. Per farlo, possiamo eseguire il comando seguente:
[code] tmux attach -d -t <nome_della_session> [/code]
Come si capisce da quest’ultima operazione, la possibilità di associare alle session nomi specifici e descrittivi è un vantaggio non
irrilevante nell’uso quotidiano di un terminal multiplexer.
Altre informazioni su tmux
Anche tmux offre molte possibilità di personalizzazione. I file di configurazione che tmux utilizza sono /etc/tmux.conf e ~./.tmux.conf,
ma possiamo specificarne uno alternativo con l’opzione -f, in fase di avvio. In questi file, possiamo definire diverse opzioni relative alle combinazioni di tasti (modificando quelle esistenti o associando un "significato" ad una nuova combinazione), o modificare alcune opzioni della status bar. Per maggiori dettagli in merito, rimandiamo alla pagina del manuale di tmux, accessibile con il comando
seguente:
[code]man tmux[/code]
GNU Screen vs tmux
A questo punto, dopo averne descritto le principali caratteristiche ed il relativo funzionamento, è interessante mettere a confronto Screen e tmux. Sia GNU
Screen che tmux sono software liberi, sebbene il primo sia rilasciato sotto la più pura licenza GPLv3, mentre tmux si
rifà alla licenza BSD (comunque definita GPL-compatible). Ciò garantisce a moltissimi sviluppatori di potere offrire il loro contributo ad
entrambe le due soluzioni, il che si traduce, nel tempo, in una maggiore stabilità.
Data la maggiore anzianità di GNU Screen, probabilmente possiamo affermare che esso rappresenta la soluzione più rodata, anche perché è
attualmente la più diffusa. Per questo motivo, tmux si presenta come un’alternativa a GNU Screen, e lo fa direttamente sul proprio sito ufficiale.
Tuttavia, come abbiamo già detto, tmux è molto più semplice da manutenere, ed al tempo stesso risolve alcuni problemi legati al dispendio di risorse che GNU Screen, talvolta, comporta. La più agevole manutenzione del codice di tmux consente agli sviluppatori di
estenderlo in modo relativamente semplice e più frequentemente di quanto ciò accada con Screen.
A questo significativo vantaggio di tmux si aggiungono la presenza della barra di stato (a mio avviso molto utile, anche perché
personalizzabile) e la possibilità di assegnare nomi descrittivi alle session. Inoltre, vale la pena notare che la combinazione CTRL+B rappresenta, in genere, una scelta migliore di CTRL+A, poiché quest’ultima è utilizzata da diverse applicazioni per effettuare altre
operazioni (per esempio per spostare il cursore all’inizio della riga o per selezionare tutto il testo).
In definitiva, quindi, la mia personale opinione è che tmux sia superiore (ma non esageratamente) a GNU Screen. La maggiore diffusione di
quest’ultimo, ed il supporto della Free Software Foundation, però, lo manterrà al primo posto tra le scelte degli utenti ancora per un po’, e per questo
motivo è bene tenerlo sempre in forte considerazione.