A Wayland window-stacking compositor https://labwc.github.io
Find a file
Jan Beich b997d8e793 meson: unbreak with system wlroots after fd4ea3542f
meson.build:50:2: ERROR: All keyword arguments must be after positional arguments.
2021-04-15 22:21:06 +01:00
docs theme: update built-in theme colors 2021-04-10 19:30:39 +01:00
include theme: move title_height to theme struct 2021-04-15 20:13:49 +01:00
protocols Merge branch 'master' into output-management 2021-02-28 13:11:33 -05:00
src xdg: fix subsurface damage bug 2021-04-15 20:37:57 +01:00
.gitignore desktop: rename desktop_cycle_view() 2020-10-31 14:46:33 +00:00
LICENSE Initial commit 2019-05-11 21:21:58 +01:00
meson.build meson: unbreak with system wlroots after fd4ea3542f 2021-04-15 22:21:06 +01:00
meson_options.txt Add man-pages option like swaywm/sway@ba16f16e4d 2021-03-04 06:35:15 +00:00
NEWS.md NEWS.md: fix typo 2021-04-15 21:49:52 +01:00
README.md README: remove old scrot 2021-04-15 21:32:14 +01:00

labwc

1. What is this?

Labwc is a wlroots-based stacking compositor for Wayland.

It aims to be light-weight and independent, with a focus on simply stacking windows well and rendering some window decorations. Where practicable, it uses clients for wall-paper, panels, screenshots, and so on.

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 syntax and theme variable names, openbox-3.4 specification is used. This does not mean that labwc is an openbox clone. In fact, as a Wayland compositor it will be quite different in areas, and the acceptance criteria only lists ca 40% of openbox features.

Parsing GTK3 and Qt themes for window decorations is quite complicated, so using the much simpler openbox specification makes sense for a simple compositor such as labwc.

Video (3:42)

2. Build

meson build/
ninja -C build/

Dependencies include:

  • meson, ninja, gcc/clang
  • wlroots (>=0.13.0 or 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.

3. Install

See wiki/Install.

4. Configure

Labwc uses the files listed below for configuration and theming.

file user over-ride location man page
rc.xml ~/.config/labwc/ labwc-config(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)

See also labwc(1) and labwc-actions(5)

5. Run

./build/labwc [-s <command>]

Click on the background to launch a menu.

If you have not created an rc.xml configuration file, default keybinds will be:

  • Alt-tab: cycle window
  • Alt-F3: launch bemenu
  • Alt-escape: exit

6. Integrate

Suggested apps to use with labwc:

7. Acceptance Criteria

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.

In order to define what 'small feature set' means, refer to the lists of complete and outstanding items.

For more details, see the full table of acceptance criteria.

High-level summary of progress:

  • Optionally support xwayland
  • Parse openbox config files (rc.xml, autostart, environment)
  • Parse openbox themes files and associated xbm icons
  • Support maximize, iconify, close buttons
  • Catch SIGHUP to re-load config file and theme
  • Support layer-shell protocol
  • Support damage tracking to reduce CPU usage
  • Parse menu.xml to generate a basic root-menu
  • Support wlr-output-management protocol
  • Support HiDPI
  • Support foreign-toplevel protocol (e.g. to integrate with wlroots panels/bars)
  • Support on-screen display (osd), for example to support alt-tab window list
  • Support libinput configuration (tap is enabled for the time being)

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).