The ewmh python module

This module intends to provide an implementation of Extended Window Manager Hints, based on the Xlib modules for python.

See the freedesktop.org specification for more information.

EWMH class

class ewmh.ewmh.EWMH(_display=None, root=None)

This class provides the ability to get and set properties defined by the EWMH spec.

Each property can be accessed in two ways. For example, to get the active window:

win = ewmh.getActiveWindow()
# or: win = ewmh.getProperty('_NET_ACTIVE_WINDOW')

Similarly, to set the active window:

ewmh.setActiveWindow(myWindow)
# or: ewmh.setProperty('_NET_ACTIVE_WINDOW', myWindow)

When a property is written, don’t forget to really send the notification by flushing requests:

ewmh.display.flush()
Parameters
  • _display – the display to use. If not given, Xlib.display.Display() is used.

  • root – the root window to use. If not given, self.display.screen().root is used.

NET_WM_ACTIONS = ('_NET_WM_ACTION_MOVE', '_NET_WM_ACTION_RESIZE', '_NET_WM_ACTION_MINIMIZE', '_NET_WM_ACTION_SHADE', '_NET_WM_ACTION_STICK', '_NET_WM_ACTION_MAXIMIZE_HORZ', '_NET_WM_ACTION_MAXIMIZE_VERT', '_NET_WM_ACTION_FULLSCREEN', '_NET_WM_ACTION_CHANGE_DESKTOP', '_NET_WM_ACTION_CLOSE', '_NET_WM_ACTION_ABOVE', '_NET_WM_ACTION_BELOW')

List of strings representing all known window actions.

NET_WM_STATES = ('_NET_WM_STATE_MODAL', '_NET_WM_STATE_STICKY', '_NET_WM_STATE_MAXIMIZED_VERT', '_NET_WM_STATE_MAXIMIZED_HORZ', '_NET_WM_STATE_SHADED', '_NET_WM_STATE_SKIP_TASKBAR', '_NET_WM_STATE_SKIP_PAGER', '_NET_WM_STATE_HIDDEN', '_NET_WM_STATE_FULLSCREEN', '_NET_WM_STATE_ABOVE', '_NET_WM_STATE_BELOW', '_NET_WM_STATE_DEMANDS_ATTENTION')

List of strings representing all known window states.

NET_WM_WINDOW_TYPES = ('_NET_WM_WINDOW_TYPE_DESKTOP', '_NET_WM_WINDOW_TYPE_DOCK', '_NET_WM_WINDOW_TYPE_TOOLBAR', '_NET_WM_WINDOW_TYPE_MENU', '_NET_WM_WINDOW_TYPE_UTILITY', '_NET_WM_WINDOW_TYPE_SPLASH', '_NET_WM_WINDOW_TYPE_DIALOG', '_NET_WM_WINDOW_TYPE_DROPDOWN_MENU', '_NET_WM_WINDOW_TYPE_POPUP_MENU', '_NET_WM_WINDOW_TYPE_NOTIFICATION', '_NET_WM_WINDOW_TYPE_COMBO', '_NET_WM_WINDOW_TYPE_DND', '_NET_WM_WINDOW_TYPE_NORMAL')

List of strings representing all known window types.

getActiveWindow()

Get the current active (toplevel) window or None (property _NET_ACTIVE_WINDOW)

Returns

Window object or None

getClientList()

Get the list of windows maintained by the window manager for the property _NET_CLIENT_LIST.

Returns

list of Window objects

getClientListStacking()

Get the list of windows maintained by the window manager for the property _NET_CLIENT_LIST_STACKING.

Returns

list of Window objects

getCurrentDesktop()

Get the current desktop number (property _NET_CURRENT_DESKTOP)

Returns

int

getDesktopGeometry()

Get the desktop geometry (property _NET_DESKTOP_GEOMETRY) as an array of two integers [width, height].

Returns

[int, int]

getDesktopViewPort()

Get the current viewports of each desktop as a list of [x, y] representing the top left corner (property _NET_DESKTOP_VIEWPORT).

Returns

list of [int, int]

getNumberOfDesktops()

Get the number of desktops (property _NET_NUMBER_OF_DESKTOPS).

Returns

int

getProperty(prop, *args, **kwargs)

Get the value of a property. See the corresponding method for the required arguments. For example, for the property _NET_WM_STATE, look for getWmState()

getReadableProperties()

Get all the readable properties’ names

getShowingDesktop()

Get the value of “showing the desktop” mode of the window manager (property _NET_SHOWING_DESKTOP). 1 means the mode is activated, and 0 means deactivated.

Returns

int

getWmAllowedActions(win, str=False)

Get the list of allowed actions for the given window (property _NET_WM_ALLOWED_ACTIONS).

Parameters
  • win – the window object

  • str – True to get a list of string allowed actions instead of int

Returns

list of (int|str)

getWmDesktop(win)

