Come usare tmux su un VPS Linux

13 min di lettura·Matthieu|

Impara a installare e usare tmux sul tuo VPS Linux per sessioni terminale persistenti, layout multi-pannello e protezione dalle disconnessioni SSH. Per Debian 12 e Ubuntu 24.04.

Ti connetti in SSH al tuo VPS, avvii una lunga migrazione del database e il Wi-Fi cade. Il processo muore. Il tuo lavoro e perso.

tmux risolve questo problema. Esegue le sessioni terminale direttamente sul server, indipendentemente dalla connessione SSH. Disconnettiti, riconnettiti e riprendi esattamente da dove avevi lasciato.

Questo tutorial copre tmux dall'installazione ai layout multi-pannello scriptati. Ogni comando funziona su Debian 12 o Ubuntu 24.04.

Cos'e tmux e perche usarlo su un VPS?

tmux e un terminal multiplexer. Permette di eseguire piu sessioni terminale all'interno di una singola connessione SSH, e queste sessioni restano attive sul server anche quando ti disconnetti.

tmux organizza il lavoro su tre livelli:

  • Sessions (sessioni) sono il contenitore di livello superiore. Ogni sessione e uno spazio di lavoro indipendente. Puoi staccarti da una sessione e ricollegarti in seguito.
  • Windows (finestre) vivono all'interno delle sessioni. Pensale come schede. Ogni finestra esegue la propria shell.
  • Panes (pannelli) dividono una singola finestra in piu rettangoli, ognuno con il proprio comando in esecuzione.
Session "deploy"
  ├── Window 0: "editor"
  │     ├── Pane 0: vim
  │     └── Pane 1: file watcher
  └── Window 1: "logs"
        └── Pane 0: journalctl -f

Su un VPS, tmux offre tre vantaggi concreti:

  1. Protezione dalle disconnessioni SSH. I tuoi processi continuano a girare quando la connessione cade. Riconnettiti e ricollegati alla sessione.
  2. Workflow multi-pannello. Monitora i log in un pannello, esegui comandi in un altro, modifica file in un terzo. Tutto dentro una singola connessione SSH.
  3. Persistenza delle sessioni. Lascia una sessione attiva per giorni. Staccati a fine giornata, ricollegati domani.

Come installare tmux su Debian 12 e Ubuntu 24.04

tmux e nei repository predefiniti sia di Debian 12 che di Ubuntu 24.04. Un singolo comando per installarlo.

sudo apt update && sudo apt install -y tmux

Verifica l'installazione:

tmux -V

Output atteso su Debian 12:

tmux 3.3a

Output atteso su Ubuntu 24.04:

tmux 3.4

Nota: il numero di versione conferma che tmux e stato installato dai repository ufficiali. Se non vedi nulla o appare "command not found", l'installazione e fallita. Controlla l'output di apt per eventuali errori.

Come creare e gestire le sessioni tmux

Una sessione tmux e uno spazio di lavoro persistente che vive sul server. Avviane una, esegui i tuoi comandi, e resta attiva anche se chiudi il terminale.

Creare sessioni

Avvia una nuova sessione con un nome:

tmux new-session -s deploy

Questo crea una sessione chiamata "deploy" e ti collega ad essa. Vedrai una barra di stato verde in fondo al terminale. Quella barra conferma che sei dentro una sessione tmux.

Per creare una sessione senza collegarsi (utile negli script):

tmux new-session -d -s background

Verifica che esista:

tmux list-sessions
background: 1 windows (created Thu Mar 19 10:00:00 2026)

Come staccarsi da una sessione tmux e ricollegarsi

Questo e il flusso di lavoro fondamentale su VPS. Staccati da una sessione per liberare il terminale, poi ricollegati in seguito per riprendere il lavoro. La sessione continua a girare sul server.

Per staccarti, premi il prefix key seguito da d:

Ctrl-b  d

