summaryrefslogtreecommitdiff
blob: 54149ed033aa234f3f840e62b915a02ff0887c2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
From 9470c54a2836795974e83e55ea859e4653b20b37 Mon Sep 17 00:00:00 2001
From: Martin Pitt <martin@piware.de>
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):