From the Canyon Edge -- :-Dustin

Sunday, December 14, 2008

The Ubuntu Server already includes a Window Manager?

The Ubuntu Server has always had a command-line only interface, and has never included a graphical desktop, such as Gnome, KDE, or XFCE. We differ quite a bit from other Linux distributions in this respect.

But did you know that the default Ubuntu Server installation, as of Intrepid Ibex, does include a window manager by default? Expand your mind a bit and check out the venerable GNU screen utility!

screen is simply an incredible program--dare I say that any good Linux/UNIX system administrator really must get to know screen. You can multiplex several tasks, send them to the background, and bring them to the foreground later, and customize task bars with all sorts of interesting information. I've never considered myself a screen expert, but I know enough to know that there's a lot I don't know :-)

The default configuration of screen in Ubuntu is quite functional, but it's lacking, um, pizazz... It's capable of a lot more.

The following is the result of several hallway conversations at last week's Ubuntu Developer Summit in Mountain View, California. Nick Barcet and I decided that the Ubuntu Server could, and should include some more useful profiles for screen, that take advantage of its more advanced features. Dave Walker helped with some early prototyping, adding some code that detects when updates are available and a reboot is required. We kicked around the idea a bit more with Kees Cook, Jamie Strandboge, and Steve Langasek.

So I created a new package this morning, screen-profiles. This package currently includes two screenrc profiles that I created, one for Ubuntu, and one for Debian. It also contains a binary, select-screen-profiles, which provides an interactive method for quickly switching among the available profiles on the system.

I have uploaded packages for Hardy, Intrepid, and Jaunty. To install, add my PPA to your /etc/apt/sources.list. And then:
$ sudo apt-get install screen-profiles
$ select-screen-profile

Here's a sample screen shot.

Notice that the first status bar across the bottom actually contains "tabs" of the open screen sessions. You can use ctrl-a-c to create a new tab, and ctrl-a-0 .. ctrl-a-4 to swtich among the available tabs. The highlighted tab is the currently active one, 1 source.

The second status bar I've reserved for system state information. Currently, this includes the current LSB release and version, Ubuntu 8.10. The blue @ indicates that a system restart is required (it's supposed to look like the Ubuntu restart icon). The red 28! indicates that there are 28 updates available. And, of course the system time follows. Note that an Ubuntu circle-of-friends logo is pretty much impossible with a standard character set, but hopefully the 3-colored \o/ logo approximates the "spirit" of Ubuntu ;-)

And for good measure, I tested this on a Debian and a Fedora system, each with their own logo approximations in the lower left.


Fedora (on a black console, just to show that look too):

So I think I'm just scratching the surface of the possibilities of screen for the Ubuntu Server. I'm really interested your favorite ~/.screenrc profile! If you're doing something interesting or cool with your screen configuration, please post your ~/.screenrc (with a GPLv3 header) and screenshots in your blog, and add a URL here as a comment. I'm hoping to ship this package in the Ubuntu Jaunty Server with a number of interesting profiles.

If you're looking for more information on customizing these screenrc files and the various commands, take an hour and read the screen(1) manpage. It's a long one ;-)