Here's a screenshot of what I see after I type "startx":
Let's go into what you're not seeing behind this simple facade.
screen has long won my vote for "Most Undercelebrated Unix Tool". I'm amazed at the number of people I've met at LUG meetings who have never heard of it. I'll quote the description of it from our listing:
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).
When you log onto a system and run screen, a window is created with a shell in it. You can create any number of other windows and switch back-and-forth between them. screen stays out of your way unless you hit its control key (^A by default). "^A c" creates a new window. "^A n" and "^A p" move to the next and previous windows. "^A w" gives a list of the current windows and shows which you're in. "^A 3" moves to the third window, etc. ("^A a" gives a literal "^A".)
This is especially useful if, for example, you need to log onto your university's system and perform multiple tasks there. You can read mail in one window, chat on IRC in another, edit your project in other, compile it in another, etc.
Perhaps the best feature of screen is that it lets you detach and reattach sessions. When it's time to leave home, you can hit "^A d" to detach the session, and log out. All your processes will continue to run. Drive to school, log in, type screen -D -R, and your session will reattach itself, and you can continue right where you left off. Log out and go to class, and reattach there. Go over to a friend's house, and reattach there. You can have your text mode "desktop" running all the time, with everything laid out as you like it, and connect to it from anywhere, as GUI people do with VNC.
You can set your desktop up in your ~/.screenrc so you don't have to start all your applications every time. Mine looks like this:
startup_message off screen -M -t root 0 su - screen -t mail 1 mutt screen -t emacs 2 xemacs -nw -e gnuserv-start screen -t irc 3 epic4 screen -t yahoo 4 centericq screen -t mixer 5 aumix screen 6 screen 7 screen 8 screen 9 screen 10 select 1
If I don't already have a screen session running, all I have to do is type screen, and my 11 windows are created for me. I'm dropped into the first one so I can read my mail while my other apps start in the background, log me onto IRC, etc. Depending on your needs, you could have other windows tailing log files (and monitoring them to alert you to activity (-M)), logging you on to other servers, etc.
screen has a huge feature set. It can log windows to files, can split a session between multiple terminals, will let you copy and paste between windows using only the keyboard, and is rumored to be surprisingly effective against the heartbreak of psoriasis. Just take a look at its man page or info documentation to get an idea of its scope.
Now that you understand screen, we can talk about the window manager which unobtrusively displays itself in the screenshot above, ratpoison. ratpoison is:
... a simple window manager with no large library dependencies, no fancy graphics, no window decorations, and no rodent dependence. It is largely modeled after GNU Screen, which has done wonders in the virtual terminal market. All interaction with the window manager is done through keystrokes. ratpoison has a prefix map to minimize the key clobbering that cripples EMACS and other quality pieces of software. All windows are maximized and kept maximized to avoid wasting precious screen space.
As screen handles text windows, ratpoison handles GUI windows. Each window is the same size, the size of the screen. There are no title bars, no minimize buttons, none of the clutter that's needed by a mouse. Mozilla looks like this:
You can do fancier split screens to make several applications visible at once:
, but I don't bother. I want each program to have all the room it can.
ratpoison stays out of the way until you hit its control key (I set it to ^O because "a" and "o" are next to each other in my keyboard layout). "^O w" gives me a list of the current windows. "^O 1" takes me to the first one. "^O ^O" switches me back to the one I used most recently. "^O n" and "^O p" take me to the next and previous ones. "^O k" closes the current window. "^O !" brings up a prompt in which I can type a command to start a program; I find "^O ! cbb" to be much faster than hunting through menus.
As you would expect, ratpoison is lightning fast and perfectly stable.
My main application is a gnome-terminal running screen. I use gnome-terminal because it's easily configured to use good fonts, a bright color scheme, and no scrollbar, menu bar, etc. Looking at it over my shoulder, you'd think I was running at the console instead of in X.
I put as much of my activity as possible into this single gnome-terminal. Often, I'm running nothing but this, Mozilla, and maybe XMMS (which I only use because I'm too lazy to find a console MP3 player which deals well with my lousy fixed-rate sound card).
I do almost everything in console apps. EPIC4 and centericq handle IRC and instant messaging. mutt handles my mail. The amazing w3m is used for most of my freshmeat work, as it's infinitely better-suited than Mozilla for dealing with text on the Web (typing in Mozilla can't compare with the ability to dump text from a textbox into a real editor for processing). Both use XEmacs through gnuclient. gnuclient allows me to call the already-running XEmacs on screen 2 to edit some text. Using the same XEmacs session over and over again leads to several good features. For example, the kill and yank ring continues across sessions. I can kill text from a text box in w3m, switch to mutt, start a message, and yank the text into the message.
Why have I settled into this system, and what benefits do I gain from it? I take advantage of the best of both the X and console worlds. I get the graphical abilities of X without all the clutter that usually attends it, and I can work much more quickly and with less strain on my hands because I don't have to use a mouse.
At any moment, my screen is devoted to only one thing. As I type this, all I see is XEmacs showing this buffer. Since I can only see what I'm working on at this moment, I have to make the choice to go to something else. I can't be distracted by text in an X-Chat window behind this one, or by buddies appearing and disappearing in the Gaim window in the corner. If someone messages me, centericq will play a sound; I don't need to watch IM obsessively. If I'm distracted, it's because my mind is distracted by a thought of something else, not because of a flash of color in the periphery of my vision.
Since there's nothing to tweak, I'm not tempted to endlessly fidget with my windows and reconfigure my window manager, moving this window a bit to the left and that one to desktop two instead of four. I don't get bored with a theme and spend 45 minutes looking for a new one.
Every application takes up the entire screen, and I can use large fonts to reduce eye strain. Mozilla has the full width and height of my screen, and if I have to scroll horizontally, it's the site author's fault, not mine.
When I'm home, I do all my work on my laptop, which runs as an xterminal connected to my more powerful desktop machine. I like being able to move the laptop from place to place. The desktop's monitor is only used for watching DVDs.
Since all my processes are running on the desktop, if something goes wrong with my laptop, I can reattach my session on the desktop and go on working. Since I don't rely exclusively on GUI applications, if something goes wrong that prevents me from running X, if I'm placed in an environment in which I can't run X, or if I want to persist in my untested but heartfelt belief that not running X saves battery life, I can be happy with the console.
When I leave home and run my laptop independently, I use the same X system on it. Before leaving, I turn off mail delivery and run a script that rsyncs /var/www and /home/jeff to the laptop. I detach and go. If, while I'm on the road, I want to check the status of a job I left running at home, I can ssh back and reattach my home session. When I get home again, I turn off mail delivery on the laptop, rsync back to the desktop, reattach the desktop session, and push on.
Given the choice, ratpoison would run forever. I don't worry about my window manager locking up, crashing X, or displaying random strange behavior.
More importantly, it doesn't even matter if X does take a dive. All my applications are still running in screen. I can hit ctrl-alt-bksp, run startx again, type screen -D -R in gnome-terminal, and the session will reattach. I can go on like nothing happened.
In fact, it doesn't matter if the whole computer shuts down. Sometimes, I don't notice that the cat has knocked the laptop's power cable loose again, and suddenly see it suspending to disk. No problem; I bring it back up, reconnect it to the server, and reattach the screen session that's happily continued to run there all the time.
If a tree falls on the server, my processes will go down with it, but I can't help that. There has to be some point of failure, eventually.
I won't call it genuine security that would protect from a malicious attack, but there is an element of obscurity to the system that can protect from a friend who wants to play a practical joke when I walk away. I keep xlock on "^O x", but even if I step away from the keyboard without locking it, someone stepping in tends to be confused by a screen that shows no "close" buttons and a keyboard set to Dvorak.
The desktop metaphor has its place. It may even be essential for people who don't want to understand what's happening beneath their computer's GUI surface. If you do know how to use your computer without pointing and clicking, consider that you have the option to dispense with the metaphor, and may find yourself more productive if you do. You can have the ability to run all the graphical applications you need without the clutter of a root window full of icons hidden under layer upon layer of windows.
This isn't for everyone, even among the digerati. An artist may have a genuine need to have several windows of images in view at once. For someone like myself who works in text, I find it an excellent system. If something like this would be a good fit for you, I hope you've found this description useful.
In closing, I'll admit to a certain impish glee in putting this article in the themes area of our articles section. In a sense, it belongs because it's a description of how I "theme" my desktop. In a more legitimate sense, it should be thrown out because there is no "desktop" in my system, and nothing to theme. Try to troll gently in the comments.