Il prefix key e Ctrl-b per impostazione predefinita. Premi Ctrl e b insieme, rilascia entrambi, poi premi d. Ogni keybinding di tmux funziona cosi: prima il prefix, poi il tasto azione.

Il terminale torna alla shell normale. La sessione e ancora attiva.

Per ricollegarti:

tmux attach -t deploy

Se hai una sola sessione, puoi omettere il nome:

tmux attach

Verifica quali sessioni sono in esecuzione:

tmux list-sessions
deploy: 1 windows (created Thu Mar 19 10:00:00 2026) (attached)
background: 1 windows (created Thu Mar 19 10:05:00 2026)

L'etichetta (attached) indica a quale sessione e collegato il tuo terminale.

Terminare sessioni

Quando hai finito con una sessione, eliminala:

tmux kill-session -t background

Verifica che sia stata rimossa:

tmux list-sessions

Per terminare tutte le sessioni e fermare completamente il server tmux:

tmux kill-server

Rinominare sessioni

Dall'interno di una sessione, premi:

Ctrl-b  $

Digita il nuovo nome e premi Invio. Utile quando hai avviato una sessione senza nome e tmux le ha assegnato un numero.

Come usare le finestre tmux per organizzare le attivita

Le finestre (windows) sono schede all'interno di una sessione. Ogni finestra esegue la propria shell. Usale per separare attivita che non devono essere visibili contemporaneamente.

Crea una nuova finestra:

Ctrl-b  c

La barra di stato si aggiorna mostrando la nuova finestra. L'asterisco (*) segna la finestra attiva:

[deploy] 0:bash  1:bash*

Passare da una finestra all'altra

Per numero:

Ctrl-b  0    # Go to window 0
Ctrl-b  1    # Go to window 1

Ciclicamente:

Ctrl-b  n    # Next window
Ctrl-b  p    # Previous window

Rinominare una finestra

Ctrl-b  ,

Digita un nome significativo come "logs" o "editor" e premi Invio. I nomi rendono la barra di stato leggibile quando hai diverse finestre aperte.

Chiudere una finestra

Digita exit nella shell, oppure premi:

Ctrl-b  &

tmux chiede conferma prima di chiudere.

Come dividere il terminale in pannelli

I pannelli (panes) dividono una finestra in piu terminali visibili contemporaneamente. Qui tmux da il meglio per l'amministrazione VPS: guarda i log in un pannello mentre esegui comandi in un altro.

Dividi il pannello corrente orizzontalmente (sopra e sotto):

Ctrl-b  "

Dividi il pannello corrente verticalmente (sinistra e destra):

Ctrl-b  %

Dopo la divisione, hai due pannelli. Il bordo verde evidenzia il pannello attivo.

Come navigare e ridimensionare i pannelli tmux

Spostati tra i pannelli con i tasti freccia:

Ctrl-b  ↑    # Move to pane above
Ctrl-b  ↓    # Move to pane below
Ctrl-b  ←    # Move to pane left
Ctrl-b  →    # Move to pane right

Ridimensiona i pannelli tenendo premuto il prefix e poi i tasti freccia:

Ctrl-b  Ctrl-↑    # Resize pane up
Ctrl-b  Ctrl-↓    # Resize pane down
Ctrl-b  Ctrl-←    # Resize pane left
Ctrl-b  Ctrl-→    # Resize pane right

Zoom di un pannello

Serve un pannello a schermo intero temporaneamente? Attiva lo zoom:

Ctrl-b  z

Premilo di nuovo per ripristinare il layout diviso. La barra di stato mostra una Z accanto al nome della finestra quando un pannello e in zoom.

Chiudere un pannello

Digita exit nel pannello, oppure premi:

Ctrl-b  x

tmux chiede conferma. Se chiudi l'ultimo pannello di una finestra, anche la finestra si chiude.

Scambiare pannelli

Ruota le posizioni dei pannelli:

Ctrl-b  {    # Move current pane left/up
Ctrl-b  }    # Move current pane right/down

Come usare la copy mode di tmux per scorrere e cercare

