[PATCH v2 2/2] systemd-logind: Only use systemd-logind integration together with keeptty

Hans de Goede hdegoede at redhat.com
Thu Apr 30 05:24:29 PDT 2015

systemd-logind integration does not work when starting X on a new tty, as
that detaches X from the current session and after hat systemd-logind revokes
all rights any already open fds and refuses to open new fds for X.

This means that currently e.g. "startx -- vt7" breaks, and breaks badly,
requiring ssh access to the system to kill X.

The fix for this is easy, we must not use systemd-logind integration when
not using KeepTty, or iow we may only use systemd-logind integration together
with KeepTty.

Signed-off-by: Hans de Goede <hdegoede at redhat.com>
Changes in v2:
-Document that -keeptty must be passed for logind integration in man page
-Print an INFO message when disabling logind integration due to -keeptty
 not being set
 hw/xfree86/man/Xorg.man                      | 6 +++---
 hw/xfree86/os-support/linux/systemd-logind.c | 9 +++++++++
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man
index 3ff6aef..0864a58 100644
--- a/hw/xfree86/man/Xorg.man
+++ b/hw/xfree86/man/Xorg.man
@@ -271,9 +271,9 @@ is ignored if
 is anything other than \(oqPCI\(cq.
 .TP 8
 .B \-keeptty
-Prevent the server from detaching its initial controlling terminal.
-This option is only useful when debugging the server.  Not all platforms
-support (or can use) this option.
+Prevent the server from detaching its initial controlling terminal. If you
+want to use systemd-logind integration you must specify this option.
+Not all platorms support (or can use) this option.
 .TP 8
 .BI \-keyboard " keyboard-name"
 Use the xorg.conf(__filemansuffix__) file
diff --git a/hw/xfree86/os-support/linux/systemd-logind.c b/hw/xfree86/os-support/linux/systemd-logind.c
index 4ad41a3..72f1ae3 100644
--- a/hw/xfree86/os-support/linux/systemd-logind.c
+++ b/hw/xfree86/os-support/linux/systemd-logind.c
@@ -34,6 +34,7 @@
 #include "os.h"
 #include "dbus-core.h"
+#include "linux.h"
 #include "xf86.h"
 #include "xf86platformBus.h"
 #include "xf86Xinput.h"
@@ -596,6 +597,14 @@ static struct dbus_core_hook core_hook = {
+    linux_parse_vt_settings();
+    if (!linux_get_keeptty()) {
+        LogMessage(X_INFO,
+            "systemd-logind: logind integration requires -keeptty and "
+            "-keeptty was not provided, disabling logind integration\n");
+        return 1;
+    }
     return dbus_core_add_hook(&core_hook);

More information about the xorg-devel mailing list