Screen is a
terminal multiplexer
, i.e., it will let you have multiple virtual
terminals in a single window. You will also be able to 1) detach
a
screen session, and then detach it in a later moment; 2) share screen
sessions.
In this tutorial $ indicates a terminal prompt (just for visual convenience).
A Screen command is usually of the form CTRL-a KEY,
i.e., you'll have to press the CTRL key along
with a
, followed by a generic KEY. (Screen's default escape key is
CTRL-a.)
You'll need to be a MetaARPA member in order to use Screen on SDF
If you want a screencast
tutorial, type:
$ ttyplay /ftp/pub/users/jecxjo/howto/screen
on a terminal connected to SDF.
Alternatively, you can watch the screencast online at PlayTerm.
You can run screen by typing:
$ screen
When you run it, a window with some copyright and some other info will show
up, with [Press Space or Return to end.]
at the bottom. OK, as it
says, you can now press Space
or Enter
. You will then see your
shell prompt and nothing else. That's fine: you can now run your programs as
usual, the difference is that they will run under a Screen session.
You can detach
it by typing CTRL-a d. Screen will keep
your session running. Now if you logout, then log back in, and type:
$ screen -r
you'll see your terminal as you left it when you detached Screen!
If you lost connection, or simply forgot to detach Screen, and want to resume your session by typing:
$ screen -d -r
The -d
flag will detach Screen, while -r
will reattach. There
are various types of detach
and flags. For instance,
if you type the previous command and there was no screen session to be
resumed, you'll get a There is no screen to be detached.
message. In
this case you'll probably need:
$ screen -d -R
which will first create a new session (or rettach an existing one).
You can create various windows under your Screen session, each one running their own program. When you are in a Screen session, typing:
$ screen
will create a new window, leaving the previous window untouched, though not
visible. Instead of typing screen
, you can use the shortcut CTRL-a c.
You can create as many windows as you want. You can swith between windows with CTRL-a n (next window) and CTRL-a p (previous window). It's also possible to select windows by number. Typing CTRL-a 1 will open window number 1, CTRL-a 2, to window 2, and so on.
How do you know what's a window number? Well, you can type CTRL-a " (yeah, that's a double quote). In that case a menu
with a windows list will open. You can select a number and press enter to go
to that screen. An easier way is to have a hard status line
that
shows you each window number. For doing this in a permanent manner, you'll
have to create a .screenrc
(Screen's customization file) in your
$HOME directory and write in it the following lines:
hardstatus alwayslastline hardstatus string "%{WK}%-LW %{Y.}%n%f* %t%{-}%+LW"
(We will see what that crazyness means later.)
For your .screenrc file to be read by Screen, you'll have to start a new session. BTW, a Screen session ends when the last window is closed.
It's possible to have various Screen sessions running, each one with their
own set of windows open. If you started Screen by just typing screen
,
a new session is created. If you detach and type screen
again, a new
session will start. If you now type:
$ screen -ls
it will give you a list of Screen sessions like this:
3340.pts-6.HOST (Detached) 4522.pts-8.HOST (Attached) 2 Sockets in /tmp/screens/S-YOU
where HOST is the hostname and YOU is your username.
You can reattach a screen session by name. Say for instance that you want to
resume the 4522.pts-8.HOST
session. In this case you'll have to type:
$ screen -r 4522.pts-8.HOST
Obviously 4522.pts-8.HOST
is not a very userfriendly session name.
You can give a meaningful name by starting screen as:
$ screen -S mysession
where mysession
is the name you want to give to your session (e.g.,
work
).
It could be useful to split a window so that you can have two programs
running on the viewport. In this case, type CTRL-a
S and you'll see that the window will be split in two regions, with
the one at the bottom blank. You can swith to it with CTRL-a TAB (TAB is the tab key) and then select a window
by typing its number, or p
(previous) or n
(next), e.g., CTRL-a 2. You can always swith through regions with CTRL-a TAB.
It's possible to split the window in more then two regions, each time by typing CTRL-a S
If you want to split a window vertically, you'll have to either use a patch[1] or use a recent version of Screen.
The scenario is...
HOSTUSER and SOMEUSER are both MetaARPA members logged into sverige.
HOSTUSER wants to give SOMEUSER read only access to screen session of HOSTUSER.
HOSTUSER starts a screen session as normal.
Only three commands are needed for basic read only access to the current active window.
HOSTUSER types the following commands beginning with CTRL-a : each time ( control and 'a' followed by a colon )
CTRL-a:multiuser on
CTRL-a:password none
CTRL-a:aclchg SOMEUSER -w "#"
SOMEUSER should exit screen first, then in the shell, type:
$ screen -r HOSTUSER/
SOMEUSER now has read only access to the active window in HOSTUSER's screen session at the time of attaching.
HOSTUSER can verify SOMEUSER is attached by typing:
CTRL-a*
HOSTUSER can disconnect SOMEUSER by typing:
CTRL-a:acldel HOSTUSER
HOSTUSER can verify SOMEUSER is no longer attached by typing:
CTRL-a*
HOSTUSER can allow SOMEUSER access to additional commands.
The following commands allow SOMEUSER to cycle backwards and forward through the windows and detach.
HOSTUSER types:
CTRL-a:aclchg SOMEUSER +x next
CTRL-a:aclchg SOMEUSER +x prev
CTRL-a:aclchg SOMEUSER +x detach
Some notes:
** Screen version that was used "Screen version 4.00.03 (FAU) 23-Oct-06"
** At the time of writing ( Tue Apr 17 23:01:50 IST 2012 ) all attempts at achieving the above read only functionality by editing .screenrc failed, usually resulting in SOMEUSER having FULL access to HOSTUSER's screen and shell account.
** HOSTUSER might notice that screen resizes to fit the smaller of the two terminals.
** After SOMEUSER is detachs HOSTUSER might try CTRL-aF to resize the screen windows to fit the terminal.
** For convenience and to reduce typing in screen HOSTUSER might want to have "multiuser on" and "password none" in .screenrc. HOSTUSER's screen is still private until a user is permitted to attach with aclchg.
** HOSTUSER will hear/see lots of bells if SOMEUSER tries to type into the screen session.
** HOSTUSER can check what window is being view by SOMEUSER by looking at the output of CTRL-a*
** HOSTUSER might notice SOMEUSER appears to have rwx access in the output of CTRL-a* ...this is a bug or an undocumented feature.
** SOMEUSER can remain attached even if HOSTUSER detachs.
As we previously saw, it is possible to customize Screen by writing settings
in a file named .screenrc
in your $HOME directory. We will now some
useful Screen settings.
A full screen message with copyright and other stuff is usually displayed at startup. This can get annoying. In order to avoid it, you can put in your .screenrc the following:
startup_message off
It's possible to bind keys so that when you type CTRL-a KEY Screen willl open a new window launching some program. For instance, if you write in your .screenrc file
bind m screen -t mail 1 mutt
each time you'll type CTRL-a m a new window (named
mail
)with mutt will be created. Be careful: when you bind a key,
you'll overwrite Screen's defaults (e.g., we just lost the lastmsg
key).
TODO