Extended Window Manager Hints

Extended Window Manager Hints, a.k.a. NetWM, is an X Window System standard for the communication between window managers and applications. It builds on the functionality of the Inter-Client Communication Conventions Manual (ICCCM).

These standards formulate protocols for the mediation of access to shared X resources, like the screen and the input focus. Applications request access, while the window manager grants or denies it. Communication occurs via X properties and client messages. The EWMH is a comprehensive set of protocols to implement a desktop environment. It defines both required and optional protocols. The window manager may choose to implement virtual desktops or a layered stacking order, but if it does, then the EWMH defines how this is communicated.

Protocol overview
All EWMH protocol identifiers start with the five letter prefix.

Root window properties
The WM must update a set of properties on the root window:
 * _NET_SUPPORTED : lists all the EWMH protocols supported by this WM.
 * _NET_CLIENT_LIST : lists all application windows managed by this WM.
 * _NET_NUMBER_OF_DESKTOPS : indicates the number of virtual desktops.
 * _NET_DESKTOP_GEOMETRY : defines the common size of all desktops.
 * _NET_DESKTOP_VIEWPORT : defines the top left corner of each desktop.
 * _NET_CURRENT_DESKTOP : gives the index of the current desktop.
 * _NET_DESKTOP_NAMES : lists the names of all virtual desktops.
 * _NET_ACTIVE_WINDOW : gives the currently active window.
 * _NET_WORKAREA : contains a geometry for each desktop.
 * _NET_SUPPORTING_WM_CHECK : gives the window of the active WM.
 * _NET_VIRTUAL_ROOTS : if the WM supports virtual root windows.
 * _NET_DESKTOP_LAYOUT : shows the layout of the active pager.
 * _NET_SHOWING_DESKTOP : is 1 for "showing the desktop" mode.

Client messages
An application may send client messages to a window manager:
 * _NET_WM_STATE : to change the state of an application window.
 * _NET_ACTIVE_WINDOW : to activate an application window.
 * _NET_SHOWING_DESKTOP : toggles display of application windows.
 * _NET_CLOSE_WINDOW : to close an application window.
 * _NET_WM_MOVERESIZE : to interactively resize an application window.
 * _NET_MOVERESIZE_WINDOW : to immediately resize an application window.
 * _NET_REQUEST_FRAME_EXTENTS : consults frame border dimensions.
 * _NET_WM_FULLSCREEN_MONITORS : defines the monitors for a fullscreen window.

If the WM supports window stacking:
 * _NET_RESTACK_WINDOW : asks to change the stacking order for a window.

If the WM supports virtual desktops:
 * _NET_CURRENT_DESKTOP : changes the current desktop.
 * _NET_NUMBER_OF_DESKTOPS : changes the number of desktops.

A WM may choose to ignore these messages:
 * _NET_DESKTOP_GEOMETRY : changes the dimension of all desktops.
 * _NET_DESKTOP_VIEWPORT : changes the viewport for the current desktop.

Window properties
The EWMH defines these application window properties:
 * _NET_WM_NAME : the title of the window.
 * _NET_WM_VISIBLE_NAME : the window title as shown by the WM.
 * _NET_WM_ICON_NAME : the title of the icon.
 * _NET_WM_VISIBLE_ICON_NAME : the icon title as shown by the WM.
 * _NET_WM_DESKTOP : the desktop the window is in.
 * _NET_WM_WINDOW_TYPE : the functional type of the window.
 * _NET_WM_STATE : the current window state.
 * _NET_WM_ALLOWED_ACTIONS : a list of supported user operations.
 * _NET_WM_STRUT : if the window wishes to reserve space at the edge.
 * _NET_WM_STRUT_PARTIAL : reserved space details at the screen edge.
 * _NET_WM_ICON_GEOMETRY : the geometry of a possible icon.
 * _NET_WM_ICON : an array of possible icons for the client.
 * _NET_WM_PID : the process ID of the client owning this window.
 * _NET_WM_HANDLED_ICONS : whether a pager provides icons.
 * _NET_WM_USER_TIME : time of last user activity in this window.
 * _NET_WM_USER_TIME_WINDOW : the window which shows user activity.
 * _NET_FRAME_EXTENTS : the left, right, top and bottom frame sizes.
 * _NET_WM_OPAQUE_REGION : which window regions are fully opaque.
 * _NET_WM_BYPASS_COMPOSITOR : requests that the window is uncomposited.

Window states
The ICCCM defines only three distinct states a window can be in: In addition it supports an  flag to request user attention.
 * 1) Withdrawn,
 * 2) Normal,
 * 3) Iconic.

The EWMH defines thirteen window state flags:
 * Above: show the window above others,
 * Below: show the window below others,
 * DemandsAttention: same as the urgent flag,
 * Focused: the window has input focus,
 * Fullscreen: show the window fullscreen,
 * Hidden: the window is unmapped,
 * MaximizedHorizontal: the window is stretched horizontally,
 * MaximizedVertical: the window is stretched vertically,
 * Modal: the window is a modal popup,
 * Shaded: the window is rolled up,
 * SkipPager: the window should not be shown on a pager,
 * SkipTaskbar: the window should be ignored by a taskbar,
 * Sticky: the window should be shown on all virtual desktops.

Additional protocols

 * _NET_WM_PING : a WM can use this to test if a client is alive.
 * _NET_WM_SYNC_REQUEST : for synchronizing repaints when resizing.
 * _NET_WM_FULL_PLACEMENT : the WM will handle any window placement.

Tiling and dynamic window managers

 * aewm
 * awesome
 * bspwm
 * echinus
 * fvwm
 * goomwwm
 * herbstluftwm
 * i3
 * LeftWM
 * Notion
 * Qtile
 * spectrwm
 * subtle
 * Wingo
 * wmii
 * xmonad (needs to be turned on in the config)

Stacking window managers

 * Blackbox
 * Compiz
 * CTWM (as of 4.0.0 )
 * edewm
 * Fluxbox
 * FVWM (via a plugin prior to v2.4 and native support from v2.5)
 * IceWM
 * JWM
 * KWin
 * Metacity
 * Marco
 * Openbox

Other window managers

 * Enlightenment (E16 and E17)
 * evilwm
 * interfacewm
 * matchbox
 * Sawfish (not completely)
 * wmfs
 * Xfwm