xwayland: check executable exists on init
Instead of walking PATH like a previous proposal [1], this one checks that the Xwayland path specified in the pkg-config file exists. I think this is a reasonable compromise: - Users that don't have Xwayland installed system-wide won't get a bogus DISPLAY env variable set up. - Users that have WLR_XWAYLAND set won't be affected by this check. - Users that have Xwayland installed system-wide and a different Xwayland in their PATH still get their custom Xwayland. - Users that don't have Xwayland installed system-wide but have it somewhere else in PATH are left out. But this is pretty niche, and they can just set WLR_XWAYLAND. [1]: https://github.com/swaywm/wlroots/pull/2314
This commit is contained in:
parent
3504bb587d
commit
eec2e1d3b1
|
@ -6,6 +6,8 @@ if not features.get('x11-backend')
|
||||||
endif
|
endif
|
||||||
if not features.get('xwayland')
|
if not features.get('xwayland')
|
||||||
exclude_files += 'xwayland.h'
|
exclude_files += 'xwayland.h'
|
||||||
|
else
|
||||||
|
subdir('xwayland')
|
||||||
endif
|
endif
|
||||||
if not features.get('xdg-foreign')
|
if not features.get('xdg-foreign')
|
||||||
exclude_files += [
|
exclude_files += [
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
if xwayland.found()
|
||||||
|
xwayland_path = xwayland.get_pkgconfig_variable('xwayland')
|
||||||
|
else
|
||||||
|
xwayland_path = xwayland_prog.full_path()
|
||||||
|
endif
|
||||||
|
|
||||||
|
xwayland_config_data = configuration_data()
|
||||||
|
xwayland_config_data.set_quoted('XWAYLAND_PATH', xwayland_path)
|
||||||
|
configure_file(
|
||||||
|
output: 'config.h',
|
||||||
|
configuration: xwayland_config_data,
|
||||||
|
)
|
|
@ -16,6 +16,7 @@
|
||||||
#include <wlr/xwayland.h>
|
#include <wlr/xwayland.h>
|
||||||
#include "sockets.h"
|
#include "sockets.h"
|
||||||
#include "util/signal.h"
|
#include "util/signal.h"
|
||||||
|
#include "xwayland/config.h"
|
||||||
|
|
||||||
static void safe_close(int fd) {
|
static void safe_close(int fd) {
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
|
@ -442,6 +443,11 @@ void wlr_xwayland_server_destroy(struct wlr_xwayland_server *server) {
|
||||||
struct wlr_xwayland_server *wlr_xwayland_server_create(
|
struct wlr_xwayland_server *wlr_xwayland_server_create(
|
||||||
struct wl_display *wl_display,
|
struct wl_display *wl_display,
|
||||||
struct wlr_xwayland_server_options *options) {
|
struct wlr_xwayland_server_options *options) {
|
||||||
|
if (!getenv("WLR_XWAYLAND") && access(XWAYLAND_PATH, X_OK) != 0) {
|
||||||
|
wlr_log(WLR_ERROR, "Cannot find Xwayland binary \"%s\"", XWAYLAND_PATH);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
struct wlr_xwayland_server *server =
|
struct wlr_xwayland_server *server =
|
||||||
calloc(1, sizeof(struct wlr_xwayland_server));
|
calloc(1, sizeof(struct wlr_xwayland_server));
|
||||||
if (!server) {
|
if (!server) {
|
||||||
|
|
Loading…
Reference in New Issue