I’ve been satisfied with pure tiling window managers for the past decade, but I recently used Openbox on a friends machine and I’ve instantly realized that it was a better way.
I’m not ready to give up on the benefits of tiling entirely however and I’ve tried to setup my workstation as a hybrid tiling/stacking setup which I’ve described below.
What is Openbox?
Openbox is a stacking window manager that comes as part of the LXDE desktop.
In contrast to widely-used lightweight tiling window managers, LXDE comes ’opinionated’ with a traditional menu and generally adheres to the desktop metaphor found on OSX and Windows.
Openbox is primarily configured with an XML file that dictates both keyboard and mouse bindings, while also allowing you to control window decoration, defaults, etc.
Many larger Linux applications introduce a way to start their programs into a “start menu”, categorized by application ’type’. Menus eliminate the problem of unknown unknowns - programs you’ve once installed but forgotten or came included with another program you installed.
If you use a distribution which frequently integrates the newest changes in Linux, sometimes you can miss new tooling if you don’t have a menu which lists all the installed graphical applications on your system. As a matter of using Openbox, I found out that the firewall I’ve been configuring through a CLI for years has an extremely sophisticated GUI - found through a menu entry.
It’s possible to get a bar in any tiling window manager, but I’m partial to
LXDE has gone to considerable lengths to preserve some degree of
compatibility with the interface guidelines and standards set forth by
organizations like the GNOME Project, which means you no longer need to get
inside of your
xinitrc to start up the appropriate services.
Which brings me to the final point.
libnotify, there’s a lot of stuff under the hood of a modern
If you want to go the “lightweight” route, you’ve got to prepare yourself
for quite a bit. You’ll need to install and configure a notification daemon,
you’ll need to make sure to start NetworkManager,
abrt. You’ll need to test
to make sure that
secon notifications are getting triggered in the event
that SELinux wants to let you know something is amiss. You’ll need to have
keybindings for handling
🔇, not to mention the host of other
specialized keys on a modern keyboard. Using existing tooling from a
configuration panel like
gnome-control-center will occassionally fail for
important pieces of your system like monitors and bluetooth.
Yes, you can write the dunst configuration, you can use
your keys, write the unit file to accommodate
gnome-keyring-daemon, along with
the shell protocol. You can dive through poorly documented code that doesn’t really
contain any special insights into computers.
There’s something vaguely neat about learning the details of all this. I did
it and I have a large dotfiles repo that bears witness to this vast network
of rc files,
$XDG_CONFIG and shell scripts I’ve assembled over the past
I’m ready for another way however.
If you want to directly use my configuration, you can find my openbox configuration here
I use the symbol “
🗔” below to mean Super (also known as the ’Windows’ key).
LXDE includes the concept of a desktop, a workspace that isolates the windows from each other.
I maintain 8 desktops, each bound to one of the keys above the home row, with
p key used to invoke dmenu.
Typically, I keep a particular application associated with each desktop like the following. This allows switching between unrelated applications like emacs and slack very quickly.
|u||book / pdf|
Pressing shift with any of these keys causes your current window to be moved to that desktop.
🗔-Shift-o moves the currently focused window to the
||Move to desktop #1|
||Move to desktop #2|
||Move to desktop #3|
||Move to desktop #4|
||Move to desktop #5|
||Move to desktop #6|
||Move to desktop #7|
||Move to desktop #8|
||Move to desktop #9|
A desktop typically has one application (“window”), but more can be split into a number of adjacent windows, toggled between horizontal & vertical splits (as well as returned to full-screen configuration).
Windows each have ’focus’, which refers to which application recieved input when keys are pressed on the keyboard. Both position & window focus can be switched with the classic Vi HJKL keybindings described below.
Pressing shift with any of these keys causes your currently focused window to be swapped with the window in the direction you specified.
🗔-Shift-o moves the currently focused window to the
For example, this is a desktop that begins with a window ’documentation’ and
a focused window ’terminal’ (indicated by
🗔-Shift-h swaps their position.
||Switch focus to left window|
||Switch focus to right window|
||Switch focus to upper window|
||Switch focus to lower window|
||Toggle horiz/vert split|
The most important final key is
🗔-p which runs dmenu.
dmenu (“dynamic menu”) autocompletes system binaries and invokes them when ⏎ is hit.
If I wanted to spawn
google-chrome, I might type in
goo and dmenu would
show something like the following.
I could hit ⏎ (return) and Chrome would start, I could also select other binaries with left/right keys as well.