Understanding Linux Window Managers vs. Desktop Environments

A window manager (WM) controls how windows are displayed, moved, and arranged on screen. A desktop environment (DE) is a complete package that includes a window manager plus file manager, panel, application launcher, system settings, and default applications. You can run just a window manager without a full desktop environment for a minimal, highly customizable setup — popular standalone window managers include i3 (tiling), Openbox (stacking), and Sway (tiling, Wayland-native). Desktop environments like GNOME and KDE use their own window managers internally but bundle them with a complete application suite.

Peeling Back the Layers of the Linux Desktop

When most people think of the “desktop” on a Linux system, they picture the complete graphical experience: windows, a taskbar, a file manager, application menus, system settings panels. That complete experience is provided by a desktop environment — a carefully integrated suite of software components that work together.

But what many users do not realize is that the graphical experience they see is assembled from distinct, separable layers. At the foundation sits a window manager — the specific component responsible for drawing window borders, handling how windows are moved and resized, managing which window is in focus, and deciding how windows are arranged on screen. Every desktop environment includes a window manager, but a window manager can also run entirely on its own, without any of the surrounding desktop environment components.

This distinction matters for practical reasons. Power users, minimalists, and those with older hardware often choose to run a standalone window manager instead of a full desktop environment. This gives them complete control over every aspect of their environment, eliminates the overhead of dozens of desktop processes, and often results in a dramatically faster and more responsive system. The tradeoff is configuration effort — without a desktop environment’s polished settings panels, you configure nearly everything through text files.

Understanding the difference between window managers and desktop environments — and understanding the spectrum of options from complete integrated environments to bare-bones tiling window managers — gives you a more complete picture of how the Linux graphical stack is assembled and what your choices are when building your ideal working environment.

The Linux Graphical Stack: Layers Explained

The complete Linux graphical experience involves multiple distinct layers, each with its own role.

Layer 1: Display Server / Compositor

The foundational layer that connects software to the physical display hardware.

X11 (X.Org Server) — the traditional display server, in use since the 1980s. X11 follows a client-server model: the X server manages the display and input devices; X clients (applications, the window manager) communicate with the server through the X protocol. X11 has network transparency built in — you can run graphical applications on a remote server and display them locally.

Wayland — a modern display server protocol designed to replace X11. In Wayland, the compositor handles both the display server and compositing roles in a single process. Modern DEs like GNOME 45+ and KDE Plasma 6 use Wayland by default. Wayland offers better security (applications cannot spy on each other), better performance, and cleaner architecture, but some software still requires XWayland (a compatibility layer running X11 applications within a Wayland session).

Layer 2: Window Manager

The window manager controls:

  • Drawing window decorations (title bars, borders, close/minimize/maximize buttons)
  • How windows are moved and resized
  • Which window receives keyboard focus
  • How windows are arranged (stacking on top of each other, tiling in a grid, tabbed, etc.)
  • Keyboard shortcuts for window operations
  • Virtual desktops / workspaces

The window manager is the layer that most directly determines how you interact with your graphical applications.

Layer 3: Compositor

The compositor combines all window contents into the final image displayed on screen, enabling visual effects: transparency, shadows, window animations, and smooth rendering. In X11, compositing is typically a separate process (Picom, Compton). In Wayland, the compositor and window manager are unified in a single “Wayland compositor” program (like Sway or KWin on Wayland).

Layer 4: Desktop Environment Components

On top of the window manager, a desktop environment adds:

  • Panel/Taskbar — shows running applications, workspaces, clock, system tray
  • Application launcher — the menu or search for starting programs
  • File manager — graphical filesystem browser
  • Notification daemon — displays popup notifications
  • System settings — control panel for all desktop configuration
  • Session manager — handles login, logout, session state
  • Default applications — text editor, terminal, image viewer, etc.
  • Desktop background handler — wallpaper and desktop icons

A desktop environment provides all of these as an integrated, coherent package. A standalone window manager provides only layer 2 — you either go without the rest or mix and match components from different sources.

Window Manager Paradigms

Window managers fall into distinct categories based on how they organize windows on screen.

Stacking (Floating) Window Managers

The traditional approach — windows float freely on the screen, can overlap each other, and are arranged manually by the user. Most desktop environments use a stacking window manager:

  • GNOME uses Mutter (stacking with optional tiling extensions)
  • KDE Plasma uses KWin (stacking with optional tiling)
  • XFCE uses Xfwm4 (stacking)
  • Cinnamon uses Muffin (stacking)

