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