Tmux – più programmi dalla riga di comando

Parlare di “Terminal Multiplexer” può spaventare: cosa sarà mai?
La risposta è: qualcosa di molto utile, specialmente se siete soliti lavorare su server remoti. Se poi la linea di comando per voi è un piacere, allora Tmux può riservarvi ore di gioia…

Tmux consente infatti di aprire sessioni su server remoti, lanciare operazioni, staccare la finestra, andarsene a casa e riattaccare la sessione ritrovando tutto come se nulla fosse accaduto.
Si tratta della funzione principale del glorioso GNU Screen, ma cui Tmux aggiunge una moltitudine di migliorie.

Con Tmux lo schermo si può suddividere come si vuole. L’organizzazione in sessioni/finestre/pannelli consente di avere spazi di lavoro straordinariamente razionali e organizzati.
Al punto che per alcuni è diventato un’alternativa ai comuni (e pesanti) window manager.

Esempio di Tmux
Esempio di sessione Tmux: nello stesso schermo ho disposto Vi, Htop, Newsboat, Sc-Im…

Tornando alla nostra amata linea di comando, Tmux presenta un vantaggio, che è anche un’arma a doppio taglio: l’estrema configurabilità.
Ho conosciuto persone impegnate più nel configurare la linea di stato e il key mapping di Tmux che a usarlo realmente…anzi, una di quelle persone sono proprio io 🙂

Il mio consiglio allora è quello di “farsi le ossa” smanettando con il file di configurazione .tmux.conf, esultare per le migliorie e giocando con powerline e plugins, ma poi tornare all’essenzialità. Perchè la velocità, il poter non staccare mai le mani dalla tastiera, la pulizia nell’organizzazione delle informazioni sono il segreto e la forza di Tmux. Che è un programma “esigente”, come Vi. Ma alla fine ripaga per lo sforzo, e lo fa con gli interessi.

Sessioni, finestre, pannelli

dove comincia il divertimento

Per poter lavorare con profitto con Tmux è necessario capire la “logica” dell’applicazione. E questa logica è tutta compresa nel modo in cui il programma gestisce gli elementi base: sessioni, finestre, pannelli.

Si comincia dalla sessione. Ogni volta che lanciamo Tmux viene creata una sessione. Se vogliamo dare un nome alla nostra sessione (cosa che consiglio sempre di fare, assegnando nomi significativi, a differenza di ciò che farò in questo esempio…) basterà digitare

​tmux​​ ​new​​ ​-s​​ ​primasessione

Il risultato sarà uno schermo nero con la riga di stato in basso che riporterà il nome della sessione.


L’onnipresente prefisso

I comandi Tmux vengono inseriti attraverso una sequenza di tasti che comincia con il prefisso CTRL-B. Vedremo più avanti come ridefinire questa scomoda combinazione con la più agevole (per le dita) sequenza CTRL-A tipica di screen. Ogni volta che scriverò dunque PREFISSO intenderò questa combinazione di tasti.


La sessione può essere staccata

Se nel mio terminale lancio un applicativo, ad esempio htop, mi basterà digitare la sequenza PREFISSO-D per tornare al prompt. Cosa è successo?
Semplice. Il programma in realtà è ancora “vivo”, ma è stato staccato. Se digito:

tmux ls

posso notare come la sessione che ho staccato “esista ancora”. Mi basterà “riattaccarla” con:

tmux​​ attach​​ -t primasessione​​ 

e come per magia ritroverò il mio htop in azione! Non è magia, ma ci si avvicina.
Per inciso, se voglio “uccidere” la sessione il comando è:

tmux​​ kill-session​​ -t​​ primasessione

E’ giunto il momento di creare una sessione che presenti due finestre. Diciamo una prima finestra con una shell, e la seconda con un Midnight Commander. Digito dunque:

tmux new -s miasessione -n miashell

Tutto come previsto. Si apre la finestra con la sessione “miasessione” e il prompt della shell. Ora mi basta creare una nuova finestra con PREFISSO-C e lanciare mc.

