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 tmuxRHEL/Fedora/AlmaLinux:
sudo dnf install -y tmux2. Avviare una sessione #
Sessione anonima:
tmuxSessione nominata (consigliato in produzione):
tmux new -s <nome_sessione>3. Detach dalla sessione #
Lascia la sessione attiva in background:
Ctrl+b d4. Elenco sessioni attive #
tmux lsOutput 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 attach6. 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 finestre7. 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 colonne8. 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 modeSelezione e copia (default, comportamento vi-like dopo configurazione):
Space inizia selezione
Enter copia la selezione nel buffer tmuxIncolla il buffer copiato:
Ctrl+b ]9. Chiusura #
Chiude la shell corrente e il pannello associato:
exitTermina una sessione specifica dall’esterno:
tmux kill-session -t <nome_sessione>Termina tutte le sessioni:
tmux kill-serverConfigurazione 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-cancelApplicare modifiche senza riavvio #
Da dentro una sessione tmux attiva:
tmux source-file ~/.tmux.confOppure con la shortcut da prefix:
Ctrl+b :source-file ~/.tmux.confVerificare la configurazione attiva #
Mostra tutte le opzioni globali in vigore:
tmux show-options -gMostra il valore di una singola opzione:
tmux show-options -g history-limitEsempi pratici #
Sessione persistente su server remoto: la sessione sopravvive alla disconnessione SSH:
tmux new -s deploy
ssh user@<host>
# avvia processo lungoMonitoraggio 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/syslogSviluppo con editor + shell: split verticale, editor a sinistra:
tmux new -s dev
Ctrl+b %
# pannello sinistro: vim <file>
# pannello destro: compilazione / testInviare 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 offErrori 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 lsScrollback 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.confviene letto solo all’avvio della sessione, non al semplice attach. tmux source-fileapplica 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:
zellijoffre UX più accessibile, layout persistenti e plugin, ma non è standard nei server Linux e richiede Rust per la compilazione dai sorgenti.