tmux de principio a fin: sesiones persistentes, layouts y automatización

·12 min de lectura·

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-server cierra 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]:

EscenarioQué resuelve
Trabajo remoto por SSHUn corte de conexión no interrumpe el proceso que se está ejecutando
Acceso multipuestoLa misma sesión se puede enganchar desde equipos distintos
Terminal únicaVarios 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

SistemaComando
macOS (Homebrew)brew install tmux
Debian / Ubuntusudo apt install tmux
Fedora / RHELsudo dnf install tmux
Arch Linuxsudo 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érminoDescripción
ServidorProceso en segundo plano que mantiene todo el estado y los programas en ejecución
ClienteProceso que engancha una sesión a un terminal externo; se comunican por un socket en /tmp
SesiónAgrupa una o más ventanas. Tiene nombre único y es lo que sobrevive al detach
VentanaAgrupa uno o varios paneles y ocupa la pantalla completa. Numerada por índice
PanelContiene un terminal y el programa que corre en él. La distribución de paneles de una ventana es su layout
Panel activoEl 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ónEfecto
Ctrl+B dDetach: te desenganchas y la sesión sigue viva por detrás
exit o Ctrl+DCierra el panel o el shell; si era el último, la sesión termina
tmux attachVuelve a la última sesión usada
tmux attach -t devVuelve 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:

FlagSignificado
new-session -dCrea la sesión sin engancharla (queda en segundo plano)
-s devNombre de la sesión
split-window -hDivide 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 -vDivide en dos paneles apilados; el nuevo queda debajo
-p 33Atajo equivalente a -l 33%: el panel nuevo toma ese porcentaje
-t 1Panel objetivo sobre el que actuar (índice 1, el de la derecha)
select-pane -t 0Deja 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:

  • -h y -v se refieren al eje de la división, no a la orientación visual. -h produce paneles lado a lado; -v produce paneles apilados [1].
  • -l y -p aplican 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
ComandoCuándo usarlo
tmux lsSaber qué tienes abierto tras reconectarte por SSH
tmux kill-session -t devLiberar una sesión que ya no necesitas sin tocar las demás
tmux kill-serverReinicio 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].

AtajoAcción
Ctrl+B ?Lista todos los atajos disponibles
Ctrl+B :Abre el prompt de comandos de tmux
Ctrl+B sSelector de sesiones
Ctrl+B dDetach
Ctrl+B $Renombrar la sesión actual
Ctrl+B wÁrbol de ventanas y paneles
Ctrl+B cNueva ventana
Ctrl+B ,Renombrar la ventana actual
Ctrl+B &Cerrar la ventana actual
Ctrl+B 0..9Ir a la ventana con ese índice
Ctrl+B n / pVentana siguiente / anterior
Ctrl+B %Dividir en dos paneles lado a lado
Ctrl+B "Dividir en dos paneles apilados
Ctrl+B o / flechasMoverse entre paneles
Ctrl+B xCerrar el panel actual
Ctrl+B zZoom 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 EspacioRotar entre los layouts predefinidos
Ctrl+B [ / ]Modo copia (scroll) / pegar el búfer
Ctrl+B tReloj a pantalla completa

Nota: Ctrl+B z (zoom) y Ctrl+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+A es una decisión personal, no una mejora objetiva. Ctrl+A es el prefijo histórico de GNU Screen, así que si vienes de ahí te resultará familiar; a cambio, choca con el Ctrl+A de «inicio de línea» de los shells en modo emacs. Prueba ambas antes de dejarlo fijo.


Conclusiones / En resumen

  1. La jerarquía es servidor → sesión → ventana → panel, y lo persistente es la sesión. Interiorizarla resuelve la mayoría de confusiones iniciales.
  2. El detach (Ctrl+B d) es la función central de tmux: permite sobrevivir a cortes de SSH, cierres de terminal y desconexiones inesperadas.
  3. Los layouts se pueden montar desde línea de comandos con split-window, -l/-p y select-pane, lo que hace reproducible cualquier distribución de paneles.
  4. -h/-v describen el eje de división, no la orientación visual, y -l/-p dimensionan el panel nuevo. Son las dos trampas clásicas.
  5. Un alias con has-session ... && attach || new-session ... convierte el arranque del entorno de trabajo en un solo comando.
  6. send-keys y capture-pane abren la puerta a la automatización: tmux deja de ser una comodidad interactiva y pasa a ser una herramienta de orquestación.

📚 Fuentes consultadas

  1. tmux(1) — Terminal multiplexer, manual page — OpenBSD
  2. Getting Started — tmux Wiki
  3. Installing tmux — tmux Wiki
  4. tmux — Homebrew Formulae
  5. Package: tmux — Debian Packages

tmux de principio a fin: sesiones persistentes, layouts y automatización

¿Te ha resultado útil?

Compártelo con tu red de contactos profesionales.

Comentarios (0)

Sé el primero en comentar.