Tmux: controla varios terminales desde una sola pantalla

La estrella de la entrada de hoy se llama tmux. Es un multiplexor de terminales, esto es, permite crear, acceder y controlar varios terminales desde una sola pantalla. Es una herramienta similar a GNU Screen, de la que ya hablamos. Permite desconectarse de una pantalla y continuar ejecutándose en segundo plano, para luego volver a adjuntarse.

Logo de tmux

¿Cómo funciona tmux?

Cuando se inicia tmux, crea una nueva sesión con una sola ventana y la muestra en pantalla. Con una línea de estado en la parte inferior sobre la sesión actual y así poder ingresar comandos de forma interactiva.

Podemos decir que en tmux una sesión es una colección única de pseudo terminales. Cada sesión tiene una o más ventanas vinculadas a ella. Una ventana ocupa toda la pantalla y puede dividirse en paneles rectangulares, cada uno de los cuales es un pseudo terminal independiente.

Cualquier número de instancias de tmux puede conectarse a la misma sesión y cualquier número de ventanas puede estar presenta en la misma sesión. Una vez que se hayan eliminado todas las sesiones, tmux sale.

Una de las ventajas de esta herramienta, al igual que lo es screen, que cada sesión es persistente y sobrevivirá a la desconexión accidental, causada, por ejemplo, a que el tiempo de espera de la conexión SSH termine o la desconexión intencional.

También es genial para poder usar nuestro editor favorito, por ejemplo, vi o vim, para obtener acceso a su shell, en la misma ventana de terminal para una experiencia similar a un IDE.

Instalación de tmux en Linux

Su instalación es bien sencilla, ya que se encuentra en la mayoría de los repositorios, por lo que en el caso de sistemas con paquetería DEB, como Debian, Ubuntu o Linux Mint, simplemente tenemos que escribir:

sudo apt-get install tmux

En paquetería RPM, para sistemas como RHEL, Oracle Linux, Rocky Linux, Centos o Fedora:

sudo yum install tmux

En todos los casos, para comprobar que se ha instalado y ver su versión:

tmux -V

Trabajando con tmux

Llegar y marcharse

Tmux se base en sesiones. Para iniciar una nueva sesión, debemos escribir tmux en la terminal. Una vez que ya nos encontramos en ella, como hemos indicado unos párrafos más arriba, lo único que veremos diferente es la verde en la parte inferior. Aunque ya os digo que esto se puede personalizar.

Para salir, solo hemos de escribir «exit«, si estamos en un solo panel y volveremos por donde venimos. Aunque, existen otras formas de salir más elegantes, que veremos más adelante.

Aspecto de tmux

Atajos de teclado

Al igual que en el comando screen, encontramos una larga lista de atajos de teclados o prefijos, con tmux nos encontramos con una situación similar. El más usado es «ctrl+b«, a continuación añadiremos el comando tmux, por ejemplo, «ctr+b :«, de esta manera podemos añadir el comando que queramos.

Aquí observamos la barra de comandos

Algunos ejemplos serían:

  • Ctrl+b +c, para crear una nueva ventana.
  • Ctrl+b &, para eliminar una ventana.
  • Ctrl+b n, pasamos a la siguiente ventana.
  • Ctrl+b p, volvemos a la ventana anterior.
  • Ctrl+b ,  ,usando la coma podemos cambiar el nombre de una ventana.
  • Ctrl+b f, busca palabras clave en varias ventanas.
  • Ctrl+b l, cambia entre ventanas adyacentes.
Adjuntar, separar y matar

Tal y como he indicado antes, una buena manera de salir de una sesión sin el comando exit, es desconectarse de la sesión. Para hacer esto, primero escribimos el atajo «Ctrl+b» y añadimos una «d«, quedando así: «Ctrl+b d

Esto separará la sesión actual y nos devolverá a la línea de comando normal. Esto es similar al atajo de teclado en screen, que es «Ctrl+a d

