The Funtoo Linux project has transitioned to "Hobby Mode" and this wiki is now read-only.
Terminal Mutiplexers
Introduction
GNU Screen and tmux are so called terminal multiplexers. At some point they may be considered as window managers for console, without X server. As multiplexers both screen/tmux manage multiple shell instances (windows) within a single session, allows detach/re-attach from session with running processes in their own windows.
Comparison
The following features are specific to tmux and not shared by GNU Screen.
- Client/Server System
When the first tmux session is created, a server instance is started automatically, and the session runs as a client for that server. Further sessions operate as clients, connecting to the same server instance. The user can enter commands at any client to control the server instance, the current session, or any other client of the same server instance.
- Vertical Split
Both tmux and GNU Screen allow horizontal screen splitting, but only tmux provides vertical splitting. A third-party patch has been produced for GNU Screen that adds vertical splitting (using V), and some Linux distributions do apply that patch to the default GNU Screen package. Apart from this patch, the current git version of screen has vertical split support (using |).
- Synchronize-panes
tmux can duplicate input to any pane to all other panes in the same window (not available for panes in special mode e.g. copy-mode). It provides you clusterssh like function to simultaneous input to all of the terms all at the same time
The following features are specific to GNU Screen and not shared by tmux.
- Logging (probably outdated)
In GNU Screen, you can set up logging for a detached session from within screen (Ctrl+a H). Therefore you don't have to think about redirecting output to files all the time. For example, you start some long remote compilation process and suddenly you have to disconnect, but still want to have the build log. In screen you just press (<C-a> H) combination and detach, the output is being logged.
- Interface
Whereas Screen uses Ctrl-A as its command prefix, interfering with the default command character in most shells for moving the cursor to the beginning of the line, the command prefix used by tmux is Ctrl-B, which interferes with the default command character in most shells for moving the cursor back one character without deleting. In case of a need to have standard shell behavior for Ctrl-A (in the case of Screen) or Ctrl-B (in the case of tmux), both applications can be configured to use a different command prefix. They both also provide a default command keybinding that can be used to send the requisite control character to whatever application the session contains -- "Ctrl-A A" in GNU Screen and "Ctrl-B Ctrl-B" in tmux.
- Performance
Tmux was created to provide a simple, modern, lightweight, BSD-licensed alternative to GNU Screen. In general, the design goals for tmux ensure it is a relatively fast and lightweight application. The client/server architecture also ensures that increases of resource usage for multiple sessions are minimized
Installation
root # emerge app-misc/screen or root # emerge tmux
Basic usage
^ is equal to ctrl+, for example ^x is Ctrl button+x button
Action | GNU screen | tmux |
start a new session | screen | tmux |
re-attach a detached session | screen -r | tmux -a or tmux attach |
re-attach an attached session (detaching it from elsewhere) | screen -dr | tmux -ad or tmux attach -d |
re-attach an attached session (keeping it attached elsewhere) | screen -x | tmux -a or tmux attach |
detach from currently attached session | ^a ^d or ^a :detach | ^b d or ^b :detach |
rename-window to newname | ^a A <newname> | ^b , <newname> or ^b :rename-window <newname> |
list windows | ^a w | ^b w |
list windows in chooseable menu | ^a " | |
go to window # | ^a # | ^b # |
go to last-active window | ^a l | ^b l |
go to next window | ^a n | ^b n |
go to previous window | ^a p | ^b p |
see keybindings | ^a ? | ^b ? |
list sessions | screen -ls | ^b s or tmux ls |
toggle visual bell | ^a ^g | |
create another shell | ^a c | ^b c |
exit current shell | ^d | ^d |
split pane horizontally | ^b " | |
split pane vertically | ^b % | |
switch to another pane | ^b o | |
kill the current pane | ^b x OR (logout/^D) | |
close other panes except the current one | ^b ! | |
swap location of panes | ^b ^o | |
show time | ^b t | |
show numeric values of panes | ^b q |
Configuration
.screenrc .tmux.conf
example .tmux.conf (courtesy of slashbeast)
root # Normal prefix a-la screen, ^b is ugly set-option -g prefix C-a root # Send prefix thru tmux, for example to underlaying screen. bind-key a send-prefix root # Toggle status bar bind-key b set-option status root # Toggle select pane/window by mouse bind-key m set-option mouse-select-pane \; set-option mouse-select-window root # Reload key. bind-key r source-file ~/.tmux.conf root # Split window into panes, horizontal or vertical. bind-key h split-window -h bind-key v split-window -v root # TERM variable and title. set -g default-terminal "screen-256color" set -g set-titles on set -g set-titles-string '#T [tmux]' root #set -g window-status-current-attr bold root #set -g window-status-alert-attr bold root #set -g monitor-activity on root # Start couting windows from 1 set -g base-index 1 root # Le colors and format of statusbar, menus etc. set -g message-bg black set -g message-fg colour252 root #set -g mode-bg colour252 set -g mode-bg green set -g mode-fg black set -g status-bg colour233 set -g status-fg white set -g status-left '' set -g status-right '#[fg=colour245] %d-%m-%Y %H:%M ' set-window-option -g window-status-format ' #[fg=colour245]#I:#[fg=colour250]#W ' set-window-option -g window-status-current-format '#[bg=black]#[fg=colour245] #I#[fg=colour245]:#[fg=colour252]#W '