Standalone stacking WMs popular for minimal setups:

  • Openbox — lightweight, highly configurable, widely used as a base for minimal setups
  • Fluxbox — fast, includes a built-in taskbar and tab-grouped windows
  • IceWM — fast and lightweight with a Windows-like aesthetic
  • Enlightenment (E) — full-featured, visually impressive, technically a DE but often used minimally

Tiling Window Managers

Tiling WMs automatically arrange windows so they do not overlap — filling the screen efficiently. Windows are divided into tiles, and new windows take a portion of the available space. This eliminates time spent dragging and arranging windows and makes full use of screen space.

Tiling WMs are highly keyboard-driven — the workflow revolves around keyboard shortcuts rather than mouse movements. This appeals to keyboard-centric users, programmers, and anyone who finds constant mouse use inefficient.

Popular tiling WMs:

  • i3 — the most popular tiling WM on X11; manual tiling where you control layout explicitly; extensive documentation
  • sway — i3-compatible tiling WM for Wayland; drop-in replacement for i3 on Wayland
  • dwm — “dynamic window manager” from suckless.org; minimal, configured by editing C source code; manually compiled per-user
  • awesome — configured and extended in Lua; very flexible tiling layouts
  • bspwm — binary space partitioning WM; windows divide screen space in a tree structure
  • Hyprland — modern, visually impressive Wayland compositor with tiling; popular for aesthetically focused setups
  • xmonad — configured in Haskell; mathematically precise layout management

Dynamic Window Managers

Dynamic WMs support multiple layout modes and switch between them:

  • dwm — supports tiling, floating, and monocle (fullscreen) layouts, switchable with keyboard shortcuts
  • awesome — ships with many layout algorithms, configurable via Lua
  • qtile — Python-configured WM with multiple layout types

Compositors (Wayland)

On Wayland, the window manager and compositor are unified. Wayland compositors include:

  • Sway — i3-compatible tiling, the go-to for i3 users migrating to Wayland
  • Hyprland — modern, animated, highly configurable tiling compositor
  • KWin (Wayland mode) — KDE’s compositor, supports both tiling and stacking
  • Mutter (Wayland mode) — GNOME’s compositor
  • river — a minimal Wayland compositor configured via a startup script

i3: A Deep Dive into a Popular Tiling Window Manager

i3 is the most widely used standalone tiling window manager and serves as an excellent representative example of the category. Understanding i3 illustrates what using a standalone WM is like in practice.

What i3 Provides

i3 manages windows in a tiling layout — by default, new windows split the current window horizontally or vertically, creating a tree of containers. You can switch to tabbed or stacked layouts for specific containers, toggle windows to floating mode, and use multiple workspaces to organize your work.

i3 does not provide: a panel, application launcher, file manager, notification system, wallpaper handler, or system settings. You assemble these yourself from separate tools.

Installing i3 on Ubuntu

$ sudo apt install i3

Log out, select “i3” at the login screen, log in. i3 starts with a minimal configuration wizard asking for the modifier key (usually Super/Windows key or Alt).

What i3 Looks Like Out of the Box

i3 out of the box is extremely minimal: a black background, no taskbar, no icons. Press $mod+Enter to open a terminal. That is it. From here you configure everything.

i3’s Configuration File

i3 is configured through ~/.config/i3/config — a text file you edit to define every aspect of behavior:

# Set modifier key (Super = Windows key)
set $mod Mod4

# Font for window titles
font pango:monospace 10

# Key bindings
bindsym $mod+Return exec alacritty          # Open terminal
bindsym $mod+d exec dmenu_run               # Application launcher
bindsym $mod+Shift+q kill                   # Close focused window
bindsym $mod+f fullscreen toggle            # Fullscreen
bindsym $mod+v split v                      # Split vertically
bindsym $mod+h split h                      # Split horizontally
bindsym $mod+s layout stacking             # Stacking layout
bindsym $mod+w layout tabbed               # Tabbed layout
bindsym $mod+e layout toggle split         # Toggle split layout

# Workspace switching
bindsym $mod+1 workspace number 1
bindsym $mod+2 workspace number 2
# ... up to workspace 10

# Move windows to workspaces
bindsym $mod+Shift+1 move container to workspace number 1

# Resize mode
bindsym $mod+r mode "resize"

# Status bar (i3bar with i3status)
bar {
    status_command i3status
    position bottom
}

# Auto-start applications
exec --no-startup-id picom               # Compositor for effects
exec --no-startup-id feh --bg-scale ~/wallpaper.jpg   # Wallpaper
exec --no-startup-id nm-applet           # NetworkManager tray icon
exec_always --no-startup-id autotiling  # Python script for auto-tiling

i3 Components Ecosystem