Per impostazione predefinita, non puoi scorrere verso l'alto in un pannello tmux con la rotella del mouse o Page Up. La copy mode ti offre scrollback, ricerca e selezione del testo.

Entra in copy mode:

Ctrl-b  [

Ora sei in copy mode. L'angolo in alto a destra mostra la tua posizione nel buffer di scrollback (es. [0/500]).

tmux usa i tasti stile emacs per impostazione predefinita. Se la variabile d'ambiente EDITOR o VISUAL contiene "vi", usa i tasti stile vi.

Modalita emacs (predefinita):

Azione Tasto
Scorrere su Ctrl-Up o Page Up
Scorrere giu Ctrl-Down o Page Down
Spostare cursore Tasti freccia
Inizio riga Ctrl-a
Fine riga Ctrl-e
Cerca avanti Ctrl-s
Cerca indietro Ctrl-r
Inizia selezione Ctrl-Space
Copia selezione Alt-w
Esci da copy mode q

Modalita vi:

Azione Tasto
Scorrere su Ctrl-u (mezza pagina)
Scorrere giu Ctrl-d (mezza pagina)
Spostare cursore h j k l
Cerca avanti /
Cerca indietro ?
Inizia selezione Space
Copia selezione Enter
Esci da copy mode q

Dopo aver copiato, incolla con:

Ctrl-b  ]

Nota: la copy mode serve anche per cercare nell'output lungo dei comandi. Se una build fallisce e l'errore e uscito dallo schermo, entra in copy mode e cerca all'indietro con Ctrl-r (emacs) o ? (vi).

Come personalizzare tmux con .tmux.conf

tmux legge la configurazione da ~/.tmux.conf all'avvio del server. Da tmux 3.2 in poi, controlla anche ~/.config/tmux/tmux.conf.

Questa configurazione funziona bene per l'amministrazione VPS. Ogni riga e spiegata.

Crea o modifica il file di configurazione:

nano ~/.tmux.conf
# -- General -----------------------------------------------------------------

# Change prefix from Ctrl-b to Ctrl-a (easier to reach)
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# Start window numbering at 1 (0 is far from the prefix key)
set -g base-index 1
setw -g pane-base-index 1

# Renumber windows when one is closed (no gaps)
set -g renumber-windows on

# Increase scrollback buffer (default is 2000 lines)
set -g history-limit 50000

# Reduce escape delay (snappier key response)
set -g escape-time 10

# Enable mouse support (scroll, click panes, resize)
set -g mouse on

# -- Display -----------------------------------------------------------------

# 256-color terminal support
set -g default-terminal "tmux-256color"

# -- Key Bindings ------------------------------------------------------------

# Split panes with | and - (more intuitive than " and %)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# Navigate panes with Alt-arrow (no prefix needed)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Reload config with prefix r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded"

# -- Copy Mode ---------------------------------------------------------------

# Use vi keys in copy mode
setw -g mode-keys vi

# -- Status Bar --------------------------------------------------------------

# Status bar position
set -g status-position bottom

# Update interval (seconds)
set -g status-interval 5

# Clean status bar colors
set -g status-style "bg=colour235,fg=colour136"
set -g status-left "#[fg=colour235,bg=colour136] #S #[fg=colour136,bg=colour235] "
set -g status-right "#[fg=colour136] %H:%M %d-%b-%Y "
set -g status-left-length 20

Salva e esci. Applica la configurazione a una sessione tmux in esecuzione:

tmux source-file ~/.tmux.conf

Verifica premendo Ctrl-a (il nuovo prefix) invece di Ctrl-b. Se funziona, la configurazione e stata caricata correttamente.

Imposta i permessi corretti sul file di configurazione:

chmod 600 ~/.tmux.conf
ls -la ~/.tmux.conf
-rw------- 1 youruser youruser 1234 Mar 19 10:00 /home/youruser/.tmux.conf

