Linux Goodies

In Pursuit Of The Perfect O/S



The Linux Window Manager ICEWM -- An Introduction And Review

Zazzle Linux Gifts

The Elegant ICEWM Window Manager For Linux

I'm somewhat of a newcomer to Icewm. But I have been using it lately and can attest to the fact that it is a very compact, efficient, and tunable window manager. It provides window mouse controls, such as resizing and moving, similar to fvwm.

Like most light weight window managers, Icewm provides a menu system, and in Debian Linux distributions one of the menu selections is a sub-menu of all installed Debian package programs.

Eventually you may want to tailor icewm better to your needs. Your installation may have created a .icewm directory in your user home directory. If not, you can create it and copy the installed versions of the icewm toolbar and menu into your local .icewm directory. You may find the installed versions of the files in /usr/local/share/icewm, or in Debian Linux in /etc/X11/icewm. Icewm will use those files at startup, if they exist, and it's better to edit your local copy then the install files.

At the bottom of the screen is a toolbar that shows what's running on the current workspace. This task bar can be moved to the top of the screen if desired by editing the $HOME/.icewm/preferences file. Clicking on a task label on the toolbar will raise and focus the selected window.

Icewm supports multiple workspaces, defaulting to 4. You can move to different workspaces a number of ways. You can click on the workspace buttons on the toolbar, set up shortcut keys to go to workspaces, and turn on a mouse feature that lets you move the mouse to the right (or left) edge of the screen to cause the system to step forward (or backward) through the workspaces. You can also use ctl-alt-rightarrow and ctl-alt-leftarrow to move forward and back through the workspaces. Also holding down the shift key while arrowing through the workspaces will move the current window along for the ride.

Basic setup is controlled by a few key definitions and an several parameter flags in the $HOME/.icewm/preferences file. It's one of the easiest preference files to edit that I've run across.

A nice feature missing in many other light window managers is the ability to add iconic launch buttons to the toolbar. You can add the buttons to the toolbar by editing the $HOME/.icewm/toolbar file. Again, this file is easy to edit. Below is a snippet of my toolbar file showing a few button definitions:

prog "WWW" /usr/share/pixmaps/firefox.png /usr/local/seamonkey/seamonkey
prog "Ofc" /usr/include/X11/pixmaps/mini.edit.xpm openoffice.org3
prog "Fmgr" /usr/include/X11/pixmaps/mini.filemgr.xpm /home/bat/runMc
prog "Cal" /usr/include/X11/pixmaps/mini.calendar.xpm xcalendar

As you can see, the button definitions are simple, beginning with the word prog, a hint label that displays when the mouse is over the button, an icon (full path), and the button action. Note that if you want to have a button run a task that doesn't open a window for itself, you need to have the action launch an xterm to run the task, such as xterm -e mc.

It is also possible to add items to the $HOME/.icewm/menu file. Again, the menu file for Icewm is one of the easiest formats you'll likely run across.

There are a couple other options for adding iconic button launchers to icewm, at the cost of bit more resource. One can use the idesk to add buttons to the screen, or even use a WindowMaker dockapps that provide this service (more on this later).

The Icewm Look And Feel

ICEWM Screenshot

Above is a screenshot of my Icewm installation. If you click on the image you can see a full-sized version.

You can see that Icewm allows you to have background images. In this case, I'm using fbsetbg to load my background images.

Also shown, along with the xephem program, is the menus, which are brought up with a right-mouse click in the root window. These menus can have different themes. I've selected the win95 theme.

At the bottom of the screen you can see the toolbar. At the left of the bar are some buttons, some of which I've added. Next are tabs for the currently opened windows. To the right are buttons for selecting the workspaces.

The ICEWM Toolbar

Below is the left-most section of the toolbar.

Icewm Toolbar Buttons

The image shows the Debian icon, which brings up the same menu as does a right-click in the root window, a button that will minimize all windows, a button for seeing what's on the workspaces, and some buttons I defined in the $HOME/.icewm/toolbar file. To the right of the user-defined buttons are the running window tabs.

Icewm Toolbar Workspaces

