Hack 49. Share Applications and Monitors with screen 
Although doing clever things with X gets most
people's attention, you can perform some cool tricks
with the console using a tool called screen.
screen is a window manager for your terminals.
It provides the following nice features:
Multiple screens A scrollback buffer Copy and paste buffers
Although this sounds like a fairly boring listafter all, you
can do this with multiple X terminalsbear in mind that these
features are provided within the terminal. You don't
need to be using X; screen works just as well
(or better) from one of the Linux virtual terminals or even on a
remote machine. For more advanced use, it also provides the ability
to detach and share the output of a process.
screen is a GNU tool and is available for most
Unix-based platforms, including Linux. Most, if not all,
distributions provide a package for it, or alternatively it can be
downloaded from the GNU web site and compiled.
You can access screen's
functions via the control
key combination Ctrl-A. Pressing this, and then the question mark (?)
key, displays a list of some of the commands you can use.
7.2.1. (Dis)connected
One of the most commonly used
features of screenbesides its support for
running multiple applicationsis its ability to continue
running applications while detached. When you run
screen, it creates a new process separate from
your current terminal. Then you can close that terminal (or log out),
open a new one (or log back in), and reattach to your screen. This is
useful for running long background jobs (such as compiling a kernel)
that you don't want to accidentally
"break" by closing the terminal or
logging out. And it's especially useful if
you're performing that job on a remote computer
where there is a distinctive risk of your connection dropping.
To begin, simply run screen without any
parameters:
foo@bar:~$ screen
Now press the control key combination Ctrl-A; then press D.
You'll be returned to your original console with the
following message:
[detached]
To see a list of your running screens, type:
foo@bar:~$ screen -ls
You'll see something like this:
There is a screen on:
25091.pts-3.foo (Detached)
1 Socket in /var/run/screen/S-user.
Now you can reattach to your screen with:
foo@bar:~$ screen -r
If you've got multiple screens listed, you can
select which one to connect to with this:
foo@bar:~$ screen -r n
Here you should replace n with the number shown by
screen -ls (e.g.,
25091), as shown earlier.
7.2.2. Mirror, Mirror
Another useful feature
is the ability to attach to an already
attached screen. This is often used for rescuing an uncleanly
detached session (e.g., your connection dropped), but you also can
use it to mirror applications.
IRC is a good example for this. People running several machines at
once (e.g., laptop and desktop) might want to have their IRC channels
open on both machines, but don't want to be signed
in twice. With screen you don't
have to!
From a shell, enter the following:
foo@bar:~$ screen irssi
This launches screen and loads
irssi (a console IRC client) onto screen
0 (you don't always have to use
an interactive shell).
From another shell (local, or remotely in an SSH shell), enter the
following:
foo@bar:~$ screen -ls
This will give you a list of sessions like these:
There is a screen on:
3483.pts-0.foo (Attached)
1 Socket in /var/run/screen/S-user.
Using this session number, enter the following:
foo@bar:~$ screen -x 3483
Now you are sharing your screen session; go ahead, try it from
multiple shells. You can attach as many sessions as you want, but
when you exit the application (assuming you launched the application
directly like you did for irssi, not from a
screen shell), that screen terminates.
7.2.3. It's Good to Share
It is also possible for multiple users to access a single
screen instancee.g., to collaborate on a
document or some code. For this to work, the following must apply:
To do this as user1 and assuming
screen is running, press Ctrl-A and then type
:multiuser on. Still as
user1, press Ctrl-A and then type
:acladd username,
where username is the user you want to be
able to access your screen. For this example, use
user2.
As user2, launch screen with:
foo@bar:~$ screen -x user1/
At this point you should be connected to
user1's
screen. Besides acladd, you
also have the aclchg, acldel,
and aclgrp commands for controlling who can access
your screen, and what they can do (e.g., you can
make them read-only). To see who's connected to your
session press Ctrl-A. Then press the asterisk (*) key.
To prevent people from (temporarily) editing all your windows, press
Ctrl-A and then type :writelock on to lock
editing and :writelock off to remove the lock.
If people have write permissions, they can
"steal"
writelock from you. To prevent someone from
editing any of your windows, press Ctrl-A and type
:aclchg username -w
"#".
David Murphy
 |