Labwc stands for Lab Wayland Compositor, with lab indicating a sense of experimentation and treading new ground.
It is a wlroots-based stacking compositor aiming to be light-weight and independent, with a focus on simply stacking windows well and rendering some window decorations. It relies on clients for wall-paper, panels, screenshots, and so on to create a full desktop environment.
Labwc tries to stay in keeping with wlroots and sway in terms of general approach and coding style.
In order to avoid re-inventing configuration & theme syntax, openbox-3.4 specification is used. This does not mean that labwc is an openbox clone but rather that configuration files will look and feel familiar.
video link | date | content |
---|---|---|
Video (1:10) | 05-Aug-2021 | window gymnastics, theming and waybar |
Video (3:42) | 25-Feb-2021 | setting background and themes; xwayland/xdg-shell windows |
So far, labwc supports the following:
- Config files (rc.xml, autostart, environment)
- Theme files and xbm icons
- Damage tracking to reduce CPU usage
- A basic root-menu (configured with menu.xml)
- HiDPI
- wlr-output-management protocol
- layer-shell protocol
- foreign-toplevel protocol (e.g. to integrate with panels and bars)
- Optionally xwayland
meson build/
ninja -C build/
Dependencies include:
- meson, ninja, gcc/clang
- wlroots (master)
- wayland (>=1.19)
- wayland-protocols
- libinput (>=1.14)
- libxml2
- cairo, pango, glib-2.0
- xkbcommon
- xwayland, xcb (optional)
Disable xwayland with meson -Dxwayland=disabled build/
For further details see wiki/Build.
See wiki/Install.
Labwc uses the files listed below for configuration and theming.
file | user over-ride location | man page |
---|---|---|
rc.xml | ~/.config/labwc/ | labwc-config(5), labwc-actions(5) |
menu.xml | ~/.config/labwc/ | labwc-menu(5) |
autostart | ~/.config/labwc/ | labwc(1) |
environment | ~/.config/labwc/ | labwc-environment(5) |
themerc | ~/.local/share/themes/<theme-name>/openbox-3/ | labwc-theme(5) |
The example rc.xml has been kept simple. For all options and default values, see rc.xml.all
Configuration and theme files are re-loaded on receiving SIGHUP (e.g. killall -SIGHUP labwc
)
For keyboard settings, see environment and xkeyboard-config(7)
For themes, search the internet for "openbox themes" and place them in ~/.local/share/themes/
. Some good starting points include:
- https://github.com/addy-dclxvi/openbox-theme-collections
- https://github.com/the-zero885/Lubuntu-Arc-Round-Openbox-Theme
- https://bitbucket.org/archlabslinux/themes/
- https://github.com/BunsenLabs/bunsen-themes
./build/labwc [-s <command>]
Click on the background to launch a menu.
If you have not created an rc.xml config file, default binds will be:
combination | action |
---|---|
alt -tab |
activate next window |
alt -escape |
exit |
super -return |
alacritty |
alt -F3 |
bemenu |
alt -F4 |
close window |
super -a |
toggle maximize |
alt -mouse-left |
move window |
alt -mouse-right |
resize window |
alt -arrow |
move window to edge |
Suggested apps to use with labwc:
- Screen shooter: grim
- Screen recorder: wf-recorder
- Background image: swaybg
- Panel: waybar
- Launchers: bemenu, fuzzel, wofi
- Output managers: kanshi, wlr-randr
- Screen locker: swaylock
A lot of emphasis is put on code simplicy when considering features.
The main development effort if focused on producing a solid foundation for a stacking compositor rather than adding configuration and theming options.
See acceptance criteria for details.
High-level summary of items which are not inteded to be implemented:
- Icons (except window buttons)
- Animations
- Gradients for decoration and menus
- Any theme option not required to reasonably render common themes (it's amazing how few options are actually required).
Let's try to stick to this coding style