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):
|