To build a full desktop around i3, users typically combine:

  • Terminal: alacritty, kitty, urxvt
  • Application launcher: dmenu (minimal), rofi (feature-rich), wofi (Wayland)
  • Status bar: i3bar + i3status (built-in), polybar (popular, very customizable), waybar (Wayland)
  • Compositor: picom (X11), or use sway which has built-in compositing (Wayland)
  • Wallpaper: feh (X11), swaybg (Wayland)
  • Notifications: dunst (X11/Wayland), mako (Wayland-native)
  • File manager: ranger (terminal-based), Thunar, Nautilus
  • Screen locker: i3lock, swaylock (Wayland)

Building this setup takes time but results in an environment precisely matched to your workflow — every keybinding, every visual element, every application is chosen deliberately.

Sway: i3 for Wayland

Sway is a drop-in replacement for i3 that runs natively on Wayland. Its configuration syntax is nearly identical to i3’s, making migration straightforward:

$ sudo apt install sway

Most i3 configuration transfers directly to sway with minor adjustments (replacing X11-specific tools with Wayland equivalents: feh → swaybg, dmenu → wofi, i3lock → swaylock, picom → not needed since sway handles compositing).

Openbox: A Stacking Window Manager for Minimal Setups

Openbox is the most popular minimal stacking window manager. Unlike i3’s keyboard-driven tiling approach, Openbox provides a traditional floating window experience with right-click context menus — familiar to anyone who has used a desktop computer.

What Makes Openbox Popular

  • Extremely lightweight — uses very little RAM and CPU
  • Right-click desktop menu — right-click the desktop to launch applications
  • Highly configurable — behavior, keybindings, and menus through XML files
  • Used as a base — LXDE and LXQt are built on Openbox; older GNOME and KDE configurations sometimes used it
  • Easy starting point — closer to a “normal” desktop than tiling WMs

Installing and Configuring Openbox

$ sudo apt install openbox obconf obmenu

Configuration files in ~/.config/openbox/:

  • rc.xml — keybindings, window behavior, mouse behavior
  • menu.xml — the right-click desktop menu
  • autostart — applications to launch at startup

Desktop Environment vs. Standalone WM: Comparison

Aspect Desktop Environment Standalone Window Manager
Out-of-box experience Complete, immediately usable Minimal — requires significant configuration
Resource usage Higher (hundreds of background processes) Very low (WM + only what you add)
Configuration method Graphical settings panels Text config files (and knowing what to add)
Consistency Integrated look and feel Mix-and-match from different projects
Learning curve Low to medium High — must build entire setup
Customization ceiling Limited by DE design Essentially unlimited
Target user Most Linux users Power users, minimalists, enthusiasts
Boot time Longer (more services) Faster (fewer components)
Application ecosystem Integrated DE apps Any apps from any source
Typical RAM at idle 500MB–1.5GB 100–300MB

Practical Considerations: Which to Choose?

Choose a Desktop Environment if:

  • You want to be productive immediately without extensive configuration
  • You use your system for general computing: browsing, email, office work
  • You are newer to Linux and want a consistent, supported experience
  • You want polished touchpad gestures, HiDPI support, and modern platform integration
  • System administration is not your primary focus

Choose a Standalone Window Manager if:

  • You want complete control over every aspect of your environment
  • Resource efficiency matters — older hardware, or you want every cycle for applications
  • You work primarily in the terminal and a few applications
  • You enjoy the process of building and optimizing your own setup
  • You use a tiling workflow and find DEs’ tiling implementations inadequate
  • You want to learn more deeply how the Linux graphical stack works

The Middle Ground: Mixing Components

Many users start with a desktop environment and selectively replace components:

  • Run KDE Plasma but replace KWin with i3 or a tiling script
  • Run XFCE but use i3 as the window manager (XFCE supports replacing xfwm4)
  • Use GNOME but add extensive tiling extensions (Pop Shell, PaperWM, gTile)
  • Run Openbox with a panel and application launcher for a near-DE experience

This approach captures some benefits of both: more control than a full DE with less configuration burden than a pure standalone WM.

Popular Standalone Window Manager Quick Reference

Window Manager Type Display Server Language Typical RAM Best For
i3 Tiling X11 C ~50 MB Keyboard-driven workflow, wide community
Sway Tiling Wayland C ~50 MB i3 users moving to Wayland
Openbox Stacking X11 C ~15 MB Traditional layout, minimal setups
dwm Tiling X11 C (patched) ~5 MB Extreme minimalism, patching your WM
awesome Dynamic X11 C + Lua ~40 MB Lua-configured, flexible layouts
bspwm Tiling X11 C ~15 MB Binary space partitioning layout
Hyprland Tiling Wayland C++ ~80 MB Visual effects + tiling on Wayland
qtile Dynamic X11/Wayland Python ~50 MB Python-configured, scripting enthusiasts
Fluxbox Stacking X11 C++ ~15 MB Tab-grouped windows, fast

