Salta al contenuto principale

tmux: gestione sessioni terminale persistenti

·999 parole·5 minuti
❯ lineadicomando.it
Autore
❯ lineadicomando.it
Specs, Bugs and Log Console

Contesto
#

tmux è un multiplexer di terminale che mantiene sessioni attive indipendentemente dalla connessione SSH o dal terminale locale. Permette di dividere lo schermo in pannelli, gestire finestre multiple e riprendere il lavoro esattamente dove era stato lasciato.

Prerequisiti
#

  • Sistema Linux (Debian/Ubuntu, RHEL/Fedora/AlmaLinux)
  • Accesso shell con privilegi sudo per l’installazione
  • tmux 3.0 o superiore consigliato (verifica con tmux -V)

Procedura
#

1. Installazione
#

Debian/Ubuntu:

sudo apt update && sudo apt install -y tmux

RHEL/Fedora/AlmaLinux:

sudo dnf install -y tmux

2. Avviare una sessione
#

Sessione anonima:

tmux

Sessione nominata (consigliato in produzione):

tmux new -s <nome_sessione>

3. Detach dalla sessione
#

Lascia la sessione attiva in background:

Ctrl+b d

4. Elenco sessioni attive
#

tmux ls

Output atteso:

remote: 1 windows (created Mon Jan 27 10:42:00 2025)
logs: 2 windows (created Mon Jan 27 11:00:00 2025)

5. Riattaccarsi a una sessione
#

tmux attach -t <nome_sessione>

Variante: riattacca all’ultima sessione disponibile senza specificare il nome:

tmux attach

6. Gestione finestre
#

Le finestre sono tab all’interno di una sessione.

Ctrl+b c        # nuova finestra
Ctrl+b n        # finestra successiva
Ctrl+b p        # finestra precedente
Ctrl+b <n>      # vai alla finestra numero n (es. Ctrl+b 2)
Ctrl+b ,        # rinomina la finestra corrente
Ctrl+b w        # elenco interattivo di tutte le finestre

7. Gestione pannelli
#

I pannelli dividono una finestra in aree indipendenti.

Ctrl+b %        # split verticale (pannello a destra)
Ctrl+b "        # split orizzontale (pannello in basso)
Ctrl+b ←↑→↓     # navigazione tra pannelli
Ctrl+b z        # zoom: ingrandisce/riduce il pannello corrente
Ctrl+b {        # sposta il pannello a sinistra nella rotazione
Ctrl+b }        # sposta il pannello a destra nella rotazione
Ctrl+b x        # chiudi il pannello corrente (chiede conferma)

Ridimensionamento pannelli:

Ctrl+b :resize-pane -D 5   # espandi verso il basso di 5 righe
Ctrl+b :resize-pane -R 10  # espandi verso destra di 10 colonne

8. Scrolling e copy mode
#

Per scorrere l’output nel pannello attivo senza mouse, entra in copy mode:

Ctrl+b [

Navigazione in copy mode:

Freccia Su / Giu      riga per riga
PageUp / PageDown     pagina per pagina
Ctrl+f / Ctrl+b       pagina avanti / indietro (stile less)
/ <pattern> Enter     ricerca in avanti
? <pattern> Enter     ricerca all'indietro
n / N                 prossima / precedente occorrenza
q                     esci da copy mode

Selezione e copia (default, comportamento vi-like dopo configurazione):

Space                 inizia selezione
Enter                 copia la selezione nel buffer tmux

Incolla il buffer copiato:

Ctrl+b ]

9. Chiusura
#

Chiude la shell corrente e il pannello associato:

exit

Termina una sessione specifica dall’esterno:

tmux kill-session -t <nome_sessione>

Termina tutte le sessioni:

tmux kill-server

Configurazione con .tmux.conf
#

Il file ~/.tmux.conf viene letto all’avvio di ogni nuova sessione.

Configurazione minima consigliata:

# Terminale con supporto 256 colori e funzionalità estese
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"

# Riduce la latenza sull'Escape key (rilevante in Vim/Neovim)
set -sg escape-time 10

# Aggiornamento frequente della status bar (uptime, ora, ecc.)
set -g status-interval 2

# Scrollback esteso: utile con log applicativi
set -g history-limit 100000

# Abilita mouse: resize pannelli, click per focus, scroll
set -g mouse on

# Indicizzazione finestre da 1 invece che da 0
set -g base-index 1
setw -g pane-base-index 1

# Numerazione automatica dopo chiusura di una finestra
set -g renumber-windows on

# Copia con comportamento vi-like in copy mode
setw -g mode-keys vi
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi y send -X copy-selection-and-cancel

Applicare modifiche senza riavvio
#

Da dentro una sessione tmux attiva:

tmux source-file ~/.tmux.conf

Oppure con la shortcut da prefix:

Ctrl+b :source-file ~/.tmux.conf

Verificare la configurazione attiva
#

Mostra tutte le opzioni globali in vigore:

tmux show-options -g

Mostra il valore di una singola opzione:

tmux show-options -g history-limit

Esempi pratici
#

Sessione persistente su server remoto: la sessione sopravvive alla disconnessione SSH:

tmux new -s deploy
ssh user@<host>
# avvia processo lungo

Monitoraggio log in parallelo alla shell: split orizzontale, log in basso:

tmux new -s ops
# nel pannello superiore: shell di lavoro
Ctrl+b "
# nel pannello inferiore:
tail -f /var/log/syslog

Sviluppo con editor + shell: split verticale, editor a sinistra:

tmux new -s dev
Ctrl+b %
# pannello sinistro: vim <file>
# pannello destro: compilazione / test

Inviare lo stesso comando a tutti i pannelli della finestra (utile per deploy su più nodi):

Ctrl+b :setw synchronize-panes on
# digita il comando: viene inviato a tutti i pannelli
Ctrl+b :setw synchronize-panes off

Errori comuni
#

Prefix non premuto prima dello shortcut Ogni shortcut tmux richiede prima Ctrl+b (o il prefix ridefinito). Premere direttamente % non produce alcun effetto.

Sessioni dimenticate attive Verificare sempre prima di aprirne di nuove:

tmux ls

Scrollback insufficiente Il default di tmux è 2000 righe. Con log applicativi si esaurisce rapidamente. Impostare history-limit a 50000 o superiore in .tmux.conf.

tmux-256color non disponibile nel sistema remoto Se il server remoto non ha il terminfo corretto, i colori risultano alterati o si vedono sequenze di escape. Soluzione:

# sul client locale, copia il terminfo sul server
infocmp tmux-256color | ssh user@<host> 'mkdir -p ~/.terminfo && tic -x -'

Copia con mouse che non funziona dopo set -g mouse on Con il mouse abilitato, la selezione nativa del terminale è intercettata da tmux. Per copiare nel clipboard di sistema, tieni premuto Shift durante la selezione con il mouse.

Note operative
#

  • Il file .tmux.conf viene letto solo all’avvio della sessione, non al semplice attach.
  • tmux source-file applica le modifiche alla sessione corrente, ma non aggiorna sessioni già esistenti con opzioni precedentemente impostate in modo conflittuale.
  • Per ambienti con più utenti sullo stesso host, i nomi di sessione sono globali per l’utente Unix, non per il terminale.
  • Alternativa moderna: zellij offre UX più accessibile, layout persistenti e plugin, ma non è standard nei server Linux e richiede Rust per la compilazione dai sorgenti.

Riferimenti
#