Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: multihead
Andrew Gallant January 11, 2012
file 105 lines (77 sloc) 4.836 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
This is the multihead branch of Openbox, which features better support for
multiple monitors when using the Xinerama extension. (Which will implicitly
support users using TwinView and RandR.)

What's different?
=================

The biggest difference by far is the change in the desktop model.

In traditional Openbox (and indeed, in most window managers), there can only be
one desktop viewable at any time. Namely, even when there are multiple monitors
active, a single desktop spans all available monitors.

In Openbox Multihead, each monitor gets it own desktop. Namely, monitors can
switch its currently active desktop independent of the other monitors. This
makes workflow much more dynamic in multi-monitor setups, since it allows finer
control over what you can see at any point in time.

There is a price to pay, however; to make "independent desktops" work, Openbox
needs to break the Extended Window Manager Hints spec. In particular, it
violates the assumption that one and only one desktop is viewable at any point
in time. This results in a significant loss of functionality in existing
pagers. (They won't break, but what it shows you will be confusing.)

To remedy this, I've developed a GTK based Python pager that is compatible
with Openbox Multihead. (It will also work well with any Openbox installation
on a single monitor, but not with plain Openbox on multiple monitors.) It
supports typical pager operations, and its display is highly customizable.
(Position on screen, size, orientation, fonts, colors, etc.)

It also provides a mechanism for dynamic workspace allocation, similar to the
DynamicWorkspaces extension to Xmonad in xmonad-contrib. Finally, the
keybindings are in a Python configuration file, which means workspace switching
is *highly* customizable. (It comes with a sane default configuration, but some
aptitude in Python is required to customize it further.)

There is also a version of pytyle available that works with Openbox Multihead.
It provides rudimentary on-demand tiling support.

The aforementioned programs are available separately, named pager-multihead and
pytyle 3 respectively. If you are an Archlinux user, they are in the AUR.


A new desktop list menu
=======================

Another downside of independent desktops is that it makes the "next/prev
desktop" functions a bit quirky. To help remedy this, there is a new menu
called 'desktop-list-menu' that will give a simple list of desktops; which
provides a simple mechanism of switching to any desktop.


New configuration options
=========================

Greedy desktop switching
------------------------
In the "<desktops>" section, a new boolean option "<greedy>" has been added.
When it is enabled, it makes desktop switching "greedy." In particular, if you
are switching to a desktop that is already visible, instead of going to the
monitor that desktop is on, the desktop will be brought to the monitor you are
currently on (and will put the current desktop on the other monitor).


Monitor focus follows mouse
---------------------------
By popular demand, the currently active monitor can now be switched just by
moving your mouse to that monitor. It is enabled by default. The option
"<monitorFollowMouse>" found in the "<focus>" section can be disabled.


Scale windows when a workspace goes to a new monitor
----------------------------------------------------
Whenever a workspace gets moved to another monitor, windows had their width
and height scaled to reflect the change in monitor size (if any). This may be
undesirable, so a new option '<scaleWindows>' has been added to the
'<placement>' section. It is now disabled


A new action 'FocusRoot'
------------------------
Openbox already provides one the ability of moving clients to another monitor
via the 'MoveResizeTo' action, but it does not provide the ability to move
*focus* from one monitor to the next. This is precisely what 'FocusRoot'
provides.

It has two child options, "<monitor>" and "<pointer>". The former is required
and the latter is optional. The former specifies a monitor index starting from
1, or a relative monitor position ("next" or "prev").

The "<pointer>" option allows you to move the pointer with the focus. It takes
two child options "<x>" and "<y>". They should be specified relative to the
monitor being focused. Negative values are allowed.


Transparent inactive windows (easter egg)
-----------------------------------------
In the "<focus>" section, a new option "<inactiveOpacity>" has been added. Its
value should be interpreted as a percentage where 100 is full opaqueness (and
disables the feature) and 0 is full transparency (invisible).

This option simply sets the opacity level of all inactive windows. You'll need
a compositing manager for it to actually work, though.

Something went wrong with that request. Please try again.