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
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
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
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
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
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
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.
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.
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
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
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
To auto-launch your applications, make entries in the
$HOME/.icewm/startup file. The following illustration shows my startup
wmtime -n &
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
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
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
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.