Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/Cloudef/wlc

High-level Wayland compositor library
https://github.com/Cloudef/wlc

Last synced: about 2 months ago
JSON representation

High-level Wayland compositor library

Awesome Lists containing this project

README

        

DEPRECATION NOTICE
------------------

wlc is officially deprecated. Interested users are encouraged to use `wlroots `_ instead.

FEATURES
--------

+------------------+-----------------------+
| Backends | DRM, X11, Wayland |
+------------------+-----------------------+
| Renderers | EGL, GLESv2 |
+------------------+-----------------------+
| Buffer API | GBM, EGL streams |
+------------------+-----------------------+
| TTY session | logind, legacy (suid) |
+------------------+-----------------------+
| Input | libinput, xkb |
+------------------+-----------------------+
| Monitor | Multi-monitor, DPMS |
+------------------+-----------------------+
| Hotplugging | udev |
+------------------+-----------------------+
| Xwayland | Supported |
+------------------+-----------------------+
| Clipboard | Partially working |
+------------------+-----------------------+
| Drag'n'Drop | Not implemented |
+------------------+-----------------------+

EXAMPLE
-------

.. code:: c

// For more functional example see example/example.c

#include
#include

static bool
view_created(wlc_handle view)
{
wlc_view_set_mask(view, wlc_output_get_mask(wlc_view_get_output(view)));
wlc_view_bring_to_front(view);
wlc_view_focus(view);
return true;
}

static void
view_focus(wlc_handle view, bool focus)
{
wlc_view_set_state(view, WLC_BIT_ACTIVATED, focus);
}

int
main(int argc, char *argv[])
{
wlc_set_view_created_cb(view_created);
wlc_set_view_focus_cb(view_focus);

if (!wlc_init())
return EXIT_FAILURE;

wlc_run();
return EXIT_SUCCESS;
}

ENV VARIABLES
-------------

``wlc`` reads the following env variables.

+-----------------------+-----------------------------------------------------+
| ``WLC_DRM_DEVICE`` | Device to use in DRM mode. (card0 default) |
+-----------------------+-----------------------------------------------------+
| ``WLC_BUFFER_API`` | Force buffer API to ``GBM`` or ``EGL``. |
+-----------------------+-----------------------------------------------------+
| ``WLC_SHM`` | Set 1 to force EGL clients to use shared memory. |
+-----------------------+-----------------------------------------------------+
| ``WLC_OUTPUTS`` | Number of fake outputs in X11/Wayland mode. |
+-----------------------+-----------------------------------------------------+
| ``WLC_XWAYLAND`` | Set 0 to disable Xwayland. |
+-----------------------+-----------------------------------------------------+
| ``WLC_LIBINPUT`` | Set 1 to force libinput. (Even on X11/Wayland) |
+-----------------------+-----------------------------------------------------+
| ``WLC_REPEAT_DELAY`` | Keyboard repeat delay. |
+-----------------------+-----------------------------------------------------+
| ``WLC_REPEAT_RATE`` | Keyboard repeat rate. |
+-----------------------+-----------------------------------------------------+
| ``WLC_DEBUG`` | Enable debug channels (comma separated) |
+-----------------------+-----------------------------------------------------+

KEYBOARD LAYOUT
---------------

You can set your preferred keyboard layout using ``XKB_DEFAULT_LAYOUT``.

See xkb documentation for more details.

RUNNING ON TTY
--------------

If you have ``logind``, you don't have to do anything.

Without ``logind`` you need to suid your binary to root user.
The permissions will be dropped runtime.

BUFFER API
----------

``wlc`` supports both ``GBM`` and ``EGL`` streams buffer APIs. The buffer API is auto-detected based on the driver used by the DRM device.

- ``GBM`` is supported by most GPU drivers except the NVIDIA proprietary driver.
- ``EGL`` is only supported by the NVIDIA proprietary. If you have a NVIDIA GPU using the proprietary driver you need to enable DRM KMS using the ``nvidia-drm.modeset=1`` kernel parameter.

You can force a given buffer API by setting the ``WLC_BUFFER_API`` environment variable to ``GBM`` or ``EGL``.

ISSUES
------

Submit issues on this repo if you are developing with ``wlc``.

As a user of compositor, report issues to their corresponding issue trackers.

BUILDING
--------

You will need following makedepends:

- cmake
- git

And the following depends:

- pixman
- wayland 1.7+
- wayland-protocols 1.7+ [1]
- libxkbcommon
- udev
- libinput
- libx11 (X11-xcb, Xfixes)
- libxcb (xcb-ewmh, xcb-composite, xcb-xkb, xcb-image, xcb-xfixes)
- libgbm (usually provided by mesa in most distros)
- libdrm
- libEGL (GPU drivers and mesa provide this)
- libGLESv2 (GPU drivers and mesa provide this)

1: Also bundled as submodule. To build from submodule use -DSOURCE_WLPROTO=ON.

And optionally:

- dbus (for logind support)
- systemd (for logind support)

For weston-terminal and other wayland clients for testing, you might also want to build weston from git.

You can build bootstrapped version of ``wlc`` with the following steps.

.. code:: sh

git submodule update --init --recursive # - initialize and fetch submodules
mkdir target && cd target # - create build target directory
cmake -DCMAKE_BUILD_TYPE=Upstream .. # - run CMake
make # - compile

# You can now run (Ctrl-Esc to quit)
./example/example

PACKAGING
---------

For now you can look at the `AUR recipe `_ for a example.

Releases are signed with `B22DA89A `_ and published `on GitHub `_.

All 0.0.x releases are considered unstable.

CONTRIBUTING
------------

See the `CONTRIBUTING `_ for more information.

BINDINGS
--------

- `ocaml-wlc `_ - OCaml (experimental)
- `go-wlc `_ - Go
- `rust-wlc `_ - Rust
- `wlc.rs `_ - Rust
- `jwlc `_ - Java - work in progress

SOFTWARE USING WLC
------------------

- `orbment `_ - Modular Wayland compositor
- `ocaml-loliwm `_ - Translation of loliwm to OCaml
- `sway `_ - i3-compatible window manager for Wayland
- `way-cooler `_ - customizeable window manager written in Rust
- `fireplace `_ - Modular wayland window manager written in Rust

SIMILAR SOFTWARE
----------------

- `ewlc `_ - A separately maintained fork of wlc
- `swc `_ - A library for making a simple Wayland compositor
- `libwlb `_ - A Wayland back-end library
- `libweston `_ - Weston as a library