2. tmux…¿Para qué?
Para multiplexar terminales.
Tmux permite tener varios terminales en una sola
pantalla, desvincularlos (manteniéndolos funcionando
en segundo plano) y recuperarlos más tarde.
Ventajas:
No necesitamos ejecutar varias instancias de la
aplicación de terminal para conectarnos al mismo
servidor.
Podemos desconectarnos/conectarnos a una sesión
de tmux en cualquier momento y continuar con el
trabajo que estábamos realizando exactamente
dónde lo dejamos.
Podemos compartir el terminal para ver el trabajo que
está realizando otro sysadmin.
3. Instalando tmux
En distribuciones basadas en GNU/Linux Debian:
# apt-get update; apt-get install tmux
En Mac OS X usar Homebrew:
$ brew install tmux
En otras distribuciones Linux sin tmux paquetizado o en
OpenBSD, FreeBSD, NetBSD e incluso en Solaris y AIX
(aunque no está muy probado en estos últimos), mejor
instalar de fuentes:
Instalar libevent 2.x:
$ wget http://downloads.sourceforge.net/project/levent/libevent/libevent2.0/libevent-2.0.21-stable.tar.gz
$ tar -xzvf libevent-2.0.21-stable.tar.gz && cd libevent-2.0.21-stable
$ ./configure && make
$ sudo make install
Instalar tmux:
$ wget http://downloads.sourceforge.net/project/tmux/tmux/tmux-1.8/tmux1.8.tar.gz
$ tar -xzvf tmux-1.8.tar.gz && cd tmux-1.8
$ ./configure && make
$ sudo make install
4. Sesiones, ventanas y paneles
tmux new -s session0
tmux new -s session1
session0
session1
window 1
window 0
window 0
pane 0
pane 0
pane 1
pane 2
shell
shell
shell
program
tail –f file
window 2
top
Una sesión es una colección de pseudo-terminales bajo la gestión de tmux. Las sesiones son
persistentes y sobreviven a desconexiones accidentales o devinculaciones (C-b d) intencionales.
Cada sesión tiene una o más ventanas. Una ventana ocupa la pantalla entera y puede ser
dividida en paneles rectangulares, cado uno de los cuales es un pseudo-terminal.
5. Comandos tmux básicos
tmux
tmux new -s sessionname [-d]
Vincularse/conectarse a una sesión.
tmux detach [-t sessionname]
Renombrar la sesión a newsessionname.
tmux attach [-t sessionname]
Crea una nueva sesión con nombre sessionname que comparte todas las
ventanas con la sesión existente session.
tmux rename [-t sessionname] newsessionname
Listar las sesiones en ejecución.
tmux new -s sessionname -t session
Iniciar una sesión con nombre sessionname y conectarse a ella. Si
especificamos el parámetro -d se crea la conexión pero no se conecta a ella.
tmux ls
Iniciar una sesión y conectarse a ella.
Desvincularse/desconectarse de una sesión.
tmux kill-session [-t sessionname]
Finalizar sesión cerrando todas las ventanas asociadas y desvinculando a todos
los clientes conectados a ella.
6. La tecla de comandos Ctrl-b
Ctrl-b es la tecla de comandos de tmux.
Utilizada para trabajar con tmux dentro de una sesión
de tmux.
Todos los comandos de tmux se inician con esta
secuencia de comandos.
El comando más importante es Ctrl-b ?
Para cambiar la tecla de
comandos a Ctrl-a editamos
el fichero ~./tmux.conf y
añadimos las líneas:
# Change the Prefix Key
set -g prefix C-a
unbind C-b
bind C-a send-prefix
7. Comandos Ctrl-b – Gestión de
sesiones
C-b :new [-s sessionname] [shell-command]
→ Crear nueva sesión.
C-b s (switch session)
→ Cambiar de sesión.
C-b :choose-session
→ Cambiar de sesión.
C-b D
→ Desvincularse (detach) de
una sesión de tmux en modo
interactivo.
C-b d
→ Desvincularse (detach) de la
sesión actual.
C-b $
→ Renombrar la sesión actual.
exit
→ Cerrar la sesión o panel
actual.
8. Comandos Ctrl-b – Gestión de
ventanas
C-b c (create window)
→ Crear una nueva ventana.
C-b :new-window
→ Crear una nueva ventana.
C-b :list-windows
→ Listar ventanas.
C-b ,
→ Renombrar ventana.
C-b n (next window)
→ Ir a la siguiente ventana.
C-b :next-window
→ Ir a la siguiente ventana.
C-b p (previous window)
→ Ir a la ventana anterior.
C-b :previous-window
→ Ir a la ventana anterior.
C-b n
→ Ir a la ventana nº n (de 0 a 9).
C-b w
→ Elegir ventana interactivamente.
C-b :choose-window
→ Elegir ventana interactivamente.
C-b &
→ Cerrar la ventana actual.
C-b :kill-window
→ Cerrar la ventana actual.
9. Comandos Ctrl-b – Gestión de
paneles (I)
C-b %
→ Dividir la ventana verticalmente.
C-b :split-window -h
→ Dividir la ventana verticalmente.
C-b “
→ Dividir la ventana horizontalmente.
C-b :split-window
→ Dividir la ventana horizontalmente.
C-b :list-panes
→ Listar paneles.
C-b q
→ Mostrar número de paneles.
C-b :display-panes
→ Mostrar número de paneles.
C-b o
→ Cambiar al siguiente panel.
C-b :select-pane
→ Cambiar al siguiente panel.
C-b [↑ | ↓ | ← | →]
→ Desplazarse entre paneles.
C-b ;
→ Ir al panel seleccionado anteriormente.
C-b C-o
→ Rotar panel.
C-b :rotate-window [-D] → Rotar panel. Con -D en sentido inverso.
10. Comandos Ctrl-b – Gestión de
paneles (II)
C-b SPACE
→ Cambiar disposición de los paneles.
C-b :next-layout
→ Cambiar disposición de los paneles.
C-b !
→ Abrir panel en un nueva ventana.
C-b :break-pane
→ Abrir panel en un nueva ventana.
C-b :pipe-pane “cat > /path/file.log”
C-b :pipe-pane
C-b :resize-pane [–DLRU] [-t pane] [n] (Down|Left|Right|Up)
→ Activa/desactiva el logging del panel actual.
→ Redimensiona el panel en la dirección
indicada n líneas.
C-b :setw synchronize-panes on|off
→ Duplica la entrada de un panel en el resto
de paneles de la misma ventana.
C-b x
→ Cerrar panel actual.
11. Bonus track
Ejecutar un programa específico al iniciar una nueva sesión:
tmux new -s sessionname [-d] command
Bloquear la sesión:
C-b :set lock-after-time timeout
Bloquea la sesión tras timeout segundos de inactividad.
Por defecto se ejecuta el comando lock para bloquear la sesión (opción lock-command).
En Debian (sin comando lock): # apt-get install vlock y C-b :set lock-command vlock
C-b :set lock-after-time 0
Deshabilitar el bloqueo configurado.
Log del panel actual:
Añadir al fichero de configuración ~./tmux.conf las siguientes líneas:
bind-key H pipe-pane 'cat >> $HOME/tmux-#W.log' ; display-message 'Started logging to $HOME/tmux-#W.log'
bind-key h pipe-pane ; display-message 'Ended logging to $HOME/tmux-#W.log'
C-b H
Inicia el logging del panel actual.
C-b h
Finaliza el loggin del panel actual.
12. El fichero ~/.tmux.conf sobrescribe
la configuración de /etc/tmux.conf
Ejemplo de un posible fichero de configuración…
root@demo:~# cat .tmux.conf
# use UTF8
set status-utf8 on
equivalente a
set -g utf8 on
alias tmux=‘tmux -u’
setw -g utf8 on
# make tmux display things in 256 colors
set -g default-terminal "screen-256color"
# set Ctrl-a as the default prefix key combination and unbind C-b to free it up
set -g prefix C-a
unbind C-b
# use send-prefix to pass C-a through to application
bind C-a send-prefix
# set window and pane index to 1 (0 by default)
set -g base-index 1
setw -g pane-base-index 1
# show status bar (on by default)
set -g status on
# set -g status-justify centre # center window list for clarity
# set -g status-position top
# position the status bar at top of screen
set -g status-interval 5
# set update frequencey (default 15 seconds)
# fix tmux borders displayed as x q instead of lines
set –ga terminal-overrides ‘,*:enacs@:smacs@:rmacs@:acsc@’
Continua en la siguiente diapositiva…
13. El fichero ~/.tmux.conf sobrescribe
la configuración de /etc/tmux.conf
…continuación de la anterior diapositiva.
# reload ~/.tmux.conf using PREFIX r
bind r source-file ~/.tmux.conf ; display "Reloaded!"
# use PREFIX | to split window horizontally and PREFIX - to split vertically
bind | split-window -h
bind - split-window -v
# map Vi movement keys as pane movement keys
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane –R
# use C-h and C-l to cycle thru panes
bind -r C-h select-window -t :bind -r C-l select-window -t :+
# resize panes using PREFIX H, J, K, L
bind H resize-pane -L 5
bind J resize-pane -D 5
bind K resize-pane -U 5
bind L resize-pane -R 5
# sync panes
bind C-s set-window-option synchronize-panes
# loggin
bind-key H pipe-pane 'cat >> $HOME/tmux-#W.log' ; display-message 'Started logging to $HOME/tmux-#W.log‘
bind-key h pipe-pane ; display-message 'Ended logging to $HOME/tmux-#W.log'
14. Recursos
Imprescindibles:
Manual: http://www.openbsd.org/cgi-bin/man.cgi?query=tmux&sektion=1
Tmux web site: https://www.gnu.org/software/screen/
man tmux
Interesantes:
An introduction to tmux, by Jack Franklin: http://vimeo.com/69185909
Terminal Multiplexers: Screen, Tmux y Dtach:
http://hyperpolyglot.org/multiplexers
TMUX and SSH auto-login with ssh-agent:
http://robinwinslow.co.uk/2012/07/20/tmux-and-ssh-auto-login-with-sshagent-finally/
Aplicaciones relacionadas:
tmux-powerline y powerline: https://github.com/erikw/tmux-powerline y
https://github.com/Lokaltog/powerline
GNU screen: http://www.gnu.org/software/screen/