diff --git a/include/xwayland/meson.build b/include/xwayland/meson.build index 16712083..37ddf4ca 100644 --- a/include/xwayland/meson.build +++ b/include/xwayland/meson.build @@ -1,11 +1,14 @@ +have_listenfd = false if xwayland.found() xwayland_path = xwayland.get_pkgconfig_variable('xwayland') + have_listenfd = xwayland.get_pkgconfig_variable('have_listenfd') == 'true' else xwayland_path = xwayland_prog.full_path() endif xwayland_config_data = configuration_data() xwayland_config_data.set_quoted('XWAYLAND_PATH', xwayland_path) +xwayland_config_data.set10('HAVE_XWAYLAND_LISTENFD', have_listenfd) configure_file( output: 'config.h', configuration: xwayland_config_data, diff --git a/xwayland/server.c b/xwayland/server.c index f5c6b060..58ba1a8e 100644 --- a/xwayland/server.c +++ b/xwayland/server.c @@ -64,8 +64,13 @@ noreturn static void exec_xwayland(struct wlr_xwayland_server *server) { char *argv[] = { "Xwayland", NULL /* display, e.g. :1 */, "-rootless", "-terminate", "-core", +#if HAVE_XWAYLAND_LISTENFD + "-listenfd", NULL /* x_fd[0] */, + "-listenfd", NULL /* x_fd[1] */, +#else "-listen", NULL /* x_fd[0] */, "-listen", NULL /* x_fd[1] */, +#endif "-wm", NULL /* wm_fd[1] */, NULL, }; @@ -91,7 +96,7 @@ noreturn static void exec_xwayland(struct wlr_xwayland_server *server) { snprintf(wayland_socket_str, sizeof(wayland_socket_str), "%d", server->wl_fd[1]); setenv("WAYLAND_SOCKET", wayland_socket_str, true); - wlr_log(WLR_INFO, "WAYLAND_SOCKET=%d Xwayland :%d -rootless -terminate -core -listen %d -listen %d -wm %d", + wlr_log(WLR_INFO, "WAYLAND_SOCKET=%d Xwayland :%d -rootless -terminate -core -listenfd %d -listenfd %d -wm %d", server->wl_fd[1], server->display, server->x_fd[0], server->x_fd[1], server->wm_fd[1]);