tmux es un multiplexor de terminales: permite crear, acceder y controlar varios terminales desde una sola pantalla, y —esto es lo importante— desacoplarse de ella y volver a engancharse más tarde. El servidor sigue ejecutando los programas aunque cierres la ventana, se caiga el SSH o apagues el portátil [1][2].
Esta guía va de menos a más: primero los conceptos que hay que tener claros para no perderse, después el uso interactivo, y al final layouts programáticos, alias y configuración persistente. Funciona igual en Linux y en macOS.
Advertencia:
tmux kill-servercierra todas las sesiones y mata los procesos que contienen. Guarda tu trabajo antes de usarlo.
1. Para qué sirve tmux
Los tres escenarios donde tmux aporta valor real [2]:
| Escenario | Qué resuelve |
|---|---|
| Trabajo remoto por SSH | Un corte de conexión no interrumpe el proceso que se está ejecutando |
| Acceso multipuesto | La misma sesión se puede enganchar desde equipos distintos |
| Terminal única | Varios programas y shells conviven organizados en una sola ventana |
El caso típico: te conectas por SSH, lanzas una compilación o una migración larga, cierras el portátil y te vas. Al día siguiente te reconectas y continúas exactamente donde lo dejaste.
2. Instalación
| Sistema | Comando |
|---|---|
| macOS (Homebrew) | brew install tmux |
| Debian / Ubuntu | sudo apt install tmux |
| Fedora / RHEL | sudo dnf install tmux |
| Arch Linux | sudo pacman -S tmux |
Comprueba la versión instalada:
tmux -V
Conviene trabajar con una versión reciente: algunas opciones de configuración y los floating panes solo existen en versiones modernas [2].
3. La jerarquía: servidor, sesión, ventana y panel
Entender esta jerarquía es el 80 % del aprendizaje:
servidor tmux
└── sesión (persistente, con nombre)
└── ventana (ocupa toda la pantalla, indexada)
└── panel (pty independiente, área rectangular)
| Término | Descripción |
|---|---|
| Servidor | Proceso en segundo plano que mantiene todo el estado y los programas en ejecución |
| Cliente | Proceso que engancha una sesión a un terminal externo; se comunican por un socket en /tmp |
| Sesión | Agrupa una o más ventanas. Tiene nombre único y es lo que sobrevive al detach |
| Ventana | Agrupa uno o varios paneles y ocupa la pantalla completa. Numerada por índice |
| Panel | Contiene un terminal y el programa que corre en él. La distribución de paneles de una ventana es su layout |
| Panel activo | El panel que recibe lo que tecleas. Hay uno por ventana |
Una sesión puede estar enganchada a varios clientes a la vez, y un cliente siempre está enganchado a una única sesión [2].
4. Crear sesiones
Sin argumentos, new-session crea la sesión y se engancha a ella:
tmux new
Con nombre (recomendado, evita depender de los índices numéricos):
tmux new -s dev
En segundo plano, sin engancharse, para automatizar desde un script:
tmux new-session -d -s dev
Con un comando concreto en lugar del shell, y dándole nombre a la ventana:
tmux new -s dev -n despliegue 'top'
5. Entrar y salir: la diferencia entre detach y cerrar
| Acción | Efecto |
|---|---|
Ctrl+B d | Detach: te desenganchas y la sesión sigue viva por detrás |
exit o Ctrl+D | Cierra el panel o el shell; si era el último, la sesión termina |
tmux attach | Vuelve a la última sesión usada |
tmux attach -t dev | Vuelve a una sesión concreta |
tmux attach -t dev # entrar a la sesión 'dev'
tmux attach # entrar a la última sesión
tmux attach -d -t dev # entrar y echar a los demás clientes conectados
Nota: el detach es justo lo que buscas cuando trabajas por SSH y quieres que el proceso siga vivo. Si sales con
exit, cierras la sesión y con ella el proceso.
6. Un layout completo desde línea de comandos
Con un solo comando se puede montar una sesión con la distribución exacta de paneles que necesitas. Este ejemplo crea una columna izquierda a pantalla completa y tres paneles apilados a la derecha:
tmux new-session -d -s dev \; \
split-window -h -l 40% \; \
split-window -v -p 33 -t 1 \; \
split-window -v -p 50 -t 1 \; \
select-pane -t 0
Desglose de cada flag:
| Flag | Significado |
|---|---|
new-session -d | Crea la sesión sin engancharla (queda en segundo plano) |
-s dev | Nombre de la sesión |
split-window -h | Divide el panel objetivo en dos lado a lado; el nuevo queda a la derecha |
-l 40% | El panel nuevo ocupa el 40 % del espacio disponible |
split-window -v | Divide en dos paneles apilados; el nuevo queda debajo |
-p 33 | Atajo equivalente a -l 33%: el panel nuevo toma ese porcentaje |
-t 1 | Panel objetivo sobre el que actuar (índice 1, el de la derecha) |
select-pane -t 0 | Deja el foco en el panel 0 |
\; | Separador de comandos para tmux cuando se invoca desde el shell |
Dos aclaraciones que evitan la confusión más habitual:
-hy-vse refieren al eje de la división, no a la orientación visual.-hproduce paneles lado a lado;-vproduce paneles apilados [1].-ly-paplican al panel nuevo, no al existente. Es la causa de que los layouts no salgan a la primera [1].
Cuando no indicas destino, el comando actúa sobre el panel activo. Si indicas -t, actúa sobre el panel que especifiques.
6.1 Inspeccionar el resultado
Para ver cómo han quedado realmente los paneles, con su tamaño y posición:
tmux list-panes -t dev -F '#{pane_index}: #{pane_width}x#{pane_height} at #{pane_left},#{pane_top}'
Ejemplo de salida:
0: 47x24 at 0,0
1: 32x7 at 48,0
2: 32x8 at 48,8
3: 32x7 at 48,17
El formato se construye con variables de tmux (#{pane_width}, #{pane_left}…), así que puedes añadir la que necesites para tus propios scripts.
7. Gestión de sesiones
tmux ls # listar sesiones
tmux list-sessions # equivalente explícito
tmux rename-session -t viejo nuevo # renombrar una sesión
tmux switch-client -t dev # cambiar de sesión sin desengancharse
tmux list-clients # clientes conectados al servidor
tmux kill-session -t dev # cerrar una sesión concreta
tmux kill-server # cerrar todas las sesiones y el servidor
| Comando | Cuándo usarlo |
|---|---|
tmux ls | Saber qué tienes abierto tras reconectarte por SSH |
tmux kill-session -t dev | Liberar una sesión que ya no necesitas sin tocar las demás |
tmux kill-server | Reinicio limpio cuando algo se ha quedado colgado |
8. Alias: crear la sesión o entrar si ya existe
Escribir el comando completo cada vez es incómodo. Estas dos variantes van en ~/.zshrc (o ~/.bashrc).
Variante A — solo crear, sin entrar:
alias dev='tmux new-session -d -s dev \; split-window -h -l 40% \; split-window -v -p 33 -t 1 \; split-window -v -p 50 -t 1 \; select-pane -t 0'
Variante B — crear con layout si no existe, o entrar si ya existe:
alias dev='tmux has-session -t dev 2>/dev/null && tmux attach -t dev || tmux new-session -d -s dev \; split-window -h -l 40% \; split-window -v -p 33 -t 1 \; split-window -v -p 50 -t 1 \; select-pane -t 0 \; attach-session -t dev'
Aplicar los cambios en la sesión actual:
source ~/.zshrc
Nota: define el alias con comillas simples. Así el
\;llega literal a tmux en el momento de ejecutar el alias, que es lo que separa unos comandos de otros [1].
8.1 Alternativa sin alias
Existe una forma más corta de conseguir el comportamiento de la variante B, usando el flag -A de new-session, que hace que se comporte como attach-session si el nombre ya existe [1]:
tmux new -A -s dev
Es más legible, aunque con -A no puedes reconstruir el layout. Si la sesión ya existe con otra distribución de paneles, se limita a engancharse.
9. Atajos de teclado
Los atajos funcionan con un prefijo, Ctrl+B por defecto: se pulsa, se suelta y después la tecla de la acción [2].
| Atajo | Acción |
|---|---|
Ctrl+B ? | Lista todos los atajos disponibles |
Ctrl+B : | Abre el prompt de comandos de tmux |
Ctrl+B s | Selector de sesiones |
Ctrl+B d | Detach |
Ctrl+B $ | Renombrar la sesión actual |
Ctrl+B w | Árbol de ventanas y paneles |
Ctrl+B c | Nueva ventana |
Ctrl+B , | Renombrar la ventana actual |
Ctrl+B & | Cerrar la ventana actual |
Ctrl+B 0..9 | Ir a la ventana con ese índice |
Ctrl+B n / p | Ventana siguiente / anterior |
Ctrl+B % | Dividir en dos paneles lado a lado |
Ctrl+B " | Dividir en dos paneles apilados |
Ctrl+B o / flechas | Moverse entre paneles |
Ctrl+B x | Cerrar el panel actual |
Ctrl+B z | Zoom del panel (pantalla completa, reversible) |
Ctrl+B ! | Sacar el panel a una ventana nueva |
Ctrl+B { / } | Intercambiar el panel con el anterior / siguiente |
Ctrl+B Espacio | Rotar entre los layouts predefinidos |
Ctrl+B [ / ] | Modo copia (scroll) / pegar el búfer |
Ctrl+B t | Reloj a pantalla completa |
Nota:
Ctrl+Bz(zoom) yCtrl+B[(modo copia) son los dos atajos que más rendimiento dan y los que más se tardan en descubrir. El zoom te permite trabajar a pantalla completa en un panel sin deshacer el layout.
Los atajos pueden cambiar entre versiones. La lista autoritativa es siempre Ctrl+B ? o la página de manual [1].
Mover un panel a otra ventana no tiene atajo por defecto; se hace desde el prompt de comandos con join-pane y break-pane:
Ctrl+B : join-pane -t :1
10. Comandos útiles adicionales
tmux rename-window -t 0 "despliegue" # renombrar la ventana 0
tmux new -s trabajo # crear sesión con nombre
tmux attach -d -t dev # entrar echando a los demás clientes
tmux send-keys -t dev:0.0 'ls -la' C-m # enviar teclas a un panel remoto
tmux capture-pane -t dev:0.0 -p # volcar el contenido de un panel
tmux source-file ~/.tmux.conf # recargar la configuración sin reiniciar
Los dos últimos son la puerta a la automatización: send-keys inyecta comandos en un panel y capture-pane extrae su salida por stdout, lo que permite encadenar paneles en scripts.
11. Configuración persistente: ~/.tmux.conf
tmux lee /etc/tmux.conf y después ~/.tmux.conf cuando arranca el servidor [1]. Un punto de partida razonable:
# ~/.tmux.conf
# Prefijo más cómodo: Ctrl+A en lugar de Ctrl+B
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# Índices desde 1 en ventanas y paneles (más intuitivo en el teclado)
set -g base-index 1
setw -g pane-base-index 1
# Ratón: selección de paneles, redimensionado y scroll
set -g mouse on
# Modo copia con teclas de vi
set -g mode-keys vi
# Historial de scroll más amplio
set -g history-limit 10000
# Barra de estado arriba
set -g status-position top
Recarga sin reiniciar el servidor ni perder las sesiones:
tmux source-file ~/.tmux.conf
O desde dentro, con Ctrl+B : y escribiendo source-file ~/.tmux.conf.
Nota: cambiar el prefijo a
Ctrl+Aes una decisión personal, no una mejora objetiva.Ctrl+Aes el prefijo histórico de GNU Screen, así que si vienes de ahí te resultará familiar; a cambio, choca con elCtrl+Ade «inicio de línea» de los shells en modo emacs. Prueba ambas antes de dejarlo fijo.
Conclusiones / En resumen
- La jerarquía es servidor → sesión → ventana → panel, y lo persistente es la sesión. Interiorizarla resuelve la mayoría de confusiones iniciales.
- El detach (
Ctrl+Bd) es la función central de tmux: permite sobrevivir a cortes de SSH, cierres de terminal y desconexiones inesperadas. - Los layouts se pueden montar desde línea de comandos con
split-window,-l/-pyselect-pane, lo que hace reproducible cualquier distribución de paneles. -h/-vdescriben el eje de división, no la orientación visual, y-l/-pdimensionan el panel nuevo. Son las dos trampas clásicas.- Un alias con
has-session ... && attach || new-session ...convierte el arranque del entorno de trabajo en un solo comando. send-keysycapture-paneabren la puerta a la automatización: tmux deja de ser una comodidad interactiva y pasa a ser una herramienta de orquestación.
📚 Fuentes consultadas
- tmux(1) — Terminal multiplexer, manual page — OpenBSD
- Getting Started — tmux Wiki
- Installing tmux — tmux Wiki
- tmux — Homebrew Formulae
- Package: tmux — Debian Packages