Il permesso 600 significa che solo il tuo utente puo leggere e scrivere il file. Questo conta se memorizzi script personalizzati o percorsi sensibili nella configurazione tmux.

Modifiche principali rispetto ai valori predefiniti:

  1. Prefix Ctrl-a posiziona il tasto sotto il mignolo sinistro. Ctrl-b richiede un allungamento. Questo e il rebind piu comune.
  2. base-index 1 fa partire le finestre da 1 invece che da 0. Premere Ctrl-a 1 per la prima finestra e naturale.
  3. history-limit 50000 conserva 50.000 righe di scrollback per pannello. Il valore predefinito di 2.000 e troppo basso per seguire i log.
  4. escape-time 10 riduce il ritardo che tmux attende dopo aver ricevuto il tasto Escape. Il valore predefinito (500ms) rende Vim lento dentro tmux.
  5. -c "#{pane_current_path}" sui binding di split apre i nuovi pannelli nella stessa directory in cui ti trovi, invece della home directory.
  6. mode-keys vi attiva la navigazione stile vi in copy mode. Cambia in emacs se preferisci.

Come installare i plugin tmux con tpm

tmux Plugin Manager (tpm) permette di installare plugin da GitHub. Due plugin che vale la pena conoscere:

  • tmux-resurrect salva e ripristina le sessioni tmux dopo un riavvio del server
  • tmux-continuum salva automaticamente le sessioni a intervalli regolari

Installare tpm

Clona il repository:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Aggiungi queste righe in fondo a ~/.tmux.conf:

# -- Plugins -----------------------------------------------------------------

# Plugin manager
set -g @plugin 'tmux-plugins/tpm'

# Save/restore sessions across reboots
set -g @plugin 'tmux-plugins/tmux-resurrect'

# Auto-save sessions every 15 minutes
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'

# Initialize tpm (keep this line at the very bottom)
run '~/.tmux/plugins/tpm/tpm'

Ricarica la configurazione:

tmux source-file ~/.tmux.conf

Installa i plugin dall'interno di tmux:

Ctrl-a  I

Quella e una I maiuscola. tpm scarica e installa i plugin. Vedrai un messaggio al termine.

Verifica che i plugin siano installati:

ls ~/.tmux/plugins/
tmux-continuum  tmux-resurrect  tpm

Usare tmux-resurrect

Salva il layout della sessione corrente:

Ctrl-a  Ctrl-s

Ripristina dopo un riavvio:

Ctrl-a  Ctrl-r

tmux-resurrect salva il layout delle finestre, le divisioni dei pannelli e la directory corrente di ogni pannello. Con tmux-continuum attivo, questo avviene automaticamente ogni 15 minuti.

Come gestire sessioni tmux annidate via SSH

Quando esegui tmux in locale e ti connetti in SSH a un VPS che ha anch'esso tmux, ti ritrovi con tmux dentro tmux. Entrambe le istanze rispondono allo stesso prefix key. I tuoi tasti vanno al tmux esterno (locale) invece che a quello interno (remoto).

La soluzione: invia il prefix key alla sessione interna premendolo due volte.

Ctrl-a  Ctrl-a  d    # Detach the inner (remote) session

Il primo Ctrl-a viene catturato dal tmux esterno. Il secondo Ctrl-a viene inoltrato al tmux interno come suo prefix. Poi d stacca la sessione interna.

Un approccio piu pulito: usa prefix key diversi. Tieni Ctrl-a in locale e lascia Ctrl-b come predefinito sui server remoti. Cosi non ci sono conflitti.

Se hai gia cambiato il prefix su entrambi i lati, aggiungi un toggle al tuo ~/.tmux.conf locale:

# Toggle prefix passthrough with F12
bind -T root F12 \
  set prefix None \;\
  set key-table off \;\
  set status-style "bg=colour238,fg=colour240" \;\
  display-message "Prefix OFF (sending to inner)"

bind -T off F12 \
  set -u prefix \;\
  set -u key-table \;\
  set -u status-style \;\
  display-message "Prefix ON (local)"

