Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/Cloudef/wlc
- Owner: Cloudef
- License: mit
- Created: 2014-07-28T16:27:14.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2022-02-15T16:23:07.000Z (over 2 years ago)
- Last Synced: 2024-07-10T09:54:44.367Z (2 months ago)
- Language: C
- Homepage:
- Size: 1.57 MB
- Stars: 330
- Watchers: 40
- Forks: 58
- Open Issues: 71
-
Metadata Files:
- Readme: README.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
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
#includestatic 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
- gitAnd 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/examplePACKAGING
---------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 progressSOFTWARE 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 RustSIMILAR 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