A fork of danakj/openbox packaged for the NetLinux package repository, carrying a snap layouts patch on top of upstream.
This package:
https://packages.netlinux.co.uk/debian/pool/main/o/openbox/ — built for both
stable (Debian 12) and resolute (Ubuntu 26.04) from the netlinux branch.
All NetLinux packages: https://packages.netlinux.co.uk/ — browse the full package set, and the apt source and GPG key needed to install any of them.
Set up the apt source and GPG key as described on packages.netlinux.co.uk, then:
sudo apt install openboxNote that the distros ship openbox 3.6.1, which apt sorts above this build's
3.6-<build>netlinux1, so a plain install prefers the distro package. Pin it to
get this one:
sudo tee /etc/apt/preferences.d/netlinux-openbox >/dev/null <<'EOF'
Package: openbox
Pin: release o=NetLinux
Pin-Priority: 1001
EOF
sudo apt update && sudo apt install openboxHovering a window's maximize button pops up a grid of layout templates, in the manner of Windows 11. Each template is a miniature of the monitor split into zones; the zone under the pointer highlights, and clicking it moves and resizes the window to fill that part of the monitor's usable area.
Six layouts ship by default — halves, thirds, two-thirds + third, half + two stacked, quadrants, and top/bottom. Zones are measured against the monitor the window is on, minus any panels or docks reserving space there.
Configure it with a <snapLayouts> block in ~/.config/openbox/rc.xml, then
run openbox --reconfigure:
<snapLayouts>
<enabled>yes</enabled>
<delay>400</delay>
<layout>
<zone x="0" y="0" width="50" height="100"/>
<zone x="50" y="0" width="50" height="100"/>
</layout>
</snapLayouts>Zone positions and sizes are percentages of the monitor's usable area. Listing
any <layout> replaces the built-in set entirely. The implementation lives in
openbox/snap.c.
| Branch | Purpose |
|---|---|
netlinux |
The packaged branch. Upstream plus the snap layouts patch and the NetLinux CI workflows; every push builds and publishes both suites. |
upstream-snap-layouts |
The same patch rebased onto current upstream master, without the CI commits — the form intended for submission upstream. |
./bootstrap
./configure --prefix=/usr --sysconfdir=/etc
makeopenbox takes --config-file FILE to run against a config other than
~/.config/openbox/rc.xml or the system default, which is useful for trying
out rc.xml changes (like editing <snapLayouts>) without touching either.
Run it inside an Xnest/Xephyr nested display so it doesn't disturb your
real session:
Xnest :3 -geometry 1280x800 &
DISPLAY=:3 $PWD/openbox/openbox --config-file $PWD/data/rc.xml &
DISPLAY=:3 xterm & # or any client, to have a window to test againstUse an absolute path for --config-file — a relative one is resolved against
whatever directory the process happens to be started in, and if that doesn't
match, Openbox silently falls back to your normal ~/.config/openbox/rc.xml
or the system default instead of erroring, so the change appears to do
nothing.
--config-file only takes effect at startup, not on --reconfigure. After
editing the XML again, reload it with:
DISPLAY=:3 $PWD/openbox/openbox --reconfigurewhich re-reads from the same path the instance was started with.
Upstream's original README, covering the project itself, is in
README; see also README.GIT and
README.NLS.