screen
Notes on the GNU screen console multiplexer.
screen is a program that allows multiple terminals/consoles to be maintained on a host indefinitely independent of a terminal client. This allows remote terminal sessions to be persisted across network connections.
- sessions
- create session: screen -S <session id>
- list sessions: screen -ls
- detach: Ctrl-a d
- attach: screen -r <session id>
- attach to non-detached session (session sharing): screen -x <session id>
- attach, detaching first if necessary: screen -dr <session id>
- quit: Ctrl-a Ctrl-\
- quit: screen -S <session id> -X quit
- quit: Ctrl-a :quit
- windows
- create: Ctrl-a c
- kill: Ctrl-a k
- name window title: Ctrl-a A
- open window list to switch to another window:
Ctrl-a “
- regions
- vertical split: Ctrl-a |
- split: Ctrl-a S
- remove: Ctrl-a X
- remote all but the current region: Ctrl-a Q
- move to region: Ctrl-a tab
- scrollback/scroll in a region:
C-a [
orC-a ESC
to enter copy mode then arrow keys.
Common Commands
- create session:
screen -S <session id>
- attach to a session:
screen -r <session id>
- In some cases it is necessary to detach from a session before re-attaching to it:
screen -dr <session id>
- open window list to switch to another window:
Ctrl-a ”
- create window:
Ctrl-a c
- name window title:
Ctrl-a A
- kill window:
Ctrl-a k
Nested Sessions
- Use key sequence
Ctrl+a a
to send commands to the nested session.
.screenrc Configuration
# the following two lines give a two-line status, with the current window highlighted hardstatus alwayslastline hardstatus string '%{= kG}[%{G}%H%? %1`%?%{g}][%= %{= kw}%-w%{+b yk} %n*%t%?(%u)%? %{-}%+w %=%{g}][%{B}%m/%d %{W}%C%A%{g}]' # huge scrollback buffer defscrollback 5000 # no welcome message startup_message off # 256 colors attrcolor b ".I" termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' defbce on # mouse tracking allows to switch region focus by clicking mousetrack on # default windows # screen -t Shell1 1 bash # screen -t Shell2 2 bash # screen -t Python 3 python # screen -t Media 4 bash # select 0 # bind c screen 1 # window numbering starts at 1 not 0 # bind 0 select 10 # get rid of silly xoff stuff bind s split # layouts layout autosave on layout new one select 1 layout new two select 1 split resize -v +8 focus down select 4 focus up layout new three select 1 split resize -v +7 focus down select 3 split -v resize -h +10 focus right select 4 focus up layout attach one layout select one # navigating regions with Ctrl-arrows bindkey "^[[1;5D" focus left bindkey "^[[1;5C" focus right bindkey "^[[1;5A" focus up bindkey "^[[1;5B" focus down # switch windows with F3 (prev) and F4 (next) bindkey "^[OR" prev bindkey "^[OS" next # switch layouts with Ctrl+F3 (prev layout) and Ctrl+F4 (next) bindkey "^[O1;5R" layout prev bindkey "^[O1;5S" layout next # F2 puts Screen into resize mode. Resize regions using hjkl keys. bindkey "^[OQ" eval "command -c rsz" # enter resize mode # use hjkl keys to resize regions bind -c rsz h eval "resize -h -5" "command -c rsz" bind -c rsz j eval "resize -v -5" "command -c rsz" bind -c rsz k eval "resize -v +5" "command -c rsz" bind -c rsz l eval "resize -h +5" "command -c rsz" # quickly switch between regions using tab and arrows bind -c rsz \t eval "focus" "command -c rsz" # Tab bind -c rsz -k kl eval "focus left" "command -c rsz" # Left bind -c rsz -k kr eval "focus right" "command -c rsz" # Right bind -c rsz -k ku eval "focus up" "command -c rsz" # Up bind -c rsz -k kd eval "focus down" "command -c rsz" # Down