Add support for WLR_SESSION env variable

Valid values are "logind"/"systemd" and "direct". If WLR_SESSION is set,
only its value is potentially tried; it will not try any other option.
This commit is contained in:
random human 2018-09-18 04:48:35 +05:30
parent 8b112730ca
commit 572dfcdba7
No known key found for this signature in database
GPG Key ID: 73E5A60444CC77A3
2 changed files with 20 additions and 3 deletions

View File

@ -66,10 +66,25 @@ static void handle_display_destroy(struct wl_listener *listener, void *data) {
struct wlr_session *wlr_session_create(struct wl_display *disp) { struct wlr_session *wlr_session_create(struct wl_display *disp) {
struct wlr_session *session = NULL; struct wlr_session *session = NULL;
const struct session_impl **iter;
for (iter = impls; !session && *iter; ++iter) { const char *env_wlr_session = getenv("WLR_SESSION");
session = (*iter)->create(disp); if (env_wlr_session) {
if (!strcmp(env_wlr_session, "logind") || !strcmp(env_wlr_session, "systemd")) {
#if defined(WLR_HAS_SYSTEMD) || defined(WLR_HAS_ELOGIND)
session = session_logind.create(disp);
#else
wlr_log(WLR_ERROR, "wlroots is not compiled with logind support");
#endif
} else if (!strcmp(env_wlr_session, "direct")) {
session = session_direct.create(disp);
} else {
wlr_log(WLR_ERROR, "WLR_SESSION has an invalid value: %s", env_wlr_session);
}
} else {
const struct session_impl **iter;
for (iter = impls; !session && *iter; ++iter) {
session = (*iter)->create(disp);
}
} }
if (!session) { if (!session) {

View File

@ -16,6 +16,8 @@ wlroots specific
of outputs of outputs
* *WLR_NO_HARDWARE_CURSORS*: set to 1 to use software cursors instead of * *WLR_NO_HARDWARE_CURSORS*: set to 1 to use software cursors instead of
hardware cursors hardware cursors
* *WLR_SESSION*: specifies the wlr\_session to be used (available sessions:
logind/systemd, direct)
rootston specific rootston specific
------------------ ------------------