systemd-logind: Only use systemd-logind integration together with keeptty

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@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Tested-by: Aaron Plattner <aplattner@nvidia.com>
This commit is contained in:
Hans de Goede 2015-01-21 10:13:20 +01:00
parent 81bcada14e
commit c88a325899
2 changed files with 11 additions and 3 deletions

View File

@ -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 platforms support (or can use) this option.
.TP 8
.BI \-keyboard " keyboard-name"
Use the xorg.conf(__filemansuffix__) file

View File

@ -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,13 @@ static struct dbus_core_hook core_hook = {
int
systemd_logind_init(void)
{
if (linux_parse_vt_settings(TRUE) && !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);
}