Premi F12 per disattivare il prefix locale e passare tutti i tasti al tmux remoto. Premi di nuovo F12 per riattivarlo. La barra di stato oscurata ti da un indicatore visivo della modalita attiva.

Come creare layout tmux scriptati per l'amministrazione server

Invece di dividere i pannelli manualmente ogni volta che ti connetti in SSH, scrivi uno script per il layout. Questo crea uno spazio di lavoro ripetibile con un singolo comando.

Crea uno script:

nano ~/tmux-admin.sh
#!/usr/bin/env bash
# tmux-admin.sh: three-pane admin layout

SESSION="admin"

# Kill old session if it exists
tmux kill-session -t "$SESSION" 2>/dev/null

# Create session with first window named "monitor"
tmux new-session -d -s "$SESSION" -n "monitor"

# Top pane: system monitoring
tmux send-keys -t "$SESSION:monitor" "htop" C-m

# Split horizontally: bottom pane for logs
tmux split-window -v -t "$SESSION:monitor"
tmux send-keys -t "$SESSION:monitor.1" "journalctl -f" C-m

# Split bottom pane vertically: right pane for shell
tmux split-window -h -t "$SESSION:monitor.1"

# Create second window for a working shell
tmux new-window -t "$SESSION" -n "work"

# Select the first window
tmux select-window -t "$SESSION:monitor"

# Select the bottom-right pane (the empty shell)
tmux select-pane -t "$SESSION:monitor.2"

# Attach to the session
tmux attach -t "$SESSION"

Rendilo eseguibile e lancialo:

chmod 700 ~/tmux-admin.sh
~/tmux-admin.sh

Ottieni un layout a tre pannelli: htop in alto, journalctl -f in basso a sinistra e una shell vuota in basso a destra. Una seconda finestra chiamata "work" e disponibile per comandi ad hoc.

Nota: il C-m alla fine di send-keys e un ritorno a capo. Preme Invio per eseguire il comando.

Avvio automatico di tmux al boot con systemd

Per sessioni di amministrazione persistenti, crea un servizio systemd:

sudo nano /etc/systemd/system/tmux-admin@.service
[Unit]
Description=tmux admin session for %i
After=network.target

[Service]
Type=forking
User=%i
ExecStart=/usr/bin/tmux new-session -d -s admin
ExecStop=/usr/bin/tmux kill-session -t admin

[Install]
WantedBy=multi-user.target

Abilita e avvia il servizio per il tuo utente:

sudo systemctl enable --now tmux-admin@youruser.service

Verifica che sia in esecuzione:

sudo systemctl status tmux-admin@youruser.service
● tmux-admin@youruser.service - tmux admin session for youruser
     Loaded: loaded (/etc/systemd/system/tmux-admin@.service; enabled)
     Active: active (running)

Ora una sessione tmux chiamata "admin" si avvia automaticamente al boot. Collegati dopo l'SSH:

tmux attach -t admin

Sicurezza: permessi del socket tmux

tmux crea un file socket per la comunicazione tra i suoi processi server e client. Per impostazione predefinita, questo socket si trova in una directory sotto /tmp (es. /tmp/tmux-1000/).

Controlla la directory del socket:

ls -la /tmp/tmux-$(id -u)/
srwxrwx--- 1 youruser youruser 0 Mar 19 10:00 default

La directory del socket appartiene al tuo utente con permessi che impediscono l'accesso ad altri utenti. Questo significa che altri utenti sullo stesso server non possono collegarsi alle tue sessioni tmux.

Tuttavia, se esegui tmux come root, qualsiasi processo in esecuzione come root puo collegarsi. Evita di eseguire tmux come root per il lavoro quotidiano. Connettiti in SSH con il tuo utente normale e usa sudo per i singoli comandi che lo richiedono.

Se devi condividere una sessione tmux (per pair programming o mentoring), usa un socket condiviso esplicitamente:

