La terminal de unix lleva décadas ofreciendo utilidades no solamente a desarrolladores y administradores de sistemas a nivel de servidor, sino también a entusiastas en entornos de escritorio.
El uso de herramientas como git, o nodejs, ha traído un uso mayor de la consola a los entornos locales, y también la necesidad, a veces, de estar conectados a terminales remotos vía SSH.
El problema de una conexión por SSH es que si tenemos un fallo de red o suspendemos nuestro ordenador, nuestra conexión se puede ver afectada, lo que causará que nuestra sesión termine, y con ella los comandos que estemos ejecutando.
Existen utilidades que no solamente nos permiten prevenir esta circunstancia sino que nos permiten tener una configuración en nuestra terminal remota que haga más sencilla la conexión. En el artículo de hoy hablaremos de tmux
, una solución que nos permite controlar múltiples ventanas y mantener la configuración de las mismas.
Instalando tmux
La fuerza de tmux radica cuando lo instalamos de manera remota en un servidor al que accedamos con frecuencia. En mi caso particular, me suelo conectar vía SSH a hosts que emplean Amazon Linux en la nube de AWS y usamos yum como gestor de paquetes, con lo cual el comando es:
yum install tmux
Podemos también instalar tmux en local y tener una configuración de consolas personalizada. En el caso de Mac podemos instalar tmux vía homebrew:
brew install tmux
Si tenemos Windows y WSL tendremos acceso a una shell de bash, en la que podemos instalar tmux utilizando:
apt-get install tmux
Utilizando tmux
La manera más sencilla de utilizar tmux es como una capa por encima de la terminal.
tmux
Este comando inicia una sesión de tmux que permanecerá activa incluso si nuestra conexión se cierra o en el caso de que estemos ejecutando de manera local, si cerramos la ventana. Este comportamiento se mantiene tanto en local (Mac) como en una sesión SSH, no sé que pasaría en Windows
Si cerramos la ventana nuestra sesión de tmux seguirá funcionando, así que para salir de la misma podemos utilizar o bien Ctrl + d
o bien escribir logout
o exit
en la consola de comandos.
Por defecto. las sesiones en tmux están numeradas, para volver a una sesión solamente necesitamos escribir tmux ls
y a continuación tmux attach -t N
donde N es el número de sesión. Por otra parte podemos darle nombre a nuestras sesiones, lo que hará que volver a ellas sea mucho más sencillo.
- Creamos nuestra sesión con
tmux new -s desarrollo
- Volvemos a la misma con
tmux attach -t desarrollo
Múltiples pestañas, pantalla dividida y más
Una vez tengamos nuestra sesión abierta, podemos personalizarlo utilizando Ctrl + b
que es el prefijo por defecto en tmux, una vez pulsado, los siguientes comandos nos pueden ayudar:
“
Dividir el panel de manera horizontal%
Dividir el panel de manera verticalderecha/izquierda/arriba/abajo
Desplazarse por los panelesc
Crear una nueva ventanan
Cambiar a la ventana siguientep
Cambiar a la ventana anterior
En el siguiente ejemplo (ejecutado de manera local) se puede ver una sesión con dos ventanas y tres paneles.

Si cerramos la ventana y volvemos a la sesión se mantendrá abierta.
Tmux con iTerm (Mac)
Si utilizamos Mac con iTerm, este último tiene integración con Tmux, con lo cual podemos crear los paneles utilizando la manera nativa que estamos acostumbrados en iTerm, y podremos intercambiarlos con los controles nativos.

Para ello abriremos nuestra sesión con tmux -CC new
o tmux -CC attach
Iterm, por defecto, abre nuevas pestañas de Tmux en ventanas, con lo cual para cambiar esa configuración podemos ir a Preferences > general > tmux > Open tmux windows as “Tabs in attaching window”
como se ve en la imagen

Personalizando nuestra configuración
El último paso es tener nuestra configuración guardada de manera persistente de tal manera que “sobreviva” un reinicio del sistema o si queremos simplemente poder volver a una configuración estable.
Para ello, usemos el ejemplo que he descrito anteriormente en un script de bash:
#!/bin/sh
tmux new-session -d 'ping www.google.com'
tmux split-window -h 'top'
tmux select-pane -t 0
tmux split-window -v 'vim'
tmux new-window 'tail -f /var/log/system.log'
tmux -CC -2 attach-session -d
Este script lo podemos guardar como reset-session.sh y podemos llamarlo siempre que queramos restaurar la configuración de la sesión que teníamos anteriormente.
En resumen
Tmux es una herramienta muy poderosa que nos permite personalizar la configuración de nuestras ventanas, mantener procesos en ejecución dentro de una consola remota y guardar esta personalización para poder restaurar un espacio de trabajo a nuestro gusto.
Bibliografía
- Tmux support arrives for Bash on Ubuntu on Windows | Windows Command Line
- fastai_deeplearn_part1/tmux.md at master · reshamas/fastai_deeplearn_part1 · GitHub
- 16.04 – How do I access tmux session after I leave it? – Ask Ubuntu
- tmux cheatsheet · GitHub
- tmux Tutorial — Split Terminal Windows Easily – Lukasz Wrobel
- tmux shortcuts & cheatsheet · GitHub
- GitHub – tmuxinator/tmuxinator: Manage complex tmux sessions easily
- shell – How to set up tmux so that it starts up with specified windows opened? – Stack Overflow