TMUX – Sácale más partido a tu shell

TMUX – Multiplexador de Terminal

Cuando uno está frecuentemente delante de una ventana de consola, a veces necesita algo que pudiera dividir la pantalla en varial shells, o que mantenga en ejecución un comando que le pasemos por SSH, para todos esos menesteres tenemos software como screen o tmux.
Tmux es un multiplexador de terminal para GNU/Linux, nos sirve tanto para ventanas de terminales como para las consolas tty.  Es un software programado en C y está alojado en GitHub. Tmux relaciona usuarios con sesiones, en cada sesión puedes tener varias ventanas y a su vez cada ventana puede dividirse en varias partes.

Instalación

La instalación de tmux es muy sencilla y por lo general suele estar en repositorios de distribuciones GNU/Linux. En Debian/Ubuntu podemos instalarlo con el siguiente comando:  “apt-get install tmux“. Esta versión está soportada por los sistemas operativos OpenBSD, FreeBSD, NetBSD, GNU/Linux, OS X y Solaris.
Si necesitamos el código fuente para compilarlo o simplemente por echar un ojo, podemos descargarlo de su página oficial o desde GitHub.

Uso básico

Para abrirlo lo llamaremos desde la terminal, al comando se le pueden añadir una serie de modificadores, aquí dejo los más comunes:

-2 lo ejecutamos forzándolo a que reconozca los 256 colores

Para listar las sesiones activas usamos el comando tmux ls., el cual es un alias del comando list-sessions, existen varios comandos de administración que iremos describiendo a continuación.

Podemos enlazarnos a la ultima sesión abierta con el siguiente comando:

tmux attach

Si queremos enlazar con alguna sesión en concreto de las vistas en la lista de sesiones usaremos el siguiente comando:

tmux attach -t SESSION

Para matar el servidor de tmux y destruir todas las sesiones usaremos el siguiente comando:

tmux kill-server

Para matar una sesión en concreto tenemos el comando kill-session, con el modificador -a podemos indicarle que mate todas las sesiones excepto la excepción target que le pasamos, por ejemplo:

tmux kill-session -a -t 1

El comando lsc es un alias de list-clients, con el obtenemos un listado de clientes conectados a una sesión determinada.

tmux list-clients -t 1

lscm es un alias de list-commands, con él podemos obtener la sintaxis de todos los comandos soportados por tmux.

También podemos bloquear un cliente en concreto e incluso todos los clientes que estén conectados a una sesión, para ello tenemos los comandos lock de tmux.

locks es un alias del comando lock-session, su función es bloquear todos los clientes de la sesión que le pasemos, por ejemplo:

tmux locks -t 1

o también

tmux lock-session -t 1

Para obtener los clientes asociados a una sesión usaremos el comando lsc descrito anteriormente, ahora para bloquear un cliente en concreto usaremos el comando lockc, un alias del comando lock-client, le pasaremos como target el cliente que queramos bloquear.

tmux lockc -t CLIENTE

Atajos de teclado

Tmux se usa con atajos de teclado, más adelante veremos cómo editar su configuración directamente para iniciar na sesión con ciertas configuraciones predefinidas. Disponemos de una serie de atajos para interactuar con el programa, algunos son atajos simples, para rotar los elementos de pantalla por ejemplo, y otros son atajos que hay que complementar presionando un carácter en concreto, esto lo iremos viendo mejor en los ejemplos prácticos.

El atajo más común es Control + b, este atajo de se deberá complementar a su vez con una tecla, para desplazarnos entre los paneles complementaremos Ctrl + b con las flechas de dirección, las teclas más comunes de Control + b son las siguientes:

Ctrl + b ==> d ==> Desenlaza la pantalla y sale a la shell.
Ctrl + b ==> c ==> Crea una nueva ventana.
Ctrl + b ==> 0-9 ==> Atajos a las distintas ventanas.
Ctrl + b ==> , ==> Renombramos la sesión.
Ctrl + b ==> n ==> Siguiente ventana.
Ctrl + b ==> p ==> Ventana anterior.
Ctrl + b ==> % ==> División de la pantalla en dos, izquierda y derecha.
Ctrl + b ==> ==> División de la pantalla en dos, arriba y abajo.
Ctrl + b ==> [ ==> Modo copia, ahora podemos realizar scroll con las flechas de dirección o avanzar página, para salir presionamos la tecla q.
Ctrl + b ==> x ==> Cierra el panel actual.
Ctrl + b ==> ? ==> Modo ayuda, presiona q para salir.

Existen otros atajos de teclado, como por ejemplo Ctrl + o que rotará los paneles en el sentido de las agujas del reloj o Ctrl + z que suspenderá el cliente de Tmux.

Fichero de Configuración tmux.conf

Podemos dejar configurados ciertos parámetros para añadir funcionalidades o personalizar nuestra terminal, el fichero en cuestión se llama tmux.conf, además podemos especificar otro fichero de configuración con el modificador -f, así podemos tener varias configuraciones preestablecidas e iniciar el programa con la que necesitemos. Este software, por defecto busca al iniciarse el fichero en /etc/tmux.conf y de existir este fichero busca también el fichero .tmux.conf en el directorio home del usuario que lo esté ejecutando.

A la hora de habilitar o deshabilitar las funcionalidades del ratón me encuentro con un error que me devuelve al iniciar. Según indican en el foro de tmux, es un error solventado en la versión 2.1, actualmente en los repositorios de Debian está la 1.9, a continuación dejo un ejemplo funcional para la versión 2.1:

set -g mouse on

Para los que estéis usando la versión 1.9 podemos subsanar el error configurandolo de la siguiente forma:

set -g mouse-select-window on
set -g mouse-select-pane on
set -g mouse-resize-pane on

 

Ahora podemos pinchar y arrastrar el borde de las ventanas para cambiar el tamaño de forma fácil, seleccionar el panel con un click o irnos a la ventana que queramos haciendo click en el menú de ventanas de abajo.

tmux-mouse-resize

Si nos parece muy lejana la tecla b para el atajo principal, o usáis Vim y os parece un impedimento el atajo por defecto, podemos cambiarlo a la letra a por ejemplo para tenerla más a mano y evitarnos problemas, para ello usamos la siguiente configuración.

unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

También podemos modificar la apariencia de nuestra terminal y modificar menús, colores y demás. Para comenzar con todo estoy hay que comprender el message-command-style, que no es otra cosa que un intérprete de estilos, con el que podremos adjuntar fácilmente configuraciones relacionadas con los estilos. Para ello los estilos irán en una lista separada por comas sin espacios, por ejemplo:

bg=black,fg=red

o

brightgreen

Ahora bien, para cambiar las configuraciones necesitamos adjuntar este estilo a un comando, a continuación dejo una serie de ejemplos:

set -g pane-border-fg red
set -g pane-active-border-style-fg green

con este ejemplo cambiamos el borde del panel activo a verde, el resto de paneles tendrán el borde rojo.

Para cambiar la barra del menú, podemos usar set-window-option o set-option, a continuación dejo algunos ejemplos:

#Poner la hora con segundos a la derecha
set-window-option -g status-right "%H:%M.%S"

#Cambiar los colores de la barra 
set-option -g status-fg blue
set-option -g status-bg black

#Cambiar el intervalo de refresco de la barra
set-option -g status-interval 5

#Cambiar el menú de la izquierda y darle otro formato
set-window-option -g status-left " #h "

Los formatos al igual que el resto de referencias las tenéis en el man de tmux, un saludo!