basic_wm is a simple reparenting, non-compositing X window manager that demonstrates how to implement the fundamental functionality of a window manager:
- Managing the life cycle of windows
- Reparenting windows
- Basic window operations (moving, resizing, closing)
It serves as a pedagogical example for my series of articles, How X Window Managers Work, And How To Write One.
To build this example window manager, you will need:
- A C++-11 enabled C++ compiler
- GNU Make
- Xlib headers and libraries
- google-glog library
To run and test it, you will need:
- Xephyr
xinit
- Random X utilities such as
xclock
,xeyes
, andxterm
to play with
On Ubuntu/Debian, you can install these dependencies with:
sudo apt-get install \
build-essential libx11-dev libgoogle-glog-dev \
xserver-xephyr xinit x11-apps xterm
On Fedora/CentOS, you can install these with:
sudo yum install \
make gcc gcc-c++ libX11-devel glog-devel \
xorg-x11-server-Xephyr xorg-x11-apps xterm
On Arch Linux, you can install these with:
yaourt -S base-devel libx11 google-glog \
xorg-server-xephyr xorg-xinit xorg-xclock xorg-xeyes xterm
Consult your own distro's documentation for how to install these.
Once you have all the dependencies, building and running it is as simple as:
./build_and_run.sh
This will launch a simple Xephyr session like in the following screenshot:
Supported keyboard shortcuts:
- Alt + Left Click: Move window
- Alt + Right Click: Resize window
- Alt + F4: Close window
- Alt + Tab: Switch window