Si lo hacemos de esta manera, la sesión quedará en un segundo plano, abierta. Por lo que esta sesión seguirá estando disponible, lo que nos permite volver a ella cuando queramos. Para ver que sesiones están activas escribimos:

tmux ls

Aquí un ejemplo:

Listamos las sesiones

Cada una de las sesiones de tmux tendrá un número asociado con ellas en el lado izquierdo. Este número se puede utilizar para volver a la sesión en cuestión. Si queremos volver a la sesión 4, escribimos:

tmux attach-session -t 4

En vez de utilizar el parámetro «attach-session«, podemos utilizar simplemente «

Para volver a la última sesión creada:

tmux a #
Nombrando sesiones

Lo del número de sesión está bien, pero no es lo ideal, es mucho mejor nombrar las sesiones, por ejemplo, en función de uso.

Para iniciar una nueva sesión con un nombre específico, debemos hacer lo siguiente:

tmux new -s nombre-de-la-sesión

De esta manera ya veremos los nombres de la sesión cuando las listemos. Además, cuando vamos a volver a una en concreto, podemos utilizar su nombre:

tmux a -t nombre-de-la-sesión

Al salir y entrar de la nueva sesión vemos el resultado:

En el listado vemos el nombre de la sesión que hemos creado

Gestión de paneles

Al igual que en un escritorio clásico de computadora, tenemos ventanas, en tmux, tenemos panales. Estos paneles, al igual que hacen las ventanas, permiten interactuar con múltiples aplicaciones, y de manera similar, se pueden abrir, cerrar, mover o cambiar de tamaño.

Estos paneles los encontramos en mosaico y se administran principalmente mediante accesos directos de teclado. Para crear un nuevo panel, simplemente divide la pantalla de forma horizontal o vertical.

Para dividir un panel de forma horizontal:

ctrl+b "

Y lo mismo, pero de forma vertical:

ctrl+b %

Podemos dividir más los paneles utilizando el mismo método. Esto según la necesidad y el gusto de cada uno.

Podemos movernos entre los paneles, simplemente utilizando el teclado de dirección:

ctrl+b tecla-de-dirección

Veamos un ejemplo, en mi caso:

Hemos habilitado diferentes paneles

Cambiar el tamaño de los paneles

Si queremos cambiar el tamaño de un panel, porque queremos que sea más grande, utilizaremos la barra de comandos de tmux, como hemos dico antes:

ctrl+b :

Desde allí, podemos escribir «resize-pane» seguido de un indicador de dirección: -U para arriba, -D para abajo, -L para la izquierda y -R para la derecha. A continuación, se añade el número de líneas que deseamos aumentar.

Por ejemplo, si estamos en el panel superior y queremos expandirlo 5 líneas hacia abajo, haríamos lo siguiente:

ctrl+b :
resize-pane -D 5

Para muestra un botón:

Cambiamos el tamaño del panel superior

Temas personalizados

La personalización de tmux se realiza principalmente a través del archivo .tmux.conf

Crear un tema personalizado desde cero requiere invertir tiempo. Lo habitual es utilizar un tema ya hecho por un tercero, por lo menos como punto de partida. Se puede encontrar una colección bastante buena en el repositorio tmux-themepack de Jim Myhrberg.

Simplemente escogemos el que queremos y copiamos su configuración en ~/.tmux.conf, a continuación quedaría buscarlo con «tmux source-file ~/.tmux.conf«.

Conclusiones

Aunque tengo que admitir que yo suelo utilizar screen, tmux tiene mucho potencial y me consta que mucha gente lo usa. De hecho, os recomiendo todas las entradas que el compañero Victorhck tiene en su blog sobre tmux. Además, tengo que agradecer a mi compa Alberto, que me ha recordado esta herramienta.

Fuentes consultadas

No soy para nada un experto en tmux, por lo que me he servido de muchas fuentes:

Página de man de tmux

Medium.com – A Gentle Introduction to tmux

Programador clic – Comandos tmux comúnmente utilizados y teclas de acceso directo