gnu_screen

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 [ or C-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
  • gnu_screen.txt
  • Last modified: 2016/02/04 16:14
  • by mgupton