Tmux: una valida alternativa a Screen

5 marzo 2016

Giuseppe La Rosa

- RHCE, RHCVA, ITILv3, CEH

Intro

il terminal multiplexer e’ uno strumento che permette di stabilire delle sessioni TTY persistenti su uno o più server, rendendole immuni alla perdita della connettività di rete.
Ecco alcuni esempi pratici di utilizzo:
  • Attacciare e detacciare sessioni: possiamo lanciare comandi che non possono essere interrotti come firmware upgrade, fsck o yum update.
  • Sharare il proprio terminale (in maniera testuale) o addirittura lavorare a 4 mani all’interno dello stesso
  • Visualizzare nella stessa finestra varie informazioni o aggregare log che provengono da più server
Il terminal multiplexere più diffusso da oltre 30 anni è GNU Screen: soluzione tanto stabile quanto datata. Nel 2007 e’ stato rilasciato sotto licenza BSD Tmux che migliora alcuni aspetti del suo predecessore.
Alcuni punti di forza:
  • gestione delle “finestre” migliorata: oltre a gestire sessioni o window multiple, tmux consente anche di gestire “panes” multipli all’interno della singola window.
  • Scripting support: tramite script potrete settare e controllare le vs sessioni
  • Presenza di una comodissima barra di stato completamente personalizzabile
  • Auto renaming delle finestre

 

Primi passi

dopo aver installato tmux nella modalità consona alla vostra distro e averlo lanciato digitando: tmux, noteremo una barra di stato in basso che indica il numero ed il nome della finestra corrente (sulla sinistra), la data e l’orario (a destra). Come detto precedentemente il suo contenuto potrà essere completamente personalizzato e vedremo in seguito come fare.
1
Per impartire comandi a tmux dovremmo farli precedere dalla combinazione di tasti  (rimappabile a piacimento)
Ctrl + b
Creiamo una nuova finestra tramite la squenza di tasti: Ctrl + b c (create) e colleghiamoci tramite ssh al nostro server remoto
2016-03-05_190503
Il passaggio da una finestra all’altra avviene digitando:
Ctrl + b n (next) oppure Ctrl + b p (prev)
Fin quì nulla di nuovo per gli utenti GNU Screen, adesso introduciamo la grande “novità”: tmux permette di  suddividere la singola window in più pane tramite

 

Ctrl + b “ per splittare orizzontalmente
Ctrl + b  % per splittare verticalmente
Posso, ad esempio, visualizzare il messages e le risorse di sistema all’interno della stessa finestra
2
Addesso possiamo muoverci tra i panes utilizzando  Ctrl + b e le freccie
Dalla versione 1.8 è possibile anche zoommare tramite Ctrl + b z
E’ possibile visualizzare l’elenco dei comandi disponibili digitando al prompt
tmux list-key

oppure tramire la pressione di: Ctrl + b ? ,anche se preferisco “man tmux”.

 

Detach & re-attach delle sessioni

tmux gestisce sessioni multiple, che possone essere create digitando:
# tmux new-session
è possibile uscire dalle sessioni (senza chiuderle) tramite la seguente shortcut: Ctrl + b d
oppure digitando:
# tmux detach
Per visualizzare la liste delle sessioni
# tmux ls
0: 2 windows (created Fri Mar  4 10:35:16 2016) [155x46] (attached)
1: 3 windows (created Fri Mar  4 10:55:16 2016) [155x46]
Per fare il re-attach di una sessione esistente:
# tmux a -t session-name
oppure se se abbiamo una sola sessione:
# tmux a

se vogliamo definitivamente liberarci di una sessione:

# tmux kill-session -t session-name
in alternativa, all’interno di una sessione digitando CTRL + b s potremmo vedere la lista delle sessioni e selezionarle.
Avviando una sessione in modalita’ shared:
# tmux new-session -s shared
sarà possibile shararla digitando:
# tmux attach-session -t shared
(per permettere lo sharing di sessioni tra utenti diversi ci sono un paio di accorgimenti da prendere, ma nulla di troppo complesso)

Configurazione

Il file .tmux.conf all’interno della home permette di customizzare l’environemnt; io ad esempio ho sostituito la data e l’orario visualizzati sulla barra di stato con l’hostname e il load average della macchina inserendo le seguenti righe:
set -g status-right "#(hostname -s) Load avg #(cut -d' ' -f1-3 /proc/loadavg)"
set -g status-interval 15
se volessimo cambiare i colori della barra di stato scegliendo un font bianco su background grigio scuro:
set -g status-bg colour235
set -g status-fg white
e posso a sua volta segliere colori diversi per la parte destra e sinistra
# left
set -g status-left-fg white
set -g status-left-bg green
# right
set -g status-right-fg black
set -g status-right-bg green
Questa entry:
bind r source-file ~/.tmux.conf \; display-message "Config reloaded..."
mi permette di applicare le modifiche al volo semplicemente digitando CTRL + b r.
Ed ecco un esempio della mia status bar:
custom_statusbar

 

Conclusioni

Se questo post vi ha incuriosito, vi segnalo alcuni link che ho trovato utili:
Tenete presente che su GitHub trovate svariate personalizzazioni del file di configurazione.
Vi invito a contattarmi per inesattezze o correzioni sul post.