summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2012-02-07 16:55:05 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2012-06-15 13:09:58 +0100
commit1785b37e430efd912ef9dda0c728984a3eba4f09 (patch)
tree9952ef45d0043570c2397ced6893548a5197baf4 /tools
parentab0cebd8830f6d48e49083a06de17a6a9e5d4d98 (diff)
downloaddbus-1785b37e430efd912ef9dda0c728984a3eba4f09.tar.gz
dbus-launch: if using X to define the session lifetime, do not poll stdin
dbus-launch --exit-with-session attempts to scope the session length to various things: - if DISPLAY points to an X server, exit when the X session ends - if stdin is a terminal, exit when end-of-file is reached - if both are true, exit when one of them happens, whichever is first - if neither is true, fail These are not particularly useful semantics: if the session is scoped to the X session, then the terminal from which dbus-launch was launched is irrelevant. This also causes practical problems when dbus-launch consumes characters from the terminal from which it happens to have been launched (some display managers, like slim and nodm, run users' X sessions with stdin pointing to the terminal from which the init daemon happens to have started the display manager during boot, usually tty1 on Linux). Reviewed-by: Will Thompson <will.thompson@collabora.co.uk> Bug: https://bugs.freedesktop.org/show_bug.cgi?id=39197
Diffstat (limited to 'tools')
-rw-r--r--tools/dbus-launch.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/tools/dbus-launch.c b/tools/dbus-launch.c
index 7b1bb37b..1ec9ae59 100644
--- a/tools/dbus-launch.c
+++ b/tools/dbus-launch.c
@@ -492,11 +492,20 @@ kill_bus_when_session_ends (void)
else
tty_fd = -1;
- if (tty_fd >= 0)
- verbose ("stdin isatty(), monitoring it\n");
+ if (x_fd >= 0)
+ {
+ verbose ("session lifetime is defined by X, not monitoring stdin\n");
+ tty_fd = -1;
+ }
+ else if (tty_fd >= 0)
+ {
+ verbose ("stdin isatty(), monitoring it\n");
+ }
else
- verbose ("stdin was not a TTY, not monitoring it\n");
-
+ {
+ verbose ("stdin was not a TTY, not monitoring it\n");
+ }
+
if (tty_fd < 0 && x_fd < 0)
{
fprintf (stderr, "No terminal on standard input and no X display; cannot attach message bus to session lifetime\n");