From 9470c54a2836795974e83e55ea859e4653b20b37 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Mon, 19 Jun 2017 16:31:28 +0200 Subject: [PATCH] Call dbus-daemon directly instead of dbus-launch dbus-launch is X11 specific and being deprecated. Adjust documentation to use dbus-run-session instead. https://bugs.debian.org/836053 --- NEWS | 4 ++++ README.rst | 6 +++--- dbusmock/testcase.py | 18 ++++++++++-------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/NEWS b/NEWS index c1250ea..181a4df 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +0.17 (UNRELEASED) +----------------- + - Call dbus-daemon directly instead of dbus-launch. (Debian #836053) + 0.16.9 (2017-06-19) ------------------- - NetworkManager template: Fix type of 'State' property in AddActiveConnection() diff --git a/README.rst b/README.rst index 3dc4552..310e1ac 100644 --- a/README.rst +++ b/README.rst @@ -118,9 +118,9 @@ Let's walk through: Simple example from shell ------------------------- -We use the actual session bus for this example. You can use ``dbus-launch`` to -start a private one as well if you want, but that is not part of the actual -mocking. +We use the actual session bus for this example. You can use +``dbus-run-session`` to start a private one as well if you want, but that is +not part of the actual mocking. So let's start a mock at the D-Bus name ``com.example.Foo`` with an initial "main" object on path /, with the main D-Bus interface diff --git a/dbusmock/testcase.py b/dbusmock/testcase.py index 825c61f..49787e2 100644 --- a/dbusmock/testcase.py +++ b/dbusmock/testcase.py @@ -97,16 +97,18 @@ def start_dbus(klass, conf=None): Normally you do not need to call this directly. Use start_system_bus() and start_session_bus() instead. ''' - argv = ['dbus-launch'] + argv = ['dbus-daemon', '--fork', '--print-address=1', '--print-pid=1'] if conf: argv.append('--config-file=' + conf) - out = subprocess.check_output(argv, universal_newlines=True) - variables = {} - for line in out.splitlines(): - (k, v) = line.split('=', 1) - variables[k] = v - return (int(variables['DBUS_SESSION_BUS_PID']), - variables['DBUS_SESSION_BUS_ADDRESS']) + else: + argv.append('--session') + lines = subprocess.check_output(argv, universal_newlines=True).strip().splitlines() + assert len(lines) == 2, 'expected exactly 2 lines of output from dbus-daemon' + # usually the first line is the address, but be lenient and accept any order + try: + return (int(lines[1]), lines[0]) + except ValueError: + return (int(lines[0]), lines[1]) @classmethod def stop_dbus(klass, pid):