Get the current desktop number of the given window (property _NET_WM_DESKTOP).

Parameters

win – the window object

Returns

int

getWmName(win)

Get the property _NET_WM_NAME for the given window as a string.

Parameters

win – the window object

Returns

str

getWmPid(win)

Get the pid of the application associated to the given window (property _NET_WM_PID)

Parameters

win – the window object

getWmState(win, str=False)

Get the list of states of the given window (property _NET_WM_STATE).

Parameters
  • win – the window object

  • str – True to get a list of string states instead of int

Returns

list of (int|str)

getWmVisibleName(win)

Get the property _NET_WM_VISIBLE_NAME for the given window as a string.

Parameters

win – the window object

Returns

str

getWmWindowType(win, str=False)

Get the list of window types of the given window (property _NET_WM_WINDOW_TYPE).

Parameters
  • win – the window object

  • str – True to get a list of string types instead of int

Returns

list of (int|str)

getWorkArea()

Get the work area for each desktop (property _NET_WORKAREA) as a list of [x, y, width, height]

Returns

a list of [int, int, int, int]

getWritableProperties()

Get all the writable properties names

setActiveWindow(win)

Set the given window active (property _NET_ACTIVE_WINDOW)

Parameters

win – the window object

setCloseWindow(win)

Close the given window (property _NET_CLOSE_WINDOW)

Parameters

win – the window object

setCurrentDesktop(i)

Set the current desktop (property _NET_CURRENT_DESKTOP).

Parameters

i – the desired desktop number

setDesktopGeometry(w, h)

Set the desktop geometry (property _NET_DESKTOP_GEOMETRY)

Parameters
  • w – desktop width

  • h – desktop height

setDesktopViewport(w, h)

Set the viewport size of the current desktop (property _NET_DESKTOP_VIEWPORT)

Parameters
  • w – desktop width

  • h – desktop height

setMoveResizeWindow(win, gravity=0, x=None, y=None, w=None, h=None)

Set the property _NET_MOVERESIZE_WINDOW to move or resize the given window. Flags are automatically calculated if x, y, w or h are defined.

Parameters
  • win – the window object

  • gravity – gravity (one of the Xlib.X.*Gravity constant or 0)

  • x – int or None

  • y – int or None

  • w – int or None

  • h – int or None

setNumberOfDesktops(nb)

Set the number of desktops (property _NET_NUMBER_OF_DESKTOPS).

Parameters

nb – the number of desired desktops

setProperty(prop, *args, **kwargs)

Set the value of a property by sending an event on the root window. See the corresponding method for the required arguments. For example, for the property _NET_WM_STATE, look for setWmState()

setShowingDesktop(show)

Set/unset the mode Showing desktop (property _NET_SHOWING_DESKTOP)

Parameters

show – 1 to set the desktop mode, else 0

setWmDesktop(win, i)

Move the window to the desired desktop by changing the property _NET_WM_DESKTOP.

Parameters
  • win – the window object

  • i – desired desktop number

setWmName(win, name)

Set the property _NET_WM_NAME

Parameters
  • win – the window object

  • name – desired name

setWmState(win, action, state, state2=0)

Set/unset one or two state(s) for the given window (property _NET_WM_STATE).

Parameters
  • win – the window object

  • action – 0 to remove, 1 to add or 2 to toggle state(s)

  • state (int or str (see NET_WM_STATES)) – a state

  • state2 (int or str (see NET_WM_STATES)) – a state or 0

setWmVisibleName(win, name)

Set the property _NET_WM_VISIBLE_NAME

Parameters
  • win – the window object

  • name – desired visible name

Examples

These examples are tested on gnome.

Exemple to set the active window in fullscreen mode:

from ewmh import EWMH
ewmh = EWMH()

# get the active window
win = ewmh.getActiveWindow()

# list all possible names states:
# print EWMH.NET_WM_STATES

# set the state on win
ewmh.setWmState(win, 1, '_NET_WM_STATE_FULLSCREEN')

# flush request
ewmh.display.flush()

Exemple to move every iceweasel windows on desktop 2:

from ewmh import EWMH
ewmh = EWMH()

# get every displayed windows
wins = ewmh.getClientList()

# get every iceweasel windows, by looking their class name:
icewins = filter(lambda w: w.get_wm_class()[1] == 'Iceweasel', wins)

# move them to desktop 2 (desktop numbering starts from 0):
for w in icewins:
  ewmh.setWmDesktop(w, 1)

# flush requests
ewmh.display.flush()

Example trying to close every windows on desktop 2:

from ewmh import EWMH
ewmh = EWMH()

# get every displayed windows on desktop 2:
wins = filter(lambda w: ewmh.getWmDesktop(w) == 1, ewmh.getClientList())

# trying to close them:
for w in wins:
  ewmh.setCloseWindow(w)

# flush requests
ewmh.display.flush()