IceWM
IceWM is a lightweight, stacking window manager for the X Window System, originally developed by Marko Maček in 1997 and designed for speed, simplicity, and user customization while emulating the look and feel of desktop environments such as Motif, OS/2, and Windows.[1] It supports multiple Unix-like operating systems including Linux, FreeBSD, NetBSD, and OpenBSD, and is distributed under the GNU Library General Public License as open-source software.[1] Key features include a configurable taskbar with pager functionality, support for multiple workspaces, keyboard and mouse shortcuts (such as Alt+Tab for window switching), various focus models (e.g., ClickToFocus and PointerFocus), and theme compatibility with over 400 available themes for visual customization.[1] The window manager is highly resource-efficient, making it suitable for older hardware or minimalistic setups, and includes built-in support for multi-monitor configurations via Xrandr or Xinerama, session management, and optional elements like a clock, CPU monitor, and email notifier.[1] Since its inception, IceWM has been maintained on GitHub by developer John B. (bbidulock), with the latest stable release, version 3.9.0, issued on August 31, 2025; it is available in major Linux distributions and BSD variants, often praised for its stability, extensive documentation, and translations into 36 languages.[2] Configuration is handled through plain text files for preferences, menus, key bindings, and window options, allowing users to tailor behaviors without relying on graphical tools.[1]Overview
Description
IceWM is a stacking, reparenting window manager for the X Window System, written in C++.[3] Designed as a lightweight alternative to resource-heavy desktop environments, IceWM emphasizes speed, low memory and CPU usage, and simplicity to avoid interfering with user workflows.[1][3] Its interface draws inspiration from traditional desktop paradigms, providing familiarity for users migrating from proprietary operating systems such as Windows or OS/2.[4] IceWM is released under the GNU Lesser General Public License version 2.0 only (LGPL-2.0-only).[3] It offers full compatibility with the Extended Window Manager Hints (EWMH) and Inter-Client Communication Conventions Manual (ICCCM) protocols, enabling seamless integration with contemporary X11 applications and tools.[5]Design Philosophy
IceWM's design philosophy centers on speed, simplicity, and minimal intrusion into the user's workflow, ensuring it remains lightweight and unobtrusive while managing windows efficiently. The window manager is engineered to start quickly and consume few system resources, with a typical memory footprint of around 10-15 MB RAM on modern systems, allowing it to run smoothly even on older hardware. This approach prioritizes getting "out of the user's way," avoiding unnecessary features that could slow down operations or complicate interactions, as emphasized in its core goals of efficiency and non-interference.[6][7][8] To facilitate ease of adoption, particularly for users transitioning from other operating systems, IceWM draws influences from familiar interfaces such as Windows 95, OS/2 Warp, and Motif, emulating their visual and behavioral elements without replicating proprietary behaviors. This design choice aims to provide a sense of continuity for non-Linux users, reducing the learning curve by incorporating intuitive window decorations, menus, and controls reminiscent of those environments. The philosophy underscores accessibility, making the window manager approachable while maintaining compatibility with X11 standards like EWMH and ICCCM.[4][5] Extensibility forms a cornerstone of IceWM's principles, favoring text-based configuration files over graphical tools to enable precise, scriptable control and customization. Users can modify behaviors, appearances, and layouts through editable files likepreferences and keys, promoting a modular approach that allows integration with scripts or external tools for tailored setups. This method aligns with a user-centric ethos, empowering advanced users to fine-tune the environment without relying on resource-heavy editors.[5][9]
The design adopts a keyboard-centric paradigm for enhanced efficiency, with extensive keybindings serving as the primary interaction method and mouse support as a secondary option. Shortcuts like Alt+Tab for window switching and Alt+F4 for closing enable rapid navigation and control, reflecting a focus on productivity for power users who prefer command-driven workflows over graphical pointing. This reliance on keyboard input minimizes reliance on visual elements, further reinforcing the lightweight and responsive nature of the system.[10][11]
History
Development Origins
IceWM was developed from scratch in C++ by Marko Maček, a Slovenian computer science student, beginning in 1997 as a personal project to address the performance limitations of existing X11 window managers.[1] Maček, who had previously contributed to projects like the FTE text editor and fvwm95, sought to create a lightweight alternative that prioritized speed and resource efficiency while providing a familiar interface for users accustomed to common user access (CUA)-style graphical user interfaces, such as those in Microsoft Windows, OS/2, and Motif applications. At the time, heavier options like fvwm—despite its configurability—often required source code modifications for fine-tuning, and emerging desktop environments like early KDE and GNOME prototypes were still resource-intensive for many systems. Maček's frustrations with these tools led him to build IceWM entirely anew, emphasizing a "lean" design that felt intuitive without unnecessary complexity. The first public release, version 0.8.9, occurred on October 2, 1997, marking IceWM's entry into the open-source community under the GNU General Public License (GPL).[12] It quickly attracted attention for its minimal footprint, using around 600-800 KB of memory compared to approximately 1 MB for contemporaries like Enlightenment or Window Maker. By the late 1990s, IceWM gained traction in lightweight Linux distributions and among users seeking efficient X11 environments, as evidenced by its coverage in publications like Linux Gazette, where it was praised for balancing functionality with low overhead. In the early 2000s, maintenance transitioned from Maček to a broader team. Following a brief period under Mathias Hasselmann in 2001, Maček resumed oversight before handing it over to a group of volunteers around 2004. Today, the project is community-maintained on GitHub under the ice-wm/icewm repository, continuing its evolution as a fast and simple window manager.[13] In 1998, the project shifted to the GNU Lesser General Public License (LGPL) starting with version 0.9.13.[12]Release Timeline
IceWM's initial development commenced in 1997, culminating in the release of version 1.0.0 on December 26, 1999, which provided a stable foundation for its lightweight, stacking window management capabilities on the X Window System.[12] Subsequent minor updates through the 1.x series, such as 1.3.7 in October 2010, focused on refinements to stability and compatibility, maintaining its reputation for speed and low resource usage.[12] A major refactor arrived with version 2.0.0 on December 14, 2020, which removed outdated legacy protocols and integrated a new image rendering engine to enhance visual handling without compromising performance.[14][12] This update bridged the gap toward modern standards while preserving the window manager's core simplicity. The pivotal version 3.0.0, released on October 3, 2022—after 25 years of evolution—introduced key modernizations, including enhanced Extended Window Manager Hints (EWMH) compliance for improved interoperability and features like tabbed window grouping.[14][15] The 3.x series thereafter prioritized multi-monitor improvements via EWMH extensions, alongside experimental explorations of Wayland compatibility, though production support remains X11-focused.[14][12]| Version | Release Date | Key Milestones |
|---|---|---|
| 3.5.0 | May 20, 2024 | Added new commands, options, and usability enhancements; resolved various bug fixes for better system integration.[16][12] |
| 3.7.0 | February 22, 2025 | Introduced advanced theming options and expanded keybinding support for greater customization.[17] |
| 3.8.0 | June 22, 2025 | Optimized theme loading speeds and resource monitoring graphs for improved efficiency.[18][19] |
| 3.9.0 | August 31, 2025 | Implemented performance optimizations, including themed cursor support via libXcursor and removal of deprecated libXpm dependency.[1] |
Features
Window Management Capabilities
IceWM employs a reparenting window management model, where client windows are layered and framed by the window manager to provide decorations and controls. This approach allows IceWM to intercept and manage window events, supporting standard ICCCM and EWMH protocols for window placement hints from applications, which help in intelligently positioning new windows to minimize overlap.[20][21] Users can maximize windows to fill the available screen space—either vertically, horizontally, or fully—via double-clicking title bars or keyboard shortcuts like Alt+F10, while iconification (minimization) is handled through Alt+F9 or menu options, sending windows to the taskbar or desktop icons.[22] Focus management in IceWM offers multiple configurable modes to suit user preferences, including click-to-focus, where the active window receives input only upon clicking; sloppy focus, which activates windows on mouse-over with a configurable delay to avoid accidental switches; and explicit focus, relying on keyboard navigation such as Alt+Tab for cycling through windows. These modes are set via preferences likeClickToFocus=1 for click-based activation or ClickToFocus=0 for mouse-driven behavior, with options to raise windows on focus (RaiseOnFocus=1) or map new windows immediately (FocusOnMap=1). Keyboard-driven explicit focus is emphasized through bindings like Alt+F6 for next window and Alt+Shift+F6 for previous, ensuring efficient navigation without mouse dependency.[22][21]
Workspace management enables virtual desktops, typically four by default but customizable via WorkspaceNames, allowing users to organize windows across multiple screens. Integration with the built-in pager facilitates visual preview and dragging of windows between workspaces, while dynamic switching is supported through hotkeys (e.g., Ctrl+Alt+Left/Right Arrow) or the taskbar for seamless transitions. This setup promotes productivity by segregating applications without cluttering a single physical desktop.[22][20]
Multi-monitor support in IceWM handles independent screens through Xinerama and RandR extensions, providing per-monitor taskbars and the ability to span windows across displays if configured (e.g., via FullScreenUseAllMonitors). This capability, enhanced in versions supporting modern X11 features, allows primary screen designation (XineramaPrimaryScreen=0) and background replication or per-screen customization (DesktopBackgroundMultihead=0), ensuring flexible layouts for extended desktops.[22][1]
For session management, IceWM integrates with the X Session Management (XSM) protocol via its icewm-session component, enabling the saving and restoring of window states, positions, and workspace assignments upon login or logout. This is facilitated through startup and shutdown scripts that interact with the XSESSION protocol, allowing persistent sessions across reboots while handling crashes by restarting the window manager automatically.[23][21]
User Interface Components
IceWM provides a lightweight taskbar that serves as the primary interface for accessing applications, managing windows, and monitoring system status. The taskbar includes a start menu for launching programs, a window list displaying open applications with minimize/maximize controls, a system tray for embedding third-party applets, a pager applet for workspace navigation, and quick-launch buttons for frequently used applications configured via the toolbar file.[24] These elements can be toggled individually through preferences settings, such as enabling the system tray with TaskBarEnableSystemTray=1 or positioning the taskbar at the top of the screen with TaskBarAtTop=1.[24] The Alt+Tab switcher enables rapid cycling through open windows, displaying previews or titles in a customizable overlay. By default, pressing Alt+Tab cycles forward through windows while Alt+Shift+Tab cycles backward, with options to include minimized or hidden windows via QuickSwitchToMinimized=1 and QuickSwitchToHidden=1.[24] The switcher prioritizes urgent windows if QuickSwitchToUrgent=1 is set, and its layout can be adjusted to vertical mode with QuickSwitchVertical=1 for better visibility on wide screens.[24] Dynamic menus in IceWM are generated automatically from FreeDesktop.org (FDO) standard .desktop files, allowing seamless integration of installed applications without manual configuration. These menus support submenus for categorized entries, such as by desktop environment categories, and can be invoked via the start menu or keybindings. For custom needs, menus can also be edited manually in the programs file using menuprog directives to execute scripts that output menu items dynamically.[25] IceWM incorporates configurable applets directly into the taskbar for real-time system monitoring, including CPU usage (TaskBarShowCPUStatus=1), memory utilization (TaskBarShowMEMStatus=1), network activity (TaskBarShowNetStatus=1), and a clock (TaskBarShowClock=1). These applets display textual or graphical indicators and can be repositioned within the taskbar layout.[24] Additional applets like battery status (for laptops) or mailbox checks are available if enabled during compilation.[24] Sound effects in IceWM offer optional audio feedback for user interface events, such as window focus changes or menu activations, played via the icesound utility. Events trigger .wav files from a designated sounds directory, supporting interfaces like ALSA or OSS, with a default snooze interval of 500ms to prevent overlap.[26] Configuration involves naming sound files to match events (e.g., focus.wav for window focus), and the utility can be launched automatically in the session startup file.[26]Theming and Appearance
IceWM provides extensive visual customization through its theme system, allowing users to alter the appearance of window decorations, menus, and other interface elements to match personal preferences or emulate popular desktop environments. Themes are collections of configuration files and image resources that define colors, fonts, border styles, and button icons, enabling a lightweight yet highly adaptable look without compromising performance. Over 400 community-contributed themes are available for download from box-look.org, including those that replicate the aesthetics of Windows 95, XP, 7, macOS, or entirely custom designs.[1][27][28] Theme files utilize a plain-text .theme format, typically stored in user or system theme directories, where they specify key visual properties such as color palettes for active and inactive elements, font families and sizes, border widths and styles, and paths to icon pixmaps for buttons like minimize, maximize, and close. These files support advanced features including gradients for titlebars and borders, as well as transparency effects when paired with an external compositor, creating smooth, modern appearances. Themes are applied dynamically via the built-in theme selector accessible from the menu or by editing the ~/.icewm/theme configuration file, which points to the desired theme directory and .theme file for immediate reloading without restarting the session.[29][30] Window decorations in IceWM are highly configurable through themes, featuring customizable titlebars with text alignment and shading, functional buttons rendered as scalable pixmaps or solid colors, and adjustable borders that can include rounded corners or flat edges for varied stylistic effects. For global appearance settings, the icewmbg utility manages desktop backgrounds, supporting image formats like PNG and JPEG with optional semi-transparency and multi-monitor layouts via Xinerama or RandR. Font rendering is enhanced by Xft support, providing anti-aliased text for clearer display across menus, taskbars, and window titles, configurable per theme to balance readability and aesthetics.[29][31][30] Recent versions have improved the theming experience: IceWM 3.8, released in June 2025, optimizes theme menu loading for faster selection and previewing, reducing wait times when browsing available options. In version 3.7 from February 2025, new theming preferences were introduced, including options for enhanced border customization such as ColorQuickSwitchBorder, allowing more precise control over window edge appearances. IceWM 3.9.0, released on August 31, 2025, adds support for Xcursor files, enabling themed cursors without relying on legacy XPM formats.[32][33][34]Configuration
Core Configuration Files
IceWM's core configuration is managed through text-based files that allow users to customize general behaviors and options using a simple key-value syntax. The primary file ispreferences, which handles settings such as paths, window management behaviors, and interface timings.[35] This file supports entries in the format Key=Value, where values can be strings, integers, or booleans, enabling precise control over aspects like display formats—for instance, TimeFormat="%H:%M" sets the taskbar clock to show hours and minutes in 24-hour format.[35]
User-specific configurations reside in ~/.icewm/preferences, overriding system-wide defaults located at /etc/icewm/preferences.[35] Key settings in this file include window snapping via SnapDistance, which defines the pixel threshold for edges to align automatically during resizing or moving; taskbar behavior through TaskBarAutoHide=1 to enable automatic hiding; focus mechanisms like SloppyFocusDelay=200 to set a millisecond delay for mouse-based window activation; and visual elements such as BorderSize=2 for adjusting window frame thickness in pixels.[35] These options prioritize usability, allowing adjustments for snapping to prevent overlaps, quick taskbar access, responsive focusing, and minimalistic borders.[35]
Resource loading follows a clear precedence: user directory (~/.icewm/) takes priority over system-wide (/etc/icewm/), which in turn overrides built-in defaults.[35] Changes to preferences require restarting IceWM, for example via the menu (Logout > Restart IceWM) or the command icewm --restart, to take effect.[20]
Integration with companion utilities is configured within preferences, such as specifying background management through icewmbg for setting wallpapers and transparency effects, and defining startup applications via icewm-session to launch programs on window manager initialization.[35] Theme selection, which influences appearance directives, can also be set here with options like ThemeName, though detailed theming is handled separately.[35]
Keybindings and Menus
IceWM provides extensive customization for user input through its keybindings system, primarily configured in the~/.icewm/keys file, which defines global shortcuts for launching applications and executing commands.[36] The file uses a simple syntax: key "modifier+key" command [options], where modifiers include Mod1 (Alt), Control, and others, allowing users to override defaults like the window-switching behavior.[36] For instance, the default Mod1+Tab combination cycles through open windows, but users can add custom entries such as key "[Control](/page/Control)+Mod1+t" [xterm](/page/Xterm) to launch a terminal emulator with Ctrl+Alt+T.[36] This file supports keyboard-focused bindings, while mouse button actions, such as right-clicking for context menus, are handled via related preferences for integrated input control.[10]
The application menus in IceWM are customized via the ~/.icewm/menu file, which structures the root menu and start menu with support for hierarchical and cascading entries.[37] Entries follow a format like menu "Applications" icon { ... }, where { ... } contains nested items, enabling hierarchical categories for organized access to programs, with options for icons and command integration.[37] The menu system integrates the icesh utility for executing shell commands dynamically, such as using menuprog "icesh -c 'command'" to refresh menu contents or run scripts on selection.[37] This allows users to build context-aware menus that adapt to system state without manual reconfiguration.
Advanced customization extends to per-application rules in the ~/.icewm/winoptions file, which applies specific behaviors like border styles or focus modes to individual windows based on class, role, or title matches.[38] For example, xterm.dTitleBar: 0 removes the titlebar for terminal windows to maximize screen space, while rules can enforce layering or skipping tasks for certain apps.[38] Complementing this, the ~/.icewm/toolbar file configures the panel's quick-launch applet layout, using menu-like syntax to add buttons for frequent programs, such as prog "Terminal" [xterm](/page/Xterm) xterm, positioning icons for one-click access.[39]
For dynamic menu generation, IceWM includes the icewm-menu-fdo tool, which parses XDG-compliant .desktop files from system directories to automatically populate menus with detected applications, supporting cascading structures and icon display for a standards-based setup.[40] This utility ensures menus reflect installed software without static editing, integrating seamlessly with desktop environments.[40]
In the 3.7 release series of 2025, keybinding support saw improvements, including the ability to grab two keys simultaneously in a single definition when both map to the same keysym, enhancing flexibility for complex shortcuts.[33] Additionally, icewm-menu-fdo gained new configuration options for finer control over dynamic menu output.[17]
Installation and Usage
Installation Methods
IceWM can be installed on most Linux distributions using their respective package managers, which provide pre-compiled binaries and handle dependencies automatically. On Debian-based systems such as Ubuntu, the commandsudo apt install icewm installs the latest available version from the repositories; as of Ubuntu 24.04 LTS (April 2024), version 3.4.5 is provided, with newer releases like Ubuntu 25.10 (October 2025) offering versions up to 3.8.x or later depending on the distribution's update cycle.[41] For Fedora, users can run sudo dnf install icewm to obtain the package, with version 3.9.0 available in Fedora 43 (as of October 2025) and later repositories.[42] On Arch Linux, installation is achieved via sudo pacman -S icewm, where the package provides version 3.9.0 as of November 2025.[3] These methods ensure compatibility with the system's libraries and are recommended for standard setups.
IceWM is also available on BSD variants. On FreeBSD, it can be installed using pkg install icewm, providing version 3.9.0 as of November 2025 from the ports collection.[43] Similar package managers are used for NetBSD and OpenBSD.
For users requiring the latest features or custom builds, compiling IceWM from source is supported. The source code for the current version, 3.9.0 released on August 31, 2025, can be downloaded as a tar.lz archive from the official GitHub releases page at github.com/ice-wm/icewm/releases.[1] Essential build dependencies include a C++ compiler such as GCC or Clang, CMake (version 3.16 or later), and X11 development libraries including libX11-dev, libXext-dev, libXinerama-dev, libXrender-dev, libXrandr-dev, libXft-dev, libXpm-dev, libXfixes-dev, libXdamage-dev, and libXcomposite-dev; image support requires Imlib2 or GDK-Pixbuf, while optional audio features need libasound2-dev (ALSA).[13][44] After extracting the archive with tar --lzip -xf icewm-3.9.0.tar.lz, navigate to the source directory and execute:
Then, as root, runmkdir build && cd build && cmake -D CMAKE_INSTALL_PREFIX=/usr \ -D CMAKE_BUILD_TYPE=Release \ -D CFGDIR=/etc \ -D ENABLE_LTO=ON \ -D DOCDIR=/usr/share/doc/icewm-3.9.0 \ .. && makemkdir build && cd build && cmake -D CMAKE_INSTALL_PREFIX=/usr \ -D CMAKE_BUILD_TYPE=Release \ -D CFGDIR=/etc \ -D ENABLE_LTO=ON \ -D DOCDIR=/usr/share/doc/icewm-3.9.0 \ .. && make
make install to complete the process.[44]
Certain distributions include IceWM by default or with minimal setup. In antiX Linux Base and Full editions, IceWM is pre-installed as the default window manager, providing a lightweight environment out of the box.[45] For systems using a display manager such as LightDM, after installation, select the IceWM session from the login menu to enable it on startup.[3]
To verify a successful installation, execute icewm -V in the terminal, which outputs the version information, confirming the binary is properly linked and accessible.[5] Post-installation, basic configuration files are generated in ~/.icewm/, allowing immediate customization as detailed in subsequent sections.[13]
Starting and Basic Operation
IceWM can be launched directly from a terminal emulator by executing theicewm command, which starts the window manager alone, or icewm-session, which provides a fuller session including background management and startup scripts.[20][23] For manual X server starts, users edit the ~/.xinitrc file to include exec icewm-session as the final line, ensuring it runs after any initial commands like starting a terminal fallback.[46] When using a display manager such as GDM or LightDM, IceWM appears in the session selector menu, and it honors user session scripts like ~/.xsession for initialization.[46]
Session management in IceWM relies on icewm-session, which automatically executes applications defined in the startup script located in ~/.icewm/startup or system-wide equivalents upon launch, enabling auto-start of tools like compositing managers or trays.[23] On exit, it runs the shutdown script for cleanup, supporting session save and restore through these scripts; to switch window managers mid-session, the --replace option restarts IceWM while complying with ICCCM 2.0 standards for replacement.[20][23]
Basic operations include viewing command options with icewm --help, which lists flags like those for themes or displays.[20] To switch to a virtual terminal from within IceWM, use the standard X11 shortcut Ctrl+Alt+F1 (or F2–F6 for others), returning to the graphical session with Ctrl+Alt+F7.[47] For quick access to core functions, right-click the taskbar to open its context menu, offering options like window lists or applets; alternatively, press Alt+F1 to invoke the main menu.[10][24]
Troubleshooting begins with checking logs in ~/.icewm/log for errors during startup or runtime, such as X11 event issues enabled via SIGUSR2 if configured.[20] Common problems like missing fonts, which cause blank text in menus or borders, are resolved by editing ~/.icewm/preferences to specify valid Xft or bitmap fonts, ensuring fontconfig compatibility.[24][48]
To exit IceWM, access the menu with Alt+F1 and select Logout, which triggers a graceful shutdown via the shutdown script and optional LogoutCommand for system halt or reboot, sending SIGTERM to processes before termination.[20][23] This supports clean session closure without abrupt X server stops.[49]