tmux -S /tmp/shared-session new-session -s pair
chmod 770 /tmp/shared-session

L'altro utente si collega con:

tmux -S /tmp/shared-session attach -t pair

Revoca l'accesso quando hai finito:

chmod 700 /tmp/shared-session

Qualcosa non funziona?

tmux: command not found Il pacchetto non e stato installato. Esegui sudo apt install -y tmux e controlla eventuali errori.

"no server running on /tmp/tmux-1000/default" Non esiste nessuna sessione tmux. Avviane una con tmux new-session -s main.

I tasti non rispondono / prefix sbagliato Controlla quale prefix e attivo: tmux show-options -g prefix. Se hai cambiato il prefix in .tmux.conf, ricarica con tmux source-file ~/.tmux.conf.

Lo scroll con il mouse non funziona Aggiungi set -g mouse on a ~/.tmux.conf e ricarica. Sulle versioni di tmux precedenti alla 2.1, l'opzione era set -g mode-mouse on (sintassi diversa).

I colori sono sbagliati dentro tmux Imposta set -g default-terminal "tmux-256color" in ~/.tmux.conf. Se il tuo emulatore di terminale supporta i colori true color (24-bit), aggiungi:

set -as terminal-overrides ",*-256color:Tc"

Sessione persa dopo il riavvio Le sessioni tmux non sopravvivono ai riavvii per impostazione predefinita. Usa tmux-resurrect e tmux-continuum (descritti sopra), oppure crea un servizio systemd per avviare automaticamente una sessione.

Vim e lento a uscire dalla modalita inserimento Il valore predefinito di escape-time (500ms) causa questo problema. Imposta set -g escape-time 10 in ~/.tmux.conf.

Controlla i log di tmux per problemi piu profondi:

tmux start-server \; show-messages

Oppure guarda i log di sistema:

journalctl -u tmux-admin@youruser.service -f

Riferimento rapido keybinding tmux

Questa tabella usa il prefix predefinito Ctrl-b. Se hai rimappato il prefix a Ctrl-a (come nella configurazione sopra), usa quello.

Sessioni

Azione Keybinding Comando
Nuova sessione con nome tmux new-session -s name
Stacca Ctrl-b d tmux detach
Lista sessioni Ctrl-b s tmux list-sessions
Collegati tmux attach -t name
Rinomina sessione Ctrl-b $ tmux rename-session
Termina sessione tmux kill-session -t name

Finestre

Azione Keybinding Comando
Nuova finestra Ctrl-b c
Finestra successiva Ctrl-b n
Finestra precedente Ctrl-b p
Finestra per numero Ctrl-b 0-9
Rinomina finestra Ctrl-b ,
Chiudi finestra Ctrl-b &
Lista finestre Ctrl-b w

Pannelli

Azione Keybinding Comando
Divisione orizzontale Ctrl-b "
Divisione verticale Ctrl-b %
Naviga Ctrl-b Arrow
Ridimensiona Ctrl-b Ctrl-Arrow
Toggle zoom Ctrl-b z
Chiudi pannello Ctrl-b x
Scambia pannello Ctrl-b { / Ctrl-b }

Copy Mode

Azione Keybinding
Entra in copy mode Ctrl-b [
Incolla buffer Ctrl-b ]
Cerca (emacs) Ctrl-r (indietro) / Ctrl-s (avanti)
Cerca (vi) ? (indietro) / / (avanti)
Esci q

Altro

Azione Keybinding
Prompt comandi Ctrl-b :
Lista tutti i keybinding Ctrl-b ?
Modalita orologio Ctrl-b t

Copyright 2026 Virtua.Cloud. Tutti i diritti riservati. Questo contenuto e un'opera originale del team Virtua.Cloud. La riproduzione, ripubblicazione o redistribuzione senza autorizzazione scritta e vietata.

Pronto a provare?

Distribuisci il tuo server in pochi secondi. Linux, Windows o FreeBSD.

Vedi piani VPS