Using Screen

From Center for Cognitive Neuroscience
Jump to navigation Jump to search

What is Screen?

From the Gnu Screen home page.

Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells. Each virtual terminal provides the functions of the DEC VT100 terminal and, in addition, several control functions from the ANSI X3.64 (ISO 6429) and ISO 2022 standards (e.g., insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows the user to move text regions between windows. When screen is called, it creates a single window with a shell in it (or the specified command) and then gets out of your way so that you can use the program as you normally would. Then, at any time, you can create new (full-screen) windows with other programs in them (including more shells), kill the current window, view a list of the active windows, turn output logging on and off, copy text between windows, view the scrollback history, switch between windows, etc. All windows run their programs completely independent of each other. Programs continue to run when their window is currently not visible and even when the whole screen session is detached from the users terminal.


Quick Start

Login to Hoffman2 (Make sure you keep track of your Login Node Number)

$ ssh user@hoffman2.idre.ucla.edu
$ screen                #- Start Screen Session

Launch a QRSH (if on hoffman2) session:

$ qrsh -l h_data=4G


Run bash/matlab script.

(While Computing :)

CTRL+A d                #- detach the screen session
$ screen -list          #- list all screen sessions. EXAMPLE OUTPUT 9368.ttyp1.cohen-static (Detached)
$ screen -r 9368        #- Resume a screen session with an id of 9368 (see EXAMPLE above)

Setup

First copy/paste the following configuration into a file and then save it as .screenrc in your Home directory (for osx users that's /Users/username/).

# .screenrc
# Dave Kaufman 
# http://davekaufman.net
#
# Created: 1 Jul 2002 04:00:00 PM EDT
# Last Modified: Sat 22 Jan 2005 11:41:18 PM EST
#
# This file is used to initialize screen sessions

# No annoying audible bell, using "visual bell"
#vbell on				# default: off
#vbell_msg "   -- Ring, Ring!! --   "	# default: "Wuff,Wuff!!"

# Automatically detach on hangup. 
  autodetach on				# default: on

# Don't display the copyright page
  startup_message off			# default: on

# Affects the copying of text regions
  crlf off				# default: off

# Change default scrollback value for new windows
  defscrollback 1000			# default: 100

# Define the time that all windows monitored for silence should 
# wait before displaying a message. Default 30 seconds.
  silencewait 15   		

# Ensures that the default shell is the same as the value of the $SHELL env variable
  shell -$SHELL

# emulate .logout message
  pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended."

# Pretty status bar at the bottom.
hardstatus alwayslastline 
hardstatus string "%{gk}[ %{G}%H %{g}][%= %{wk}%?%-Lw%?%{r}(%{W}%n*%f %t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m/%d %{W}%c %{g}]"
# XTERM TWEAKS
# ===============================================================

# xterm understands both im/ic and doesn't have a status line.
# Note: Do not specify im and ic in the real termcap/info file as
# some programs (e.g. vi) will not work anymore.
  termcap  xterm hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
  terminfo xterm hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l

# 80/132 column switching must be enabled for ^AW to work
# change init sequence to not switch width
  termcapinfo  xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l

# Make the output buffer large for (fast) xterms.
# termcapinfo xterm* OL=10000
  termcapinfo xterm* OL=100

# tell screen that xterm can switch to dark background and has function
# keys.
  termcapinfo xterm 'VR=\E[?5h:VN=\E[?5l'
  termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~'
  termcapinfo xterm 'kh=\EOH:kI=\E[2~:kD=\E[3~:kH=\EOF:kP=\E[5~:kN=\E[6~'

# special xterm hardstatus: use the window title.
  termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

#terminfo xterm 'vb=\E[?5h$<200/>\E[?5l'
  termcapinfo xterm 'vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l'

# emulate part of the 'K' charset
  termcapinfo xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334,{\344,|\366,}\374,~\337'

# xterm-52 tweaks:
# - uses background color for delete operations
  termcapinfo xterm* be


# WYSE TERMINALS
# ===============================================================

#wyse-75-42 must have flow control (xo = "terminal uses xon/xoff")
#essential to have it here, as this is a slow terminal.
  termcapinfo wy75-42 xo:hs@

# New termcap sequences for cursor application mode.
  termcapinfo wy* CS=\E[?1h:CE=\E[?1l:vi=\E[?25l:ve=\E[?25h:VR=\E[?5h:VN=\E[?5l:cb=\E[1K:CD=\E[1J


# OTHER TERMINALS
# ===============================================================

# make hp700 termcap/info better
  termcapinfo  hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@'

# Extend the vt100 desciption by some sequences.
  termcap  vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC
  terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC
  termcapinfo linux C8
# old rxvt versions also need this
# termcapinfo rxvt C8

# Change the escape key for hotkeys so I can run screen within screen
# escape ^l\\
# Let's remove some dangerous key bindings ...
  bind k
  bind ^k
  bind .
  bind ^\
  bind \\
  bind ^h
  bind h

# ... and make them better.
  bind 'K' kill
  bind 'I' login on
  bind 'O' login off
  bind '}' history
	bind 'Q' quit

# Yet another hack:
# Prepend/append register [/] to the paste if ^a^] is pressed.
# This lets me have autoindent mode in vi.
  register [ "\033:se noai\015a"
  register ] "\033:se ai\015a"
  bind ^] paste [.]


# Resize the current region. The space will be removed from or added to 
# the region below or if there's not enough space from the region above.
  bind = resize =
  bind + resize +3
  bind - resize -3

# Time a message is displayed if screen is not disturbed by
# other activity. The dafault is 5 seconds:
msgwait 15

# change the default activity message to include a bell.
activity "Activity in %n ^G"

# Don't you want to start programs which need a DISPLAY ?
setenv DISPLAY ':0'

# Bind F11 and F12 (NOT F1 and F2) to previous and next screen window
bindkey -k F1 prev
bindkey -k F2 next

# Default Buffers
screen -M -t Shell 0 
screen    -t Shell 1 
screen    -t Shell 2
screen    -t Shell 3
select 0

Then all that is left is to run it. Screen is included by default in every OSX package and is available in any package manager I've seen (ports, portage, rpm, etc). If your using OSX, just type the following at the command prompt:

$ screen

No, not how do I start it. How do I use it?

Ah, yeah, I suppose that would help. Here's a quick run down of the basics. After starting screen hit your space bar to exit out of the welcome screen. You'll see what looks like a normal run of the mill terminal session. If you copy/pasted the configuration file above you'll also see a very convenient bar at the bottom that tells you which screen window your currently in, how many you have, and the name of your computer.

All that is left is moving between these sessions, creating new ones, deleting old ones, and the holy grail of detaching and resuming sessions.

CTRL+A 1              - move to screen 1
CTRL+A 2              - move to screen 2

CTRL+A <num>   - move to the screen with number <num>, e.g. 3, 4, 5, 6, <num>
CTRL+A X               - move to screen X where X is a screen number
CTRL+A n               - move to the (n)ext screen
CTRL+A c               - (c)reate a new screen
$ exit                     - exit the current screen window (not the entire screen program, just that window)
CTRL+A d               - detach the screen session

$ screen -list          - list all screen sessions. EXAMPLE OUTPUT 9368.ttyp1.cohen-static (Detached)
$ screen -r 9368    - Resume a screen session with an id of 9368 (see EXAMPLE above)


External Links