Getting Started with a Window Manager

If you are curious about trying a standalone window manager without committing to it as your primary environment:

Step 1: Install the WM alongside your current DE:

$ sudo apt install i3    # Install i3 alongside your current DE

Step 2: Log out, select i3 at the login screen, log in

Step 3: Learn the basics:

  • $mod+Enter — open terminal
  • $mod+d — open application launcher (dmenu)
  • $mod+Shift+q — close window
  • $mod+1 through $mod+9 — switch workspaces
  • $mod+Shift+e — exit i3

Step 4: Read the documentation: The i3 User’s Guide (i3wm.org/docs/userguide.html) is comprehensive and well-written. Most questions about i3 configuration have answers there.

Step 5: Gradually customize: Start with the default configuration and add customizations as you encounter things you want to change. The community has extensive “dotfile” repositories showing complete i3 configurations for inspiration.

Conclusion: Freedom at Every Level

The distinction between window managers and desktop environments reflects one of Linux’s fundamental characteristics: it is a system assembled from replaceable, composable components rather than a monolithic product. You can use the integrated experience of GNOME or KDE, the minimal efficiency of i3 or Sway, or anything in between.

For most Linux users, a desktop environment provides the right balance of features, polish, and ease of use. For power users, enthusiasts, and those who derive satisfaction from crafting their own tools, a standalone window manager offers a level of control and efficiency that no desktop environment can match.

Understanding what window managers do and how they relate to desktop environments gives you a more complete mental model of the Linux graphical stack. Even if you never run i3 or Openbox, knowing that the window manager is a distinct, replaceable layer explains why GNOME and KDE have such different feels despite both running on the same kernel and display server. The window manager is the layer that determines the character of your desktop — and on Linux, you can always swap it for something else.

Hot this week

C++ Performance Profiling and Optimization Techniques

Master C++ performance optimization. Learn how to profile code, eliminate bottlenecks, leverage CPU caches, use Google Benchmark, and apply modern C++ techniques for maximum speed.

Implementing Design Patterns in Modern C++: A Complete Guide

Discover how modern C++ (C++11/14/17/20) revolutionizes classic GoF design patterns. Learn to write safer, cleaner, and more efficient code using smart pointers, lambdas, concepts, and std::variant.

SIMD Programming in C++: A Comprehensive Guide to Vectorization

SIMD (Single Instruction, Multiple Data) programming in C++ is...

Writing Cache-Friendly C++ Code

Learn to write cache-friendly C++ code — understand CPU caches, cache lines, spatial and temporal locality, data-oriented design, struct layout, false sharing, and how to measure cache performance.

Understanding Undefined Behavior in C++

Master C++ undefined behavior — learn what it is, the most dangerous forms (signed overflow, null dereference, data races, UB in templates), how compilers exploit it, and how to detect and eliminate it.

Topics

C++ Performance Profiling and Optimization Techniques

Master C++ performance optimization. Learn how to profile code, eliminate bottlenecks, leverage CPU caches, use Google Benchmark, and apply modern C++ techniques for maximum speed.

Implementing Design Patterns in Modern C++: A Complete Guide

Discover how modern C++ (C++11/14/17/20) revolutionizes classic GoF design patterns. Learn to write safer, cleaner, and more efficient code using smart pointers, lambdas, concepts, and std::variant.

SIMD Programming in C++: A Comprehensive Guide to Vectorization

SIMD (Single Instruction, Multiple Data) programming in C++ is...

Writing Cache-Friendly C++ Code

Learn to write cache-friendly C++ code — understand CPU caches, cache lines, spatial and temporal locality, data-oriented design, struct layout, false sharing, and how to measure cache performance.

Understanding Undefined Behavior in C++

Master C++ undefined behavior — learn what it is, the most dangerous forms (signed overflow, null dereference, data races, UB in templates), how compilers exploit it, and how to detect and eliminate it.

CMake Mastery: Modern C++ Build Systems

Master CMake for modern C++ projects — learn targets, properties, find_package, FetchContent, generator expressions, testing with CTest, and professional project structure.

Building Cross-Platform C++ Applications

Learn to build cross-platform C++ applications — handle OS differences, use CMake, manage compiler quirks, abstract platform APIs, write portable code, and test on multiple targets.

Coroutines in C++20: Asynchronous Programming

Master C++20 coroutines — learn co_await, co_yield, co_return, promise types, awaitables, generators, and how to build async tasks and lazy sequences without callback hell.

Related Articles

Popular Categories