tmux vs. screen
Some of the (major) reasons I prefer tmux
over screen
:
- Status bar is much easier to use. You can easily set up different text/styles for current window, windows with activity, etc. and you can put things on the left and right of the status bar, including shell commands that can be run at a specified interval (default 15s).
- Almost any command you can run inside
tmux
can be run from a shell withtmux command [args]
. This makes it very easily scriptable, as well as making it easy to do complex commands. - Much more accurate automatic window renaming. While
screen
sets the title based on the first word of the command, and requires shell configuration to do even that in a shell window,tmux
keeps track of what processes are actually running in each window, and updates the title accordingly. This way you get dynamic renaming with any shell and zero configuration. For example: Let's say you're running Z Shell; the window's name would be "zsh". Now let's say you want to edit some configuration file, so you typesudo emacs /etc/somefile
. While sudo is asking for your password, the window's name will be "sudo", but once you've done that andsudo
launchesemacs
, the title will be "emacs". When you're all done and you exitemacs
, the title will change back to "zsh". This is pretty useful for keeping track of windows, and it can also be especially useful in specific situations, like if you have some long-running process in another window that occasionally prompts you for input usingdialog
; the window name would change to "dialog" when that happened, so you would know you had to switch to that window and do something. - Nicer session handling (IMHO). You can do a lot more with sessions within
tmux
itself. You can easily switch, rename, etc. and you can move and share windows between sessions. It also has a different model, where each user has a server which controls his/her sessions and which the client connects to. The downside of this is that if the server crashes, you lose everything; I've never had the server crash on me, though. tmux
seems to be more actively developed. There are updates pretty frequently, and you can file a bug report or feature request according to this FAQ and get an answer within a few days. However, as pointed out in a comment,screen
's lack of development is mostly because it's stable. It's basically done, not abandoned. That said, if it can't do something now, it probably won't ever be able to, and long-standing issues are less likely to be fixed. (Though, to be fair, vertical splitting is one feature thatscreen
didn't have when I first answered this question and does have now.)
Those are some of the reasons I personally switched from screen to tmux. That's not to say screen doesn't have advantages, but FWIW I can't think of anything I've missed since switching. The other answer by a paid nerd has a more objective list of Pros/Cons, though anecdotally I'll say that I've never had the issues with crashes or missed keystrokes that are mentioned there. (Those could have been OS-dependent. I've only used it on Linux and FreeBSD.)
(Sessions are collections of windows that can be detached and reattached later. Windows may contain one or more panes. For example configs, check out here and here.)
tmux
- Pros
- Can send keys to other panes, kind of like an IDE
- Easy keybindings -- with the right config, you'll feel at home from Vim or Screen
- Vim-ish and Emacs-ish bindings built-in
- Good layout management, a lot like a tiling window manager
- Unicode seems to Just Work with modern terminals
- Some terminal issues fixed with
TERM=tmux
- Cons
Slow -- unsure why, but keystrokes seem laggyNo more issues with slowness- Multiplexing forces the whole session width and height to the smallest attached terminal
- Has crashed multiple times on Mac OS X, losing the entire session
- Has failed on Linux after upgrade, where I couldn't reconnect to my old session
- Misses command keystrokes occasionally - ^A ^[ takes a few tries for copy mode
Can't move a pane from one window to anotherFixed with thejoin-pane
command- No line unwrapping (or "reflow" or "rewrap") after terminal width change (window resizing)
GNU Screen
- Pros
- Extremely stable (v1.0 was in 1987)
- Some terminal issues fixed with
TERM=screen
- Emacs-ish bindings built in
- Easy to move and control horizontal panes
- When multiplexing, any attached terminal can resize a pane
- Cons
No vertical splits without patch (except on Ubuntu)More recent releases of screen support vertical splits- Pane splits are lost when detaching
- Getting Unicode to work takes a little finesse and determination
- Complex and confusing status line configuration
A pro for screen: it is available pretty much out-of-the-box on Linux and Solaris. When you have to switch back and forth between platforms, it is nice not to have the mental context switch.
I'm sure you can get tmux compiled on any platform, but sometimes you have just enough access to make use of screen, but the actual system admins don't really want to add any software that isn't absolutely necessary.