diff --git a/packages/wayland/weston/patches/weston-999.01-PR486-avoid-setting-WAYLAND_DISPLAY=wayland-0.patch b/packages/wayland/weston/patches/weston-999.01-PR486-avoid-setting-WAYLAND_DISPLAY=wayland-0.patch new file mode 100644 index 0000000000..98d152ab83 --- /dev/null +++ b/packages/wayland/weston/patches/weston-999.01-PR486-avoid-setting-WAYLAND_DISPLAY=wayland-0.patch @@ -0,0 +1,73 @@ +From ae69381b6eb43ab63992906d1bf29ffd2b4df10d Mon Sep 17 00:00:00 2001 +From: Manuel Stoeckl +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 +--- + 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 +