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</command></code>
The -d flag will detach Screen, while -r will reattach. There are various types of detach and reattach 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
HOSTUSER
might notice that screen resizes to fit the smaller of the two terminals.SOMEUSER
is detached HOSTUSER
might try CTRL-aFto resize the screen windows to fit the terminal.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
$Id: screen.html,v 1.8 2012/05/08 14:45:50 dickey Exp $