mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 05:36:47 +00:00
weston: backport PR486 - WAYLAND_DISPLAY=wayland-1
This commit is contained in:
parent
eca639105e
commit
d02656e162
@ -0,0 +1,73 @@
|
|||||||
|
From ae69381b6eb43ab63992906d1bf29ffd2b4df10d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Manuel Stoeckl <code@mstoeckl.com>
|
||||||
|
Date: Sun, 30 Aug 2020 18:49:18 -0400
|
||||||
|
Subject: [PATCH] compositor: avoid setting WAYLAND_DISPLAY=wayland-0
|
||||||
|
|
||||||
|
This commit alters the way that Weston picks a Wayland display socket
|
||||||
|
name. Instead of using wl_display_add_socket_auto to look for the first
|
||||||
|
available name in wayland-0, wayland-1, .... to wayland-32, the code now
|
||||||
|
checks names wayland-1, wayland-2, .... up to wayland-32.
|
||||||
|
|
||||||
|
This change is a workaround for a suboptimal behavior of
|
||||||
|
libwayland-client. If a client program calls wl_display_connect(NULL) and
|
||||||
|
the WAYLAND_DISPLAY environment variable is not set, then the program will
|
||||||
|
by default try to connect to 'wayland-0'. This is a problem when a
|
||||||
|
computer has a running Wayland compositor but is being accessed in some
|
||||||
|
other fashion, such as through an X session on a different virtual
|
||||||
|
terminal, over ssh, etc. Client programs launched through those means may
|
||||||
|
attempt to connect to an unrelated compositor. Changing libwayland
|
||||||
|
behavior to remove the default would also work, but a) libraries have
|
||||||
|
stronger backward compatibility expectations b) that would likely break
|
||||||
|
more people's setups than just changing Weston would.
|
||||||
|
|
||||||
|
Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
|
||||||
|
---
|
||||||
|
compositor/main.c | 23 ++++++++++++++---------
|
||||||
|
1 file changed, 14 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/compositor/main.c b/compositor/main.c
|
||||||
|
index 2554b7627..0c8c8e027 100644
|
||||||
|
--- a/compositor/main.c
|
||||||
|
+++ b/compositor/main.c
|
||||||
|
@@ -825,24 +825,29 @@ handle_primary_client_destroyed(struct wl_listener *listener, void *data)
|
||||||
|
static int
|
||||||
|
weston_create_listening_socket(struct wl_display *display, const char *socket_name)
|
||||||
|
{
|
||||||
|
+ char name_candidate[16];
|
||||||
|
+
|
||||||
|
if (socket_name) {
|
||||||
|
if (wl_display_add_socket(display, socket_name)) {
|
||||||
|
weston_log("fatal: failed to add socket: %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ setenv("WAYLAND_DISPLAY", socket_name, 1);
|
||||||
|
+ return 0;
|
||||||
|
} else {
|
||||||
|
- socket_name = wl_display_add_socket_auto(display);
|
||||||
|
- if (!socket_name) {
|
||||||
|
- weston_log("fatal: failed to add socket: %s\n",
|
||||||
|
- strerror(errno));
|
||||||
|
- return -1;
|
||||||
|
+ for (int i = 1; i <= 32; i++) {
|
||||||
|
+ sprintf(name_candidate, "wayland-%d", i);
|
||||||
|
+ if (wl_display_add_socket(display, name_candidate) >= 0) {
|
||||||
|
+ setenv("WAYLAND_DISPLAY", name_candidate, 1);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
+ weston_log("fatal: failed to add socket: %s\n",
|
||||||
|
+ strerror(errno));
|
||||||
|
+ return -1;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- setenv("WAYLAND_DISPLAY", socket_name, 1);
|
||||||
|
-
|
||||||
|
- return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WL_EXPORT void *
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user