backend: allow multiple backends in WLR_BACKENDS

This commit is contained in:
emersion 2018-05-15 22:10:51 +01:00
parent 52bd8aa716
commit 007d83c6ee
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
2 changed files with 36 additions and 13 deletions

View file

@ -1,3 +1,4 @@
#define _POSIX_C_SOURCE 200809L
#include <assert.h> #include <assert.h>
#include <errno.h> #include <errno.h>
#include <libinput.h> #include <libinput.h>
@ -138,16 +139,32 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display) {
return NULL; return NULL;
} }
const char *name = getenv("WLR_BACKEND"); char *names = getenv("WLR_BACKENDS");
if (name) { if (names) {
struct wlr_backend *subbackend = attempt_backend_by_name(display, name); names = strdup(names);
if (subbackend) { if (names == NULL) {
wlr_multi_backend_add(backend, subbackend); wlr_log(L_ERROR, "allocation failed");
return backend;
} else {
wlr_log(L_ERROR, "unrecognized backend '%s'", name);
return NULL; return NULL;
} }
char *saveptr;
char *name = strtok_r(names, ",", &saveptr);
while (name != NULL) {
struct wlr_backend *subbackend =
attempt_backend_by_name(display, name);
if (subbackend == NULL) {
wlr_log(L_ERROR, "unrecognized backend '%s'", name);
return NULL;
}
if (!wlr_multi_backend_add(backend, subbackend)) {
return NULL;
}
name = strtok_r(NULL, ",", &saveptr);
}
return backend;
} }
if (getenv("WAYLAND_DISPLAY") || getenv("_WAYLAND_DISPLAY") || if (getenv("WAYLAND_DISPLAY") || getenv("_WAYLAND_DISPLAY") ||

View file

@ -2,20 +2,26 @@ wlroots reads these environment variables
wlroots specific wlroots specific
---------------- ----------------
* *WLR_DRM_DEVICES*: specifies the DRM devices (as a colon separated list) instead of auto probing them. The first existing device in this list is considered the primary DRM device. * *WLR_DRM_DEVICES*: specifies the DRM devices (as a colon separated list)
* *WLR_DRM_NO_ATOMIC*: set to 1 to use legacy DRM interface instead of atomic mode setting instead of auto probing them. The first existing device in this list is
considered the primary DRM device.
* *WLR_DRM_NO_ATOMIC*: set to 1 to use legacy DRM interface instead of atomic
mode setting
* *WLR_LIBINPUT_NO_DEVICES*: set to 1 to not fail without any input devices * *WLR_LIBINPUT_NO_DEVICES*: set to 1 to not fail without any input devices
* *WLR_BACKEND*: force a specific backend to be used (one of: wayland, x11, headless) * *WLR_BACKENDS*: comma-separated list of backends to use (available backends:
wayland, x11, headless)
* *WLR_WL_OUTPUTS*: when using the wayland backend specifies the number of outputs * *WLR_WL_OUTPUTS*: when using the wayland backend specifies the number of outputs
* *WLR_X11_OUTPUTS*: when using the X11 backend specifies the number of outputs * *WLR_X11_OUTPUTS*: when using the X11 backend specifies the number of outputs
rootston specific rootston specific
------------------ ------------------
* *XKB_DEFAULT_RULES*, *XKB_DEFAULT_MODEL*, *XKB_DEFAULT_LAYOUT*, *XKB_DEFAULT_VARIANT*, *XKB_DEFAULT_OPTIONS*: xkb setup * *XKB_DEFAULT_RULES*, *XKB_DEFAULT_MODEL*, *XKB_DEFAULT_LAYOUT*,
*XKB_DEFAULT_VARIANT*, *XKB_DEFAULT_OPTIONS*: xkb setup
generic generic
------- -------
* *DISPLAY*: if set probe X11 backend in *wlr_backend_autocreate* * *DISPLAY*: if set probe X11 backend in *wlr_backend_autocreate*
* *WAYLAND_DISPLAY*, *_WAYLAND_DISPLAY*, *WAYLAND_SOCKET*: if set probe Wayland backend in *wlr_backend_autocreate* * *WAYLAND_DISPLAY*, *_WAYLAND_DISPLAY*, *WAYLAND_SOCKET*: if set probe Wayland
backend in *wlr_backend_autocreate*
* *XCURSOR_PATH*: directory where xcursors are located * *XCURSOR_PATH*: directory where xcursors are located
* *XDG_RUNTIME_DIR*: used to store non persistent temporary files * *XDG_RUNTIME_DIR*: used to store non persistent temporary files