wlc

High-level Wayland compositor library

  • 所有者: Cloudef/wlc
  • 平台:
  • 許可證: MIT License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

DEPRECATION NOTICE

wlc is officially deprecated. Interested users are encouraged to use wlroots <https://github.com/swaywm/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 <stdlib.h>
#include <wlc/wlc.h>

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 <https://aur.archlinux.org/packages/wlc-git/>_ for a example.

Releases are signed with B22DA89A <http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A>_ and published on GitHub <https://github.com/Cloudef/wlc/releases>_.

All 0.0.x releases are considered unstable.

CONTRIBUTING

See the CONTRIBUTING <CONTRIBUTING.rst>_ for more information.

BINDINGS

  • ocaml-wlc <https://github.com/Armael/ocaml-wlc>_ - OCaml (experimental)
  • go-wlc <https://github.com/mikkeloscar/go-wlc>_ - Go
  • rust-wlc <https://github.com/Immington-Industries/rust-wlc>_ - Rust
  • wlc.rs <https://github.com/Drakulix/wlc.rs>_ - Rust
  • jwlc <https://github.com/Enerccio/jwlc>_ - Java - work in progress

SOFTWARE USING WLC

  • orbment <https://github.com/Cloudef/orbment>_ - Modular Wayland compositor
  • ocaml-loliwm <https://github.com/Armael/ocaml-loliwm>_ - Translation of loliwm to OCaml
  • sway <https://github.com/SirCmpwn/sway>_ - i3-compatible window manager for Wayland
  • way-cooler <https://github.com/Immington-Industries/way-cooler>_ - customizeable window manager written in Rust
  • fireplace <https://github.com/Drakulix/fireplace>_ - Modular wayland window manager written in Rust

SIMILAR SOFTWARE

  • ewlc <https://github.com/Enerccio/ewlc>_ - A separately maintained fork of wlc
  • swc <https://github.com/michaelforney/swc>_ - A library for making a simple Wayland compositor
  • libwlb <https://github.com/jekstrand/libwlb>_ - A Wayland back-end library
  • libweston <https://github.com/giucam/weston/tree/libweston>_ - Weston as a library

主要指標

概覽
名稱與所有者Cloudef/wlc
主編程語言C
編程語言CMake (語言數: 3)
平台
許可證MIT License
所有者活动
創建於2014-07-28 16:27:14
推送於2022-02-15 16:23:07
最后一次提交2018-10-24 14:52:44
發布數11
最新版本名稱v0.0.11 (發布於 2017-11-06 18:32:03)
第一版名稱v0.0.1 (發布於 2016-03-24 20:29:09)
用户参与
星數332
關注者數39
派生數59
提交數1.1k
已啟用問題?
問題數187
打開的問題數69
拉請求數74
打開的拉請求數2
關閉的拉請求數25
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?