====== tmux ======
Multiplexor de terminales, permite ejecutar diferentes programas en un único terminal.
* [[https://github.com/tmux/tmux/|Repositorio oficial]]
* [[https://man.openbsd.org/tmux|Manual]]
{{ https://upload.wikimedia.org/wikipedia/commons/5/50/Tmux.png |}}
===== Vocabulario =====
* **Window** (ventana): como los escritorios virtuales, pero en el terminal, es decir, espacios de trabajo diferentes.
* **Pane** (panel): cada división del terminal
* **Prefix** (prefijo): combinación de teclas base para realizar acciones en tmux
Básicamente, tmux es un servidor que contiene un sesión que a su vez contiene ventanas que a su vez contiene paneles:
####################################
# Servidor #
# #
# ############################ #
# # Sesión # #
# # # #
# # #################### # #
# # # Ventana # # #
# # # # # #
# # # ############## # # #
# # # # Panel # # # #
# # # # # # # #
# # # # # # # #
# # # ############## # # #
# # # # # #
# # #################### # #
# # # #
# ############################ #
# #
####################################
===== Configuración =====
La configuración se establece en un fichero ''.tmux.conf'' que se guarda en el directorio personal del usuario.
Ejemplo:
# Cambiamos la combinación por defecto
unbind C-b
set -g prefix C-a
# Cambiar de panel con Alt + flecha
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# Habilitar el ratón (a partir de la versión 2.1)
set -g mouse on
# Habilitar el ratón (versión 1.8)
#setw -g mode-mouse on
# Permitir seleccionar ventanas con el ratón:
#set -g mouse-select-window on
# Permitir usar el ratón para seleccionar un panel
#set -g mouse-select-pane on
# Redimensionar un panel con el ratón
#set -g mouse-resize-pane on
#set -g mouse-utf on
# Contar las ventanas y paneles desde 1 y no 0
set -g base-index 1
setw -g pane-base-index 1
En el ejemplo anterior quitamos la combinación por defecto C-b para establecer una más cómoda
===== Atajos de teclado =====
''prefix'' es la combinación que se tenga definida por defecto (en esta wiki la definimos como C-a).
* prefix + ''%'': divide la pantalla verticalmente
* prefix + ''%%"%%'': divide la pantalla horizontalmente
* prefix + ''z'': zoom en el panel activo (o recupera su tamaño original).
* prefix + ''x'': cerrar panel activo.
* prefix ''A-1'': cambia a la disposición horizontal
* prefix ''A-2'': cambia a la disposición vertical
* prefix ''A-3'': cambia a la disposición horizontal (incrementa el panel con foco)
* prefix ''A-4'': cambia a la disposición vertical (incrementa el panel con foco)
* prefix ''A-5'': cambia a la disposición en mosaico
* prefix ''space'': cambia a la siguiente disposición
* prefix ''A-↑'' [''↓'' | ''→'' | ''←'' ]: redimensiona un panel
* prefix ''Control'' + ''↑'' [''↓'' | ''→'' | ''←'' ]: redimensiona un panel con más sensibilidad.
* prefix ''('': conectarse a la siguiente sesión
* prefix ''{'': mover el panel a la anterior posición
* prefix ''}'': mover el panel a la siguiente posición
* prefix ''$'': renombrar la sesión actual
* prefix ''w'': muestra un seleccionable para elegir la ventana a la que queremos movernos.
* prefix ''c'': Crear una nueva ventana
* prefix ''p'': Ir a la ventana anterior.
* prefix ''n'': Ir a la ventana siguiente.
* prefix ''1'' [''2'' | ''2'' ... ]: moverse a la ventana 1, 2...
* prefix '','': renombrar la ventana actual.
* prefix ''s'': mostrar sesiones abiertas de Tmux.
* prefix ''?'': muestra la lista de comandos de tmux
* prefix ''['': habilita el scroll para poder moverse con los cursores ''Av Pág''... (''q'' para salir de ese modo)
===== Uso =====
==== Crear sesión ====
tmux
El modo largo de crear una nueva sesión de tmux es ''tmux new-session''
Crearla sesión con un nombre:
tmux new -s
==== Salir sesión ====
Para salir de la sesión, pero que siga funcionando de fondo:
prefix + ''d''
==== Recuperar sesión ====
Si hemos perdido la conexión con el servidor (SSH). Tan pronto nos reconectemos, miramos las sesiones de tmux:
tmux ls
0: 2 windows (created Tue Aug 23 12:39:52 2011) [103x30]
En el caso anterior nos dice que existe una sesión llamada ''0'' (no tiene nombre) que tiene dos ventanas.
Y nos conectamos a ella:
tmux attach -t 0
La forma larga de conectarnos a cierta sesión sería ''tmux switch-client -t %%"%%0%%"%%''
Si solo tuviésemos una sesión de Tmux, podríamos usar la forma abreviada:
tmux a
==== Renombrar sesión ====
Por defecto, al lanzar tmux, le asigna un identificador numérico a la sesión. Si queremos cambiarle el nombre:
tmux rename-session -t 0
En el ejemplo anterior, cambiaríamos el nombre de la sesión ''0'' por ''nuevo_nombre_sesion''
==== Ver sesiones abiertas ====
tmux list-sessions
==== Matar sesión ====
Si queremos finalizar alguna sesión de tmux, no tenemos que entrar en ella, podemos hacerlo de la siguiente manera:
tmux kill-session -t
Para finalizar todo:
tmux kill-server
==== Modo comando ====
Para entrar en el modo comando:
prefix + '':''
En ese modo, podemos sincronizar todos los paneles abiertos con:
setw synchronize-panes
Entonces lo que escribamos, se enviará a todos los paneles, permitiéndonos realizar las mismas operaciones en todos a la vez.
==== Compartir sesión ====
Utilizando la misma cuenta de usuario, es sencillo compartir la sesión de tmux para que varias conexiones vean lo mismo y lo que se teclee en una se vea en directo en la otra:
tmux new -s compartida
Si abrimos otro terminal y entramos:
tmux attach -t compartida
Habremos entrado en la misma sesión.
Si queremos lograr lo mismo, pero con usuarios diferentes la sesión compartida tendría que crearse mediante un socket al que tengan acceso ambos usuarios, es decir, que estén en el mismo grupo. Por ejemplo:
tmux -S /tmp/sesion-compartida new -s compartida
Cambiamos el grupo del socket:
chgrp grupo-compartido /tmp/sesion-compartida
Donde ''grupo-compartido'' sería un grupo donde están los usuarios que quieren acceder a la sesión de tmux.
En otro terminal, otro usuario, se conectaría a la sesión:
tmux -S /tmp/sesion-compartida attach -t compartida
==== Iniciar con una disposición predeterminada ====
Para lograr esta disposición de paneles:
------------
| |
|----------|
| | |
------------
Iniciamos una sesión de la siguiente manera:
tmux new-session \; split-window -v \; split-window -h \;
Para esta disposición:
------------
| | |
|----------|
| | |
------------
Iniciamos tmux así:
tmux new-session \; split-window -v -p 50 \; split-window -h -p 50 \; select-pane -t 0 \; split-window -h -p 50 \;
Para esta disposición:
------------------
| |
|----------------|
| | |
|----------| |
| | |
------------------
Ejecutamos tmux así:
tmux new-session \; \
split-window -v -p 75 \; \
split-window -h -p 30 \; \
select-pane -t 1 \; \
split-window -v \;
==== Ventanas ====
Dentro de una sesión, podemos crear una ventana nueva con:
tmux neww
Si queremos crearla y darle un nombre:
tmux neww -n "mi_ventana"
===== Recursos =====
* [[https://github.com/tmux/tmux/wiki/FAQ|FAQ]]
* [[https://gist.github.com/andreyvit/2921703|tmux cheatsheet]]
* [[https://tmuxcheatsheet.com/|Tmux Cheat Sheet & Quick Reference]]
* http://www.sromero.org/wiki/linux/aplicaciones/tmux
* [[https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/|A Quick and Easy Guide to tmux]]