I have been using IceWM since about 1999 and I discovered it by accident. A SUSE Linux update went wrong and the system booted into Icewm as a fallback option, due to being unable to launch KDE. At first I wondered why KDE looked so weird, but a quick internet search revealed that SUSE had adopted Icewm to allow users to fix their system when KDE failed. I quickly fell in love with the lightweight window manager and soon moved to its rival Window Maker and then the ultra light Wm2. I returned to Icewm because I discovered that it was very easy to configure it through text files. Wm2 could not be configured and it was many years before I realised that the mouse driven graphical configuration in Window Maker was simply a frontend to a text file configuration that was just as simple as the one in Icewm. For most of the last twenty years I have used Linux with a lightweight window manager, even when the specifications of my computers meant that I could run heavyweight environments, such as KDE or Gnome, with plenty of resources to spare. At the time that I fell in love with lightweight window managers my desktop computer had just 32MB of RAM. That was not an unusual configuration for the late 1990s as RAM was still very expensive and it made running a lightweight window manager like IceWM very attractive. Even now as I type at a keyboard with 8MB of onboard memory and a t a computer with 6GB RAM there is still good reason to use a lightweight window manager. Why devote memory to a heavyweight environment when your applications run just as well on a lightweight?

A common argument against lightweight window managers is that they are only lightweight because you have to add a lot of external applications to make them usable, and they lack configuration options. Icewm uses up as little memory as the Network Manager application that runs my internet connection, yet it provides a taskbar, an acclerated launch menu system, virtual desktops since 1999 (2017 for Microsoft Windows), automatic tiling of open application windows since 1998, clock, resource monitors, keyboard shortcuts, per application settings (e.g., turn off titlebars), and an extensive range of prefernces that can be set in a plain English configuration file. Add to that Icewm has been installed by default on SUSE, one of the world's oldest and largest Linux comanpies, almost as long as KDE, and you can see that Icewm is a trustworthy window manager. Like many lightweight Linux window managers Icewm went through a long period of not being actively maintained, but it now has an active development program, including fixing two of its lacks: a way of externally scripting the internals and accelerating menus based on numbers as well as letters.

Key Chord Shortcuts

One of the frustrations with IceWM is that is comes with a lot of functions that are set to key chord shortcuts, but cannot natively be used as menu items. This is particularly frustrating for RSI sufferers because IceWM cannot natively handle key sequences and relies exclusively, like most Linux window managers and desktop environments, on key chords, which require holding a modifier key down while pressing another key. Key chords can be a source of pain for RSI sufferers and key sequences, pressing a series of keys in sequence, are preferable. Due to the design of IceWM's menu this can be worked around. Letters can be assigned to not only move to a menu item, but to automatically launch it if there are no other items in that submenu with the same acceleration letter. The very latest edition of IceWM now allows numbers to also act as accelerators (great for switching virtual desktops), but only the most bleeding edge Linux distributions have IceWM 2.6 in their software repositories. I used to set all those key chord shortcuts to empty to avoid the temptation of using them, but then I realised that the Icewm menu system made them very useful. Any command line program can be run with additional arguments as an IceWM menu item, so using Xdotool to trigger the key chord allows these keyboard exclusive functions to be used in a menu. Confusingly, there are two collections of keyboard shortcuts in separate IceWM configuration files. The preferences file is where those keyboard exclusive functions are stored. The shortcuts can be changed, but only to single press keys (e.g., F2 or Print) or to key chords. Then there is a separate configuration file called keys for shortcuts that launch external applications, which is useful for setting the volume keys on a keyboard, but in general it is much easier in IceWM to launch applications from the menu, as it avoids learning a lot of shortcuts and causing conflicts with shortcuts used within applications.


The menu system is where IceWM excels, especially for RSI sufferers, and in particular those who suffer from both RSI and poor memory. The advantage of a menu system is that you can see what the mennu item is called and IceWM's accelerated menu system means that for familar applications you can type the menu trigger letters as fast as a key sequence shortcut. There are sample configuration files in the root (or system) directories of a Linux installation, which should be copied to either a .icewm directory in your home directory or preferably to an icewm directory in the .config sub-directory of your home directory. The sample menu file shows how menu files are constructed, which are very simple compared to the complex set of brackets or code words required by some win manager configuration files. There are three compulsory elements before the rest of the configuration line is used for the command. First there is a type given, most usually menu to create a submenu or prog to indicate that the menu item launches an application. Next there is the name for the menu item that will appear in the menu. This does not have to be the name of the application, for example you may name the item Browser, but use it to launch Firefox. The third item is the name of an icon, which must be filled in. If no icon is required a dash is required. The rest of the line is the command. The following example uses Xdotool to create a Mouse Teleport to send the mouse pointer to the centre, corners, or edges of the screen. This saves a lot of RSI pain if the pointer has to be moved from one side of the screen to the other. You will note from the example that if the name element contains more than one word then it must be surrounded by double quotation marks.

menu Pointer folder { prog "Upper Left" - xdotool mousemove 5 5 prog West - xdotool mousemove 5 540 prog "Bottom Left" - xdotool mousemove 5 1075 prog South - xdotool mousemove 975 1075 prog Tray - xdotool mousemove 1915 1075 prog East - xdotool mousemove 1915 540 prog "Right Top" - xdotool mousemove 1915 5 prog North - xdotool mousemove 975 5 prog Centre - xdotool mousemove 975 540 }

As mentioned in the previous section Xdotool can also be used to trigger key chords set in the IceWM preferences file. To show all open windows side by side, the keyboard exclusive setting KeySysTileVertical must be triggered, which by default is set to Alt+Shift+F2. That is a difficult key combination for most RSI sufferers to press. The function cannot be run directly from a menu item, but Xdotool can fake the key press. To do this add the following to the IceWM menu configuration file:

prog "Tile Vertical" - xdotool key alt+shift+F2


More to Follow

For such a lightweight window manager there is a lot that can be written about IceWM. Rather than extend an already overlong article, I shall write future articles on IceWM themes, configuring IceWM, and using the recently much expanded external scripting application IceSh.