Question about isatty/read usage in dbus-launch

Havoc Pennington hp at redhat.com
Fri Dec 1 18:41:35 PST 2006


Hi,

The reason I haven't come out and said "let's make changes a, b, and c" 
is that they will cause some churn/disruption and there should be a 
well-thought-through master plan so we don't go in circles changing it 
back and forth.

There are also some larger-scope partly-related changes:
http://lists.freedesktop.org/archives/dbus/2006-October/005906.html

(Those last proposed changes at least make dbus-launch pretty 
configurable in what it does; perhaps in that spirit, if we split 
--exit-with-session into --exit-with-x-session / --exit-with-tty-session 
then that would be a plausible solution to the problem at hand, though 
it still wouldn't _fix_ --exit-with-tty-session to work right)

We could have an --exit-with-launched-program also though I do think 
it's a little silly; it's called "inter-process communication" because 
there are at least two processes ;-) but it could be useful for 
debugging and such.

If you do something like "dbus-launch firefox" then as dbus is more 
heavily used, effectively what will happen is that firefox gets its 
whole own private desktop session, where all kinds of services might get 
launched. If you were already logged in, you'd get second copies of 
everything vs. your main desktop session.

An example of what could go wrong; we might have an "open a single 
instance app" service on the bus, so say I do "dbus-launch firefox" and 
it uses this service to open a document in OpenOffice, then I close 
firefox, I am *not* expecting my OpenOffice to exit. But that's what 
would happen with --exit-with-launched-program.

(Remember that dbus-daemon defines the session lifecycle, normal apps 
are supposed to exit when disconnected from it and assume anything 
sharing their session is on the same session bus.)

Anyhow... more reasonable uses of dbus-launch might include:
  - running one daemon per X display/session
  - one per ssh or console session
  - it's used internally by libdbus to do the autolaunch
    work (though whenever autolaunch happens, your setup is
    incorrect or at least suboptimal)
  - doing a "dbus-launch bash" in order to get a debugging
    session with everything you run in the bash sharing a
    daemon
  - probably some other debugging-type usages

Given the use cases of an X session or an ssh session, offhand it seems 
reasonable to split up --exit-with-session into --exit-with-x-session / 
--exit-with-tty-session (with current --exit-with-session equivalent to 
specifying both flags).

Regarding the double fork/exec, it makes sense to me in the case of 
starting the bus for a session; I don't think exiting when the child 
exits is right in that case, so we don't care about the child's return 
code or exit status and we can just reap it.

When doing a debug thing like "dbus-launch bash" then 
--exit-with-launched-program (presumably implemented by not reaping the 
child right away) sounds handy.

It might be nice to write up a short list of use-cases, then a patch for 
the man page documenting new options we should have, including the 
various --exit-with plus those discussed here or improvements on them:
http://lists.freedesktop.org/archives/dbus/2006-October/005906.html

Then we'll have a sort of "dbus-launch roadmap" in the form of the use 
cases plus man page changes. It'd also be nice to figure out the bug Ray 
posted,
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=214649

Of course, it's pretty academic unless someone has time to work on 
sorting this out...

Havoc



More information about the dbus mailing list