Ruby bindings to control windows in EWMH and NetWM compatible X Window manager.


ruby-wmctrl is a C extended library, which uses glib and x11, and is not a program to parse the output of command "wmctrl".

On ubuntu 11.04, we should install the following packages.

apt-get install libx11-dev libglib2.0-dev libxmu-dev

Then we can install ruby-wmctrl from rubygems.

gem install ruby-wmctrl


Note that values of positions of windows aredifferent from those of original "wmctrl" and include frame sizes.


We load 'wmctrl' as below;

require 'wmctrl'

We get desktops and windows as follows;

pp WMCtrl.instance.desktops

We can specify search conditions of windows; for example,

pp => /^emacs/)

Usage (Basic method similar to the command "wmctrl")

ruby-wmctrl has some basic methods derived from wmctrl, but the author think that these methods may be changed in future release.

List windows

require 'wmctrl'
require 'pp'
wm = WMCtrl.instance
pp wm.list_windows

If you want to get properties of windows, you pass true as an argument.

pp wm.list_windows(true)

Activate a window

wm.action_window(window_id, :activate)

The method 'action_window' takes window ID as first argument. We can get window ID by the method 'list_windows'. The second argument of 'action_window' is an action that manages the window of window ID. The rest arguments are arguments of the action.

Close a window

wm.action_window(window_id, :close)

Move and resize a window

wm.action_window(window_id, :move_resize, 0, 100, 200, 500, 400)

The integers of the arguments means gravity, x coordinate, y coordinate, width, and height, respectively. That is,

wm.action_window(window_id, :move_resize, gravity, x, y, width, height)

Move window to a desktop

wm.action_window(window_id, :move_to_desktop, desktop_id)

Move wndow to current desktop

wm.action_window(window_id, :move_to_current)

List desktops

pp wm.list_desktops


ruby-wmctrl includes the command "rwmctrl", which imitates the command "wmctrl" but does not implement all functionalities of "wmctrl".





ruby-wmctrl is created from source code of wmctrl

The copyright of original wmctrl:

Author, current maintainer: Tomas Styblo Copyright (C) 2003


Takayuki YAMAGUCHI Copyright (C) 2011