At left you see a blowup of the right-most portion of the Icewm toolbar. The buttons labeled 1, 2, 3, and 4 are buttons that you can click to move to a selected workspace.

The default toolbar also shows a digital clock just to the left of the workspace buttons, but I choose to turn it off in preferences to make more room for window tabs. As you see in the illustration, I'm running the Window Maker wmtime dockapp instead.

Icewm doesn't exactly have a docking area, or slit such as Fluxbox. But there is a way to run applications, including dockapps, and have them autostart and appear always in a specific part of the screen.

While I choose the wmtime dockapp, you could as easily choose one of the handy iconic button task launcher dockapps, such as wmbutton or wmdrawer using the same technique I used for the wmtime dockapp.

If that's of interest to you, here are the steps to follow:

1) Start the dockapp or task you're interested in.
2) Run the xprop application.
3) Click on the running window you're interested in. Xprop will list information about the task.
4) Note the xprop WM_CLASS parameter.
5) Use the labels from WM_CLASS and build a entries for the task in $HOME/.icewm/winoptions.

The following segment of my winoptions file shows the WM_CLASS line I got from xprop for the wmtime dockapp, and the entries I put into winoptions to control my clock dockapp:

xprop WM_CLASS Line:

WM_CLASS(STRING) = "wmtime", "wmtime"

Entries in $HOME/.icewm/winoptions to control wmtime

wmtime.wmtime.allWorkspaces: 1
wmtime.wmtime.ignoreTaskBar: 1
wmtime.wmtime.ignoreQuickSwitch: 1
wmtime.wmtime.ignoreWinList: 1
wmtime.wmtime.layer: Below
wmtime.wmtime.dTitleBar: 0
wmtime.wmtime.dBorder: 1
wmtime.wmtime.geometry: 64x64-74-100

Here's some explanation of the entries:

wmtime.wmtime.allWorkspaces: 1 - Make the clock visible on all workspaces
wmtime.wmtime.ignoreTaskBar: 1 - Don't show wmtime as toolbar label
wmtime.wmtime.ignoreQuickSwitch: 1 - Don't include wmtime in alt-tab switches
wmtime.wmtime.ignoreWinList: 1 - Don't show wmtime in window list menu
wmtime.wmtime.layer: Below - Let other windows cover the clock
wmtime.wmtime.dTitleBar: 0 - Turn off wmtime's titlebar
wmtime.wmtime.dBorder: 1 - Turn on a border
wmtime.wmtime.geometry: 64x64-74-100 - Set size and position

For each task you want to specially control, get the WM_CLASS labels and then make entries for the window with those class labels in your winoptions file.

To auto-launch your applications, make entries in the $HOME/.icewm/startup file. The following illustration shows my startup file:

sleep 3
/home/bat/lastbg &
wmtime -n &
/usr/local/seamonkey/seamonkey &

First notice that the file is an executable shell file. After you build it, use chmod to make it executable. You may also find, as I did, that you need to add a sleep command to the beginning to allow Icewm to finish initializing before starting up your tasks.

Following the sleep command are my entries. I have a batch file I run to restore my last wallpaper file, then I start up wmtime, and finally a web browser. Also notice the & symbol at the end of each entry, forcing the tasks to run in the background.

A Handy ICEWM Workspace Toolbar Utility

Every window manager has a different way of showing what's running in each of the various workspaces. I found that I really like the method presented by Icewm. Below is a section of a screenshot that shows the Icewm method:

Icewm Workspace Monitor

The button on the task bar that looks like 3 overlapping windows opens a window like that in the image. The window shows first the tasks running in the current workspace, and lists a selection for each of the remaining workspaces. Clicking on a selection shows a list of all tasks running in the selected workspace. Clicking on a listed task will bring you to that workspace and task.

Pretty slick, I think.


This quick review and limited tutorial is meant to give you a flavor of the surprisingly capable Icewm window manager. It has the look and feel of Windows systems, as well as some of the larger Linux window managers.

What is missing is a complete window or menu driven method for doing all configuration management. What Icewm provides instead, and in so doing keeps resource demand to a minimum, is a few easily edited files for configuration control.

If you are migrating from Windows to Linux, and especially if you have an older system, I highly recommend that you give Icewm a try.