Visto? nella riga di stato posso vedere la presenza, nella sessione miasessione, delle due finestre: miashell e mc. Per rinominare una finestra mi basta usare PREFISSO-, (il prefisso CTRL-B oppure CTRL-A se l’ho ridefinito, seguito da una virgola).

Le finestre sono precedute da un numero. Di default la prima finestra ha il numero 0, ma vedremo in seguito come ridefinire la cosa per far iniziare la sequenza dal numero 1.

Mi basterà digitare PREFISSO+numero per “saltare” da una finestra a un’altra.

La parte più bella però è la successiva. Posso infatti dividere ogni mia finestra in più pannelli.

Se guardate l’immagine più sopra con i 4 applicativi disposti in uno schema 2×2 potete facilmente capire cosa si possa ottenere. In pratica, lo schermo può essere suddiviso a piacimento, disponendo i programmi come risulta più comodo. L’esempio classico di un amministratore di server che può monitorare più macchine o il programmatore che tiene a schermo editor, debugger e riga comando / output possono bastare a far capire l’utilità di una soluzione di questo tipo.

La suddivisione dello schermo avviene con i comandi PREFISSO-% per la suddivisione verticale e PREFISSO-” per quella orizzontale, ma redifiniremo questi tasti in maniera più intuitiva agendo sul file di configurazione.

La gioia della personalizzazione

La personalizzazione di Tmux avviene tutta attraverso la scrittura del file .tmux.conf presente di default nella propria home directory.

La fantasia e le innumerevoli possibilità possono fornire ore e ore di svago per chiunque coltivi la passione della customizzazione, consentendo anche soluzioni assai avanzate. Non è questa la sede per spingerci verso arditi settaggi (lascio ai link e ai libri qua sotto il compito per i più curiosi e interessati), ma mi limito a “ritoccare” alcuni aspetti molto importanti per quanto riguarda le funzionalità base del programma.

Apro dunque con il mio editor preferito (oppure creo) il file .tmux.conf

La primissima cosa che andrò a modificare è il PREFISSO. CTRL-B è infatti una sequenza che giudico infelicissima. Meglio, molto meglio CTRL-A, che non a caso è il prefisso standard di GNU Screen:

# Ctrl-a al posto di Ctrl-b
# Cancello la combinazione C-b
unbind C-b
# e setto C-a
set -g prefix C-a

Voglio poi che l’indice base per finestre e pannelli parta da 1 anzichè da 0:

# Indice base per le finestre a 1 invece di 0
set -g base-index 1
# Indice per i pannelli a 1 invece di 0
setw -g pane-base-index 1

Voglio avere il manuale a portata di tasto PREFISSO-?, e voglio poter cambiare la mia configurazione e ricaricarla con una semplice sequenza di tasti (PREFISSO-r) per fare i miei esperimenti:

# mostra il manuale
bind-key ? command-prompt "split-window -h 'exec man %%'"
# ricarica il file di configurazione
bind r source-file ~/.tmux.conf  \; display  "Ricaricato!"

Voglio divertirmi a suddividere la mia finestra in più pannelli in maniera intuitiva. Uso \ oppure | per la suddivisione verticale e – per quella orizzontale. Semplice e intuitivo!

# Dividi
bind-key - split-window -v
bind-key \ split-window -h
bind-key | split-window -h

Abilitiamo il mouse, e poi voglio i colori!

# Attiva il mouse
set -g mouse on

# 256 colori
set -g default-terminal "screen-256color"

Su riga di comando, taglia e incolla personalizzati, potenziamento della clipboard, temi e plugin lascio il divertimento a voi, e le spiegazioni ai testi consigliati. E’ tutto molto facile, tutto molto ma molto ricco di soddisfazioni. Buon divertimento con Tmux!

Approfondimenti

le risorse in rete, i testi per sapere tutto

Risorse online

Due ottimi libri acquistabili su Amazon

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *