Jump to content

Tmux (Español)

From ArchWiki

Este artículo o sección necesita ser traducido.

Notas: Traducción en curso. (Discusión en Talk:Tmux (Español)#)

Tmux es un «multiplexor de terminales»: permite crear, acceder y controlar diversas terminales (o ventanas) desde una sola pantalla, cada una ejecutando un programa independiente. tmux puede desacoplarse de una pantalla y continuar ejecutándose en segundo plano para, más tarde, volver a acoplarse.

tmux es una alternativa a GNU Screen con licencia ISC. Aunque son similares, existen muchas diferencias entre ambos programas, como se indica en la página de preguntas frecuentes (FAQ) de tmux..

Instalación

Instale el paquete tmux.

Configuración

De forma predeterminada, a partir de la versión 3.2, tmux busca la configuración específica del usuario en $XDG_CONFIG_HOME/tmux/tmux.conf, seguido de ~/.config/tmux/tmux.conf. Se puede proporcionar un archivo de configuración global en /etc/tmux.conf, aunque Arch no distribuye dicho archivo de forma predeterminada.

Atajos de teclado

De forma predeterminada, los atajos de teclado para los comandos están precedidos por el prefijo Ctrl+b. Por ejemplo, para dividir una ventana verticalmente, pulse Ctrl+b seguido de %.

Tras dividir una ventana en varios paneles, se puede redimensionar un panel pulsando la tecla de prefijo (p. ej. Ctrl+b) y, mientras se mantiene presionado Ctrl, pulsar Izquierda/Derecha/Arriba/Abajo. El intercambio de paneles se logra de la misma manera, pero pulsando o en lugar de una tecla de dirección.

Los atajos de teclado se pueden modificar mediante los comandos bind y unbind en tmux.conf. Por ejemplo, el prefijo predeterminado Ctrl+b puede cambiarse a Ctrl+a añadiendo los siguientes comandos en su archivo de configuración:

unbind C-b
set -g prefix C-a
bind C-a send-prefix
Sugerencia Ponga entre comillas los caracteres especiales para usarlos como prefijo. También se puede utilizar Alt (llamado Meta) en lugar de Ctrl. Por ejemplo: set -g prefix m-'\'

Para crear una nueva ventana, puede pulsar Ctrl+b c; para avanzar una ventana, use Ctrl+b n y para retroceder, Ctrl+b p.

Otras formas de desplazarse entre ventanas incluyen las siguientes:

Ctrl+b l (Moverse a la ventana seleccionada anteriormente)
Ctrl+b w (Listar todas las ventanas y sus números)
Ctrl+b <número de ventana> (Moverse al número de ventana especificado; los atajos predeterminados son del 0 al 9)
Ctrl+b q (Mostrar los números de los paneles; cuando aparezcan, pulse la tecla correspondiente para ir a ese panel)

tmux tiene una opción de búsqueda de ventanas (find-window) y un atajo de teclado para facilitar la navegación entre múltiples ventanas:

Ctrl+b f <nombre de la ventana> (Buscar una ventana por nombre)
Ctrl+b w (Seleccionar desde una lista interactiva de ventanas)

Modo copia

Una ventana de tmux puede estar en uno de varios modos. El predeterminado permite el acceso directo a la terminal vinculada a la ventana; el otro es el modo copia. Una vez en el modo copia, puede navegar por el búfer, incluyendo el desplazamiento por el historial. Utilice atajos de teclado al estilo de vi o emacs en el modo copia. El predeterminado es emacs, a menos que las variables VISUAL o EDITOR contengan «vi».

Para entrar en el modo copia, realice lo siguiente:

Ctrl+b [

Puede navegar por el búfer de la misma forma que lo haría en su editor predeterminado.

Para salir del modo copia, utilice uno de los siguientes atajos de teclado:

Modo vi:

q

Modo emacs:

Esc

Para navegar por las URLs dentro de tmux, debe tener instalado y configurado urlviewAUR.

En una nueva terminal:

bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; run-shell "$TERMINAL -e urlview /tmp/tmux-buffer"

O en una nueva ventana de tmux (sin necesidad de una nueva terminal):

bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; new-window -n "urlview" '$SHELL -c "urlview < /tmp/tmux-buffer"'

Configurar el terminal correcto

256 colores

Si está utilizando una terminal de 256 colores, deberá configurar el valor de TERM correcto en tmux: tmux o tmux-256color. Esto se puede establecer en el archivo de configuración:

tmux.conf
set -g default-terminal "tmux-256color"

Además, si tmux presenta problemas de visualización, puede forzarlo a que asuma que la terminal soporta 256 colores añadiendo el siguiente alias en su .bashrc:

alias tmux="tmux -2"

Color de 24 bits

tmux admite color de 24 bits. Si su terminal soporta este modo (consulte [1]), añádalo a la configuración terminal-features.

Por ejemplo, si utiliza la terminal Alacritty, debería añadir:

set -as terminal-features ",alacritty*:RGB"

xterm-keys

Para habilitar xterm-keys, añada la siguiente línea en el archivo de configuración:

tmux.conf
set-option -g xterm-keys on

Si habilita xterm-keys en su tmux.conf, deberá crear un terminfo personalizado para declarar las nuevas secuencias de escape o, de lo contrario, las aplicaciones no las reconocerán. Compile lo siguiente con tic y podrá utilizar «xterm-screen-256color» como su TERM:

# A screen- based TERMINFO that declares the escape sequences
# enabled by the tmux config "set-window-option -g xterm-keys".
#
# Prefix the name with xterm- since some applications inspect
# the TERM *name* in addition to the terminal capabilities advertised.
xterm-screen-256color|GNU Screen with 256 colors bce and tmux xterm-keys,

# As of Nov'11, the below keys are picked up by
# .../tmux/blob/master/trunk/xterm-keys.c:
	kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H,
	kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~,
	kRIT=\E[1;2C,

# Change this to screen-256color if the terminal you run tmux in
# doesn't support bce:
	use=screen-256color-bce,

Para comprobar si su terminal soporta bce, puede utilizar tic -c:

$ tic -c xterm-screen-256color 
"xterm-screen-256color", line 16, terminal 'xterm-screen-256color': resolution of use=screen-256color-bce failed

Para compilar con tic:

$ tic xterm-screen-256color 

El archivo se compilará y se guardará en $HOME/.terminfo o en /usr/share/terminfo/ si se ejecuta como root (estando así disponible para todo el sistema).

Theming

Se puede personalizar el estilo de tmux; sin embargo, para hacerlo, primero es necesario conocer los códigos de colores. Esto se puede lograr ejecutando el siguiente comando, que imprimirá los códigos de colores junto con una muestra de cada uno:

$ for i in {0..255}; do printf "\x1b[38;5;${i}mcolor${i} - ██████████\n"; done

Los códigos de colores impresos con el comando anterior pueden utilizarse para cambiar el esquema de colores de tmux. El siguiente es un ejemplo de cómo se pueden cambiar los colores de la barra de estado:

# Status line colors
set -g status-bg "color4"         # blue background
set -g status-fg "color7"         # gray text color
set -g status-right "%l:%M %p"    # time format
set-window-option -g window-status-current-style "bg=color75,fg=color231 bold"    # current window background + foreground colors

Los bordes de los paneles también se pueden personalizar, como en el siguiente ejemplo:

# border colors
set -g pane-border-style        fg="colour255"
set -g pane-active-border-style fg="colour33"

Otros ajustes

Para limitar el búfer de desplazamiento a 10000 líneas:

set -g history-limit 10000

El ratón se puede activar o desactivar con:

bind-key m set-option -g mouse \; display "Mouse: #{?mouse,ON,OFF}"

Inicio automático con systemd

Existen algunas ventajas notables al iniciar un servidor tmux al arrancar el sistema. Especialmente, cuando se inicia una nueva sesión de tmux, tener el servicio ya en ejecución reduce cualquier retraso en el inicio.

Además, cualquier personalización vinculada a su sesión de tmux se conservará y se puede hacer que su sesión de tmux persista incluso si nunca ha iniciado sesión, en caso de que tenga algún motivo para ello (como una configuración de tmux con gran cantidad de scripts o sesiones de tmux de usuario compartidas).

El siguiente servicio inicia tmux para el usuario especificado (es decir, se inicia o habilita con tmux@username.service):

/etc/systemd/system/tmux@.service
[Unit]
Description=tmux session for user %I

[Service]
Type=forking
User=%I
# WARNING: use %I instead of %u here; %u=root in system services.
ExecStart=/usr/bin/tmux new-session -s %I -d
ExecStop=/usr/bin/tmux kill-session -t %I

[Install]
WantedBy=multi-user.target
Sugerencia
  • Es posible que desee añadir WorkingDirectory=custom_path para personalizar el directorio de trabajo. Si se establece en ~, se utilizará el directorio personal del usuario especificado en User=.
  • Añada el argumento -v de tmux para generar registros (logs) del cliente y del servidor en el directorio de trabajo (WorkingDirectory).
  • Si desea importar variables de entorno relacionadas con la sesión gráfica, tales como DISPLAY, WAYLAND_DISPLAY o SESSION_MANAGER, cambie la opción WantedBy a graphical-session.target y añada After=graphical-session.target bajo la sección [Unit].
  • Alternativamente, puede crear un script que se ejecute automáticamente tras la carga del entorno de escritorio, el gestor de ventanas o el compositor de Wayland, e importe las variables relacionadas utilizando tmux setenv -g name [valor].

Alternativamente, puede colocar este archivo dentro de su directorio systemd/User (omitiendo User=%I y sustituyendo multi-user.target por default.target en WantedBy), por ejemplo en ~/.config/systemd/user/tmux.service. De esta manera, el servicio de tmux se iniciará cuando inicie sesión, a menos que también habilite la opción descrita en systemd/User#Automatic start-up of systemd user instances. Con este método, el servicio de usuario permanecerá activo al cerrar la sesión debido al comportamiento predeterminado explicado en systemd/User#Kill user processes on logout.

Inicio con la instancia de usuario de systemd y activación por socket

Una forma diferente de iniciar tmux a través de systemd es este par de unidades:

/etc/systemd/user/tmux@.socket
[Unit]
Description=Terminal Multiplexer Activation Socket (listen on: %i)
Documentation=man:tmux(1)

[Socket]
ListenStream=/tmp/tmux-%U/%i
SocketMode=0600
DirectoryMode=0700

[Install]
WantedBy=sockets.target
/etc/systemd/user/tmux@.service
[Unit]
Description=Terminal Multiplexer (listen on: %i)
Documentation=man:tmux(1)
Requires=tmux@%i.socket

[Service]
Environment=TMUX_SERVER_ARGS=
ExecStart=tmux -D $TMUX_SERVER_ARGS
ExecStartPost=tmux -L%i start
Slice=app-tmux-%i.slice

[Install]
WantedBy=default.target
Also=tmux@%i.socket

(O colóquelos en ~/.config/systemd/user). Esto crea un proceso de tmux por cada instancia del servicio, cada uno con un socket independiente. tmux -D inicia un servidor de tmux que no realiza un fork, al cual se le pasa correctamente el descriptor de archivo (FD) de activación; pero este proceso no ejecutará las directivas del archivo de configuración. tmux start ejecuta un cliente transitorio que obliga al servidor a ejecutar la sesión, si existe alguna.

Para habilitar únicamente la activación, systemctl --user enable tmux@NOMBRE.socket; inicie el cliente de forma normal con tmux -L NOMBRE (simplemente tmux cuando NOMBRE sea default). La activación por socket, por sí sola, simplemente asegura que el servidor de tmux se mueva a su propio slice (tmux.slice/tmux-NOMBRE.slice). Esto es equivalente a lo que sugieren los desarrolladores de systemd (vea systemd-run(1) § EXAMPLES, under screen), y evita que el proceso sea finalizado por el mecanismo de limpieza de sesión. Esto también permite actuar sobre todo el grupo, por ejemplo: systemctl --user freeze tmux-NOMBRE.slice.

Para habilitar el inicio del servidor, ejecute systemctl --user enable tmux@NOMBRE.service. Si la instancia de de usuario de systemd es persistente (lingering), esto ejecutará tmux al arrancar el sistema; de lo contrario, lo hará al iniciar sesión. Para que el servidor se inicialice y ejecute programas, defina las sesiones en su archivo de configuración de tmux.

Tenga en cuenta que el proceso tmux iniciado de esta manera hereda el entorno de systemd; a menos que inicie login shells para cada panel, consulte Systemd/User#Environment variables sobre cómo configurarlas.

Para cambiar el archivo de configuración de una sola instancia, drop-in:

/etc/systemd/user/tmux@topic.service.d/override.conf
[Service]
Environment="TMUX_SERVER_ARGS=-f %h/.tmux-topic.conf"

Inicialización de sesiones

Puede hacer que tmux abra una sesión con ventanas precargadas incluyendo esos detalles en su archivo ~~/.tmux.conf:

new  -n WindowName Command
neww -n WindowName Command
neww -n WindowName Command

Para iniciar una sesión con ventanas divididas (múltiples paneles), incluya el comando splitw debajo del comando neww que desee dividir; de esta manera:

new  -s SessionName -n WindowName Command
neww -n foo/bar foo
splitw -v -p 50 -t 0 bar
selectw -t 1 
selectp -t 0

...abriría 2 ventanas; la segunda de ellas se llamaría foo/bar y estaría dividida verticalmente a la mitad (50%), con foo ejecutándose arriba de bar. El foco se situaría en la ventana 2 (foo/bar), en el panel superior (foo).

Nota

La numeración de sesiones, ventanas y paneles comienza en cero, a menos que haya especificado un base-index de 1 en su archivo .conf.

Para gestionar múltiples sesiones, cargue archivos de sesión independientes desde su archivo de configuración:

# initialize sessions
bind F source-file ~/.tmux/foo
bind B source-file ~/.tmux/bar

Integración con el portapapeles

Sugerencia

El complemento de tmux tmux-yank proporciona una funcionalidad similar.

Es posible copiar una selección de tmux al portapapeles del servidor de visualización (tanto a la selección primaria como a la secundaria) y pegar desde él hacia tmux. Los siguientes fragmentos del archivo de configuración de tmux integran el portapapeles y la selección de X11 y Wayland con la selección actual de tmux.

Nota

Es posible que sea necesario desvincular el atajo de «ventana anterior» (previous window) con unbind p para que los ejemplos de estilo Vim funcionen correctamente.

En Xorg

La primera posibilidad es utilizar xsel:

Estilo Emacs:

bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
bind-key C-y run "xsel -o | tmux load-buffer - ; tmux paste-buffer"

Estilo Vim:

bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
bind-key p run "xsel -o | tmux load-buffer - ; tmux paste-buffer"

xclip también podría utilizarse para este propósito. A diferencia de xsel, funciona mejor al imprimir un flujo de bits en bruto (raw bitstream) que no se ajusta a la configuración regional (locale) actual. Sin embargo, es más limpio usar xsel porque xclip no cierra la salida estándar STDOUT después de haber leído del búfer de tmux. Debido a esto, tmux no sabe que la tarea de copiado ha finalizado y continúa esperando a que xclip termine, lo que provoca que tmux deje de responder. Una solución es redirigir STDOUT a /dev/null:

Estilo Emacs:

bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "xclip -i -sel clip > /dev/null"
bind-key C-y run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

Estilo Vim:

bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -sel clip > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

En Wayland

Asegúrese de tener instalado wl-clipboard.

Estilo Emacs:

bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "wl-copy && wl-paste -n | wl-copy -p"
bind-key C-y run "wl-paste -n | tmux load-buffer - ; tmux paste-buffer"

Estilo Vim:

bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy && wl-paste -n | wl-copy -p"
bind-key p run "wl-paste -n | tmux load-buffer - ; tmux paste-buffer"

Clic central en urxvt

Nota

Para utilizar esto, es necesario activar el soporte para el ratón.

Existe una extensión de Perl no oficial (mencionada en las preguntas frecuentes, en el FAQ oficial) para habilitar el copiado y pegado hacia dentro y fuera de urxvt con tmux mediante el clic central del ratón.

En primer lugar, deberá descargar el script de Perl y colocarlo en la biblioteca de Perl de urxvt:

wget http://anti.teamidiot.de/static/nei/*/Code/urxvt/osc-xterm-clipboard
mv osc-xterm-clipboard /usr/lib/urxvt/perl/

También deberá habilitar dicho script de Perl en su archivo .Xdefaults:

~/.Xdefaults
...
*URxvt.perl-ext-common:		osc-xterm-clipboard
...

A continuación, deberá informar a tmux sobre la nueva función y activar el soporte para el ratón (si aún no lo ha hecho):

~/.tmux.conf
...
set-option -ga terminal-override ',rxvt-uni*:XT:Ms=\E]52;%p1%s;%p2%s\007'
set -g mouse on
...

Eso es todo. Asegúrese de cerrar todas las instancias de tmux antes de probar la nueva funcionalidad del clic central.

Dentro de tmux, Shift+Clic central pegará la selección del portapapeles, mientras que el Clic central por sí solo pegará el búfer de tmux. Fuera de tmux, simplemente use el Clic central para pegar el búfer de tmux y el estándar Ctrl+c para copiar.


Véase también

Tutoriales