Extended Window Manager Hints, a.k.a. NetWM,[1] 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 _NET_
.
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:
- Withdrawn,
- Normal,
- Iconic.
In addition it supports an Urgent
flag
to request user attention.
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.
List of window managers that support Extended Window Manager Hints
Tiling and dynamic window managers
Stacking window managers
Other window managers
- Enlightenment (E16 and E17)
- evilwm
- interfacewm
- matchbox
- Sawfish (not completely)
- wmfs
- Xfwm[16]
Notes and references
- ↑ "Net WM - Blackbox". Archived from the original on 2007-10-01. Retrieved 2007-09-29.
- ↑ "polachok/echinus: README - 3. About panels and pagers". GitHub. Retrieved 2022-08-19.
- ↑ "i3 _NET_SUPPORTED". GitHub. Retrieved 2021-02-14.
- ↑ "Fixed _NET_SUPPORTING_WM_CHECK and _NET_SUPPORTED property setup". GitHub. Retrieved 2022-08-19.
- ↑ "What is subtle?". Retrieved 2022-08-19.
- ↑ "BurntSushi/wingo: COMPLIANCE - EWMH". GitHub. Retrieved 2022-08-19.
- ↑ "Blackbox COMPLIANCE". GitHub. Retrieved 2021-02-15.
- ↑ "ctwm 4.0.0 changes".
- ↑ "Fluxbox EWMH Support". Retrieved 2009-09-09.
- ↑ "Extended Window Manager Hints Support For FVWM".
- ↑ "FVWM - Features".
- ↑ "IceWM COMPLIANCE". GitHub. Retrieved 2020-12-28.
- ↑ "joewing.net | JWM EWMH Support". Retrieved 2021-02-15.
- ↑ "Metacity COMPLIANCE". Retrieved 2021-02-15.
- ↑ "Openbox COMPLIANCE". GitHub. Retrieved 2021-02-15.
- ↑ xfwm4 standards