Introducción a tmux, un multiplexor de terminales.

https://raw.githubusercontent.com/tmux/tmux/master/logo/tmux-logo-medium.png

tmux es un multiplexor de terminales que nos permite muchas funciones interesantes entre las que se encuentran:

  • Dividir un terminal en varios paneles en los que se pueden ejecutar diferentes shells o comandos.
  • Desvincular una conexión ssh del terminal. De manera que se podrá cerrar la conexión ssh, establecer una nueva conexión desde otra máquina y remotar nuestro terminal, o terminales, tal y como los tuviéramos.
  • Compartir un terminal entre varios usuarios o máquinas.

Esto quiere decir que se va a comportar como una especie de monitor virtual en el que podemos dejar abiertas nuestras sesiones de trabajo. Desconectar, volver a conectar desde cualquier otro ordenador y encontrar nuestras sesiones tal y como las dejamos. Todo ello desde el terminal.

tmux-varios_paneles.png

Contenidos:

  1. Lo más básico: combinaciones de teclas.
  2. Primer paso: abrir una sesión y recuperarla.
    1. Abrir una sesión.
    2. Consultar las sesiones de tmux activas.
    3. Recuperar una sesión.
  3. Compartir una sesión de tmux entre dos terminales.
  4. Paneles.

Lo más básico: combinaciones de teclas.

La documentación de tmux con frecuencia hace referencia a combinaciones de teclas como: C-b. Esto quiere decir que hay que pulsar simultáneamente dos teclas Ctrl y b. Si la combinación es M- entonces hace referencia a la tecla Alt junto a la otra tecla indicada.

Si hay un espacio que separa las teclas. Por ejempo: C-b d

Entonces se debe:

  1. Pulsar simultáneamente las teclas Ctrl y b
  2. Después, en solitario, pulsar la tecla indicada: d

Si se quiere enviar la combinación de teclas C-b al programa que se está ejecutando en el interior de tmux entonces hay que pulsar C-b dos veces.

Se puede consultar la ayuda sobre las combinaciones de teclas con C-b ?

Primer paso: abrir una sesión y recuperarla.

Una de las funciones más prácticas de un multiplexor de terminales consiste en separar la sesión de trabajo de la conexión SSH que se ha utilizado para conectar. Así es posible:

  1. Establecer una sesión SSH con un servidor.
  2. Lanzar una sesión tmux.
  3. Trabajar durante un tiempo y, tal vez, dejar un programa en ejecución.
  4. Desconectar de la sesión tmux.
  5. Cerrar la conexión SSH.
  6. Establecer una nueva conexión SSH quizás desde otro ordenador.
  7. Retomar la sesión tmux con el programa en ejecución.

Abrir una sesión.

Así para lanzar una nueva sesión de tmux bastará con ejecutar:

tmux

O bien:

tmux new

O si se quiere especificar el nombre de la sesión (si no lo hace la sesión tendrá por nombre un número):

tmux new -snombre

Una vez que se ha abierto una sesión se podrá trabajar en su interior con normalidad tal y como se haría en cualquier shell.

Desconectar de una sesión.

Cuando se quiera dejar la sesión se debe pulsar C-b d

En ese momento tmux nos retornará al shell en el que estábamos cuando se lanzó la sesión o se reconectó con ella, pero nuestra sesión seguirá activa tal y como se dejó. Ahora, si se trata de una sesión remota SSH, se puede cerrar la conexión con la máquina y aún así continuará en ejecución el programa que dejamos en la sesión de tmux.

Consultar las sesiones de tmux activas.

Si se establece de nuevo una sesión SSH con un servidor en el que se dejó activa una sesión de tmux es posible verla con el siguiente comando:

vcarceler@luna:~$ tmux ls
0: 1 windows (created Sun Apr 5 10:40:54 2020) [204x54]
vcarceler@luna:~$

En este caso se muestra que existe una única sesión de tmux con el nombre 0.

Recuperar una sesión

Para recuperar la última sesión bastará con ejecutar

tmux attach

o bien utilizar el parámetro -t para especificar el nombre de una sesión concreta

tmux attach -tnombre

Compartir una sesión de tmux entre dos terminales.

Por defecto cuando nos conectamos a una sesión de tmux no se desconectan los terminales que ya estuvieran conectados. Así resulta muy sencillo:

  1. Lanzar una sesión de tmux
  2. Utilizar otro terminal para conectar con esta sesión de tmux

En ese momento en los dos terminales se tendrá abierta la misma sesión de tmux. Lo que quiere decir que se verá lo mismo y se podrá interactuar con el programa que se esté ejecutando desde cualquiera de los dos terminales.

Esto permite interactuar con las herramientas que se estén utilizando desde dos ordenadores o compartir la sesión entre diferentes usuarios tal y como se puede ver en el siguiente video:

Si se quiere evitar este comportamiento se puede utilizar el parámetro -d en el momento de recuperar una sesión para desconectar a cualquier otro cliente.

tmux attach -dnombre

Paneles

Cuando se está trabajando en una sesión tmux es posible dividir la pantalla en diferentes paneles.

  • C-b % crea un nuevo panel dividiendo horizontalmente el espacio
  • C-b " crea un nuevo panel dividiendo verticalmente el espacio

Si hay varios paneles se puede cambiar el panel activo con C-b y una de las flechas de los cursores (arriba, abajo, izquierda, derecha).

Más información: