Skip to content
  • David Zeuthen's avatar
    GDBus: Handle autolaunching on UNIX/Freedesktop OSes · aab6d9ed
    David Zeuthen authored
    
    
    Also add a 'address' G_DBUS_DEBUG option that will print out useful
    debug information such as
    
      GDBus-debug:Address: In g_dbus_address_get_for_bus_sync() for bus type `session'
      GDBus-debug:Address: env var DBUS_SESSION_BUS_ADDRESS is not set
      GDBus-debug:Address: env var DBUS_SYSTEM_BUS_ADDRESS is not set
      GDBus-debug:Address: env var DBUS_STARTER_BUS_TYPE is not set
      GDBus-debug:Address: Running `dbus-launch --autolaunch=05e508961149264c9b750a4c494aa6f7 --binary-syntax --close-stderr' to get bus address (possibly autolaunching)
      GDBus-debug:Address: dbus-launch output:
        0000: 75 6e 69 78  3a 61 62 73  74 72 61 63  74 3d 2f 74    unix:abstract=/t
        0010: 6d 70 2f 64  62 75 73 2d  77 42 41 6f  4b 59 49 52    mp/dbus-wBAoKYIR
        0020: 7a 75 2c 67  75 69 64 3d  30 34 30 64  31 33 66 33    zu,guid=040d13f3
        0030: 30 61 30 62  35 32 63 32  30 66 36 32  63 34 31 63    0a0b52c20f62c41c
        0040: 30 30 30 30  35 30 38 64  00 d2 38 00  00 01 00 40    0000508d..8....@
        0050: 05 00 00 00  00                                       .....
      GDBus-debug:Address: dbus-launch stderr output:
      14542: Autolaunch enabled (using X11).
      14542: --exit-with-session automatically enabled
      14542: Connected to X11 display ':0.0'
      14542: === Parent dbus-launch continues
      14542: Waiting for babysitter's intermediate parent
      14542: Reading address from bus
      14542: Reading PID from daemon
      14542: Saving x11 address
      14542: Created window 88080385
      14542: session file: /root/.dbus/session-bus/05e508961149264c9b750a4c494aa6f7-0
      14542: dbus-launch exiting
      GDBus-debug:Address: Returning address `unix:abstract=/tmp/dbus-wBAoKYIRzu,guid=040d13f30a0b52c20f62c41c0000508d' for bus type `session'
    
    and
    
      GDBus-debug:Address: In g_dbus_address_get_for_bus_sync() for bus type `session'
      GDBus-debug:Address: env var DBUS_SESSION_BUS_ADDRESS is not set
      GDBus-debug:Address: env var DBUS_SYSTEM_BUS_ADDRESS is not set
      GDBus-debug:Address: env var DBUS_STARTER_BUS_TYPE is not set
      GDBus-debug:Address: Running `dbus-launch --autolaunch=05e508961149264c9b750a4c494aa6f7 --binary-syntax --close-stderr' to get bus address (possibly autolaunching)
      GDBus-debug:Address: dbus-launch output:
        0000: 75 6e 69 78  3a 61 62 73  74 72 61 63  74 3d 2f 74    unix:abstract=/t
        0010: 6d 70 2f 64  62 75 73 2d  77 42 41 6f  4b 59 49 52    mp/dbus-wBAoKYIR
        0020: 7a 75 2c 67  75 69 64 3d  30 34 30 64  31 33 66 33    zu,guid=040d13f3
        0030: 30 61 30 62  35 32 63 32  30 66 36 32  63 34 31 63    0a0b52c20f62c41c
        0040: 30 30 30 30  35 30 38 64  00 d2 38 00  00 01 00 40    0000508d..8....@
        0050: 05 00 00 00  00                                       .....
      GDBus-debug:Address: dbus-launch stderr output:
      14549: Autolaunch enabled (using X11).
      14549: --exit-with-session automatically enabled
      14549: Connected to X11 display ':0.0'
      14549: dbus-daemon is already running. Returning existing parameters.
      14549: dbus-launch exiting
      GDBus-debug:Address: Returning address `unix:abstract=/tmp/dbus-wBAoKYIRzu,guid=040d13f30a0b52c20f62c41c0000508d' for bus type `session'
    
    Note that things work exactly like libdbus, e.g. from the
    dbus-launch(1) man page:
    
      Whenever an autolaunch occurs, the application that had to start a
      new bus will be in its own little world; it can effectively end up
      starting a whole new session if it tries to use a lot of bus
      services. This can be suboptimal or even totally broken, depending
      on the app and what it tries to do.
    
      [...]
    
      You can always avoid autolaunch by manually setting
      DBUS_SESSION_BUS_ADDRESS. Autolaunch happens because the default
      address if none is set is "autolaunch:", so if any other address is
      set there will be no autolaunch. You can however include autolaunch
      in an explicit session bus address as a fallback, for example
      DBUS_SESSION_BUS_ADDRESS="something:,autolaunch:" - in that case if
      the first address doesn't work, processes will autolaunch. (The bus
      address variable contains a comma-separated list of addresses to
      try.)
    
    Signed-off-by: default avatarDavid Zeuthen <davidz@redhat.com>
    aab6d9ed