screen - screen manager with terminal emulation

Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells).

[CTRL a]  [CTRL d]  (detach)        Detach screen from  this  terminal.
[CTRL a]  D D       (pow_detach)    Detach and logout.
[CTRL a]  [CTRL i]  (info)          Show info about this window.
[CTRL a]  [CTRL k]  (kill)          Destroy current window.
[CTRL a]  [CTRL l]  (redisplay)     Fully refresh current window.
[CTRL a]  [CTRL m]  (lastmsg)       Repeat  the  last  message  displayed in the message line.
[CTRL a]  [CTRL n]  (next)          Switch to the next window.
[CTRL a]  N         (number)        Show  the  number (and title) of the current window.
[CTRL a]  [CTRL p]  (prev)          Switch to  the  previous  window (opposite of [CTRL a n).
[CTRL a]  [CTRL w]  (windows)       Show a list of window.
[CTRL a]  W         (width)         Toggle 80/132 columns.
[CTRL a]  Z         (reset)         Reset the virtual terminal to its "power-on" values.
[CTRL a]            (help)          Show key bindings.
[CTRL a]  [CTRL \]  (quit)          Kill all windows and terminate screen.

Enable mouse scrolling and scroll bar history scrolling

Add this to your config vim ~/.screenrc

termcapinfo xterm* ti@:te@

Escape key

All screen commands are prefixed by an escape key, by default C-a (that's Control-a, sometimes written ^a). To send a literal C-a to the programs in screen, use C-a a. This is useful when when working with screen within screen. For example C-a a n will move screen to a new window on the screen within screen.

Getting in

screen -S <name> Start a new screen session with session name
screen -ls List running sessions/screens
screen -x Attach to a running session
screen -r <name> Attach to a running session with name
screen -dRR The "ultimate attach" Attaches to a screen session. If the session is attached elsewhere, detaches that other display. If no session exists, creates one. If multiple sessions exist, uses the first one.

Getting out

screen -d <name> Detach a running session
C-a d Detach
C-a D D Detach and logout (quick exit)
“C-a : quit” Exit screen or exit all of the programs in screen
C-a C-\ Force-exit screen (not recommended)

Help

C-a ? See help Lists keybindings. The man page is the complete reference, but it's very long.

Window Management

C-a c Create new window
C-a C-a Change to last-visited active window (commonly used to flip-flop between two windows)
C-a <number> Change to window by number (only for windows 0 to 9)
C-a ' <number or title> Change to window by number or name
C-a n or C-a <space> Change to next window in list
C-a p or C-a <backspace> Change to previous window in list
C-a " See window list (allows you to select a window to change to)
C-a w Show window bar (if you don't have window bar)
C-a k Kill current window (not recommended)
C-a \ Kill all windows (not recommended)
C-a A Rename current window

Split screen

C-a S Split display horizontally
C-a | Split display vertically or C-a V (for the vanilla vertical screen patch)
C-a tab Jump to next display region
C-a X Remove current region
C-a Q Remove all regions but the current one

Scripting

Send a command to a named session

screen -S <name> -X <command>

Create a new window and run ping example.com

screen -S <name> -X screen ping example.com

Stuff characters into the input buffer using bash to expand a newline character (from here)

screen -S <name> [-p <page>] -X stuff $'quit\r'

A full example

# run bash within screen

screen -AmdS bash_shell bash

# run top within that bash session

screen -S bash_shell -p 0 -X stuff $'top\r'

# ... some time later

# stuff 'q' to tell top to quit

screen -S bash_shell -X stuff 'q'

# stuff 'exit\n' to exit bash session

screen -S bash_shell -X stuff $'exit\r'

Misc

C-a C-l Redraw window
C-a [ Enter copy mode or C-a (also used for viewing scrollback buffer)
C-a ] Paste
C-a M Monitor window for activity
C-a _ Monitor window for silence
C-a C-v Enter digraph (for producing non-ascii characters)
C-a x Lock (password protect) display
C-a : Enter screen command
C-a H Enable logging in the screen session