Just a listing of the many ways that
screen is
indispensable to my way of using my computer.
The biggest thing is, of course, the fact that screen is detachable.
Start screen, start a program, detach screen while in the middle of doing
something, log out, login later, reattach, program is just as I left it.
This works at a distance, too. I can leave my home and go elsewhere
(work, friend’s house, etc.) and be able to ssh to my home computer,
reattach screen, and pick up exactly where I left off.
Second only to detachability is screen’s multiplexing capability. A
screen session can contain many different windows, each running a
different program. This allows me to have an entire workspace within
screen. I can have an editor in one window, working on some source code;
a shell in another window, where I might be doing trial runs of the
program; a web browser in a third window, which could be looking at some
documentation; and so on. My normal screen setup has 15 windows, which I
use for various purposes.
I can specify what programs to run from screen’s config file. So when I
start screen, my default workspace is already seeded with all the programs
I use regularly (text editor, IRC client, web browser, mail client, etc.).
I use this capability just to start some programs that I never even
interact with, for example SETI@Home. Running it within screen ensures
that it’s running at all times (I always have a screen session running)
and only one instance is ever running (I do everything within one screen
session).
I can attach to the same session multiple times. So my customary
graphical workspace is three xterms, all attached to the same screen
session. This gives me more visual real estate, while allowing me to be
very flexible. The windows displayed by each of the xterms change
depending on what I’m doing at the moment.
Screen understands several different character encodings. I run all of my
programs in UTF-8 mode. When I’m attached to my local xterms, screen
passes the UTF-8 characters straight through, because the xterms can
handle it. On friends’ computers, screen translates the UTF-8 into
ISO-8859-1, showing all the characters it can and filling in question
marks for those it can’t. Likewise for my serial terminal, which uses a
CP437 charset. (I’ll admit that that last took some work on my part.)
I can also input most Unicode characters via screen’s digraph support.
Press the right escape characters, enter an RFC1345 digraph, and whatever
program I’m currently using gets a UTF-8 character. (This also took a
little work—I had to
patch screen to
get digraph support for non-ISO-8859-1 characters.)
Screen keeps a separate scrollback buffer for each window. I have it set
to keep a very large number of lines, which has come in useful on several
occasions, especially since you can search through the scrollback buffer.
(“What was the exact output of that command?” ::search:: “Ah, that was
it.”)
I’ve used screen’s monitoring capabilities a lot. It can watch a
particular window and notify you when there’s new activity (“Oh, something
happened in that log file.”) or when it’s been silent for a time (“Oh, that
long-running compile is done.”)
Screen supports having a caption line across the bottom of the screen. I
use it to give me an omnipresent clock, as well as showing me info on the
current window. The capability also exists to run arbitrary programs and
put their output in the caption. On my laptop, I do this with information
on the current state of its battery.
Instances of screen can be password protected, to prevent others from
getting at your programs. I find this feature useful when using screen in
a semi-public area where I might need to leave the computer for a time.
There are some features that, while not mind-blowing, are just nice to
have around. Normally, when the last program in a window exits the window
closes. With zombie control, the window remains, and you can restart the
program with a single keypress. Very useful for windows dedicated to
particular programs.
While I don’t use it regularly, screen’s multiuser support has been useful
on a couple of occasions. When doing some collaborative programming, I
created a single, multiuser screen session, and all of us connected to
it. It proved very useful for sharing information among the group of
people. (“Just go over to window 7, where I’ll show you how feature X
works…”)
There are, of course, plenty of other useful aspects to screen. These are
just the ones that I rely on or have found myself relying on. I encourage
anyone who uses a command line regularly to give screen a try.
For further information: