diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2021-10-07 18:22:11 -0700 |
---|---|---|
committer | Ray Strode <halfline@gmail.com> | 2021-12-22 21:22:27 +0000 |
commit | bc16c9898012e463bc6b79c3faa8f81ed54527f7 (patch) | |
tree | ede12e3631c3936ef714a3cfdab96349ee4b270e | |
parent | 800eb651350bf19eec416ceedfe5744317fed502 (diff) | |
download | gdm-bc16c9898012e463bc6b79c3faa8f81ed54527f7.tar.gz |
daemon: Support X servers built with -Dlisten_tcp=true
Xorg since version 1.17 doesn't listen to tcp sockets by default
unless it's explicitly built with -Dlisten_tcp=true.
GDM currently assumes X servers 1.17 and later are always built
without specifying -Dlisten_tcp=true and doesn't work properly
otherwise.
This commit enhances GDM to better handle these non-standard builds by
always passing '-nolisten tcp' on the command line when tcp should
be disabled, and likewise always passing '-listen tcp' on the command
line, assuming the X server is new enough to support it, when tcp
should be enabled.
Related #704
-rw-r--r-- | daemon/gdm-server.c | 21 | ||||
-rw-r--r-- | daemon/gdm-x-session.c | 12 | ||||
-rw-r--r-- | meson.build | 4 |
3 files changed, 19 insertions, 18 deletions
diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c index 1ba00d45..e5d23521 100644 --- a/daemon/gdm-server.c +++ b/daemon/gdm-server.c @@ -317,18 +317,19 @@ gdm_server_resolve_command_line (GdmServer *server, * by default anymore. In older versions we need to pass * -nolisten tcp to disable listening on tcp sockets. */ -#ifdef HAVE_XSERVER_THAT_DEFAULTS_TO_LOCAL_ONLY - if (!server->disable_tcp && ! query_in_arglist) { - argv[len++] = g_strdup ("-listen"); - argv[len++] = g_strdup ("tcp"); - } -#else - if (server->disable_tcp && ! query_in_arglist) { - argv[len++] = g_strdup ("-nolisten"); - argv[len++] = g_strdup ("tcp"); - } + if (!query_in_arglist) { + if (server->disable_tcp) { + argv[len++] = g_strdup ("-nolisten"); + argv[len++] = g_strdup ("tcp"); + } +#ifdef HAVE_XSERVER_WITH_LISTEN + if (!server->disable_tcp) { + argv[len++] = g_strdup ("-listen"); + argv[len++] = g_strdup ("tcp"); + } #endif + } if (vtarg != NULL && ! gotvtarg) { argv[len++] = g_strdup (vtarg); diff --git a/daemon/gdm-x-session.c b/daemon/gdm-x-session.c index 5962da57..0b07ab5b 100644 --- a/daemon/gdm-x-session.c +++ b/daemon/gdm-x-session.c @@ -260,16 +260,16 @@ spawn_x_server (State *state, * by default anymore. In older versions we need to pass * -nolisten tcp to disable listening on tcp sockets. */ -#ifdef HAVE_XSERVER_THAT_DEFAULTS_TO_LOCAL_ONLY - if (allow_remote_connections) { - g_ptr_array_add (arguments, "-listen"); - g_ptr_array_add (arguments, "tcp"); - } -#else if (!allow_remote_connections) { g_ptr_array_add (arguments, "-nolisten"); g_ptr_array_add (arguments, "tcp"); } + +#ifdef HAVE_XSERVER_WITH_LISTEN + if (allow_remote_connections) { + g_ptr_array_add (arguments, "-listen"); + g_ptr_array_add (arguments, "tcp"); + } #endif g_ptr_array_add (arguments, "-background"); diff --git a/meson.build b/meson.build index e0c56225..dc16b9e7 100644 --- a/meson.build +++ b/meson.build @@ -71,7 +71,7 @@ x_deps = declare_dependency( ) # Xserver 1.17 & later default to -nolisten and require -listen for remote access xserver_deps = dependency('xorg-server', version : '>=1.17', required : false) -xserver_nolisten_default = xserver_deps.found() +xserver_has_listen = xserver_deps.found() find_x_server_script = find_program('build-aux/find-x-server.sh', native: true) find_x_server_out = run_command(find_x_server_script).stdout().strip() if find_x_server_out != '' @@ -227,7 +227,7 @@ conf.set('HAVE_PAM_SYSLOG', have_pam_syslog) conf.set('HAVE_KEYUTILS', keyutils_dep.found()) conf.set('SUPPORTS_PAM_EXTENSIONS', pam_extensions_supported) conf.set('HAVE_SELINUX', libselinux_dep.found()) -conf.set('HAVE_XSERVER_THAT_DEFAULTS_TO_LOCAL_ONLY', xserver_nolisten_default) +conf.set('HAVE_XSERVER_WITH_LISTEN', xserver_has_listen) conf.set('ENABLE_USER_DISPLAY_SERVER', get_option('user-display-server')) conf.set('ENABLE_SYSTEMD_JOURNAL', get_option('systemd-journal')) conf.set('ENABLE_WAYLAND_SUPPORT', get_option('wayland-support')) |