commit cd10f9a6a800e424dcd91635c0a424fd157cc31b
Author: David Sorber <david.sorber@gmail.com>
Date:   Fri Jul 27 10:09:19 2018 -0400

    Adding simple Python-based dbus example.

diff --git a/software/dbus_test/client.py b/software/dbus_test/client.py
new file mode 100755
index 0000000..8adf591
--- /dev/null
+++ b/software/dbus_test/client.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python3
+
+import dbus
+
+class Client():
+   def __init__(self):
+      bus = dbus.SystemBus()
+      service = bus.get_object('com.example.service', "/com/example/service")
+      self._message = service.get_dbus_method('get_message', 'com.example.service.Message')
+      self._quit = service.get_dbus_method('quit', 'com.example.service.Quit')
+
+   def run(self):
+      print("Mesage from service:", self._message())
+      self._quit()
+
+if __name__ == "__main__":
+   Client().run()
diff --git a/software/dbus_test/com.example.service.conf b/software/dbus_test/com.example.service.conf
new file mode 100644
index 0000000..00712de
--- /dev/null
+++ b/software/dbus_test/com.example.service.conf
@@ -0,0 +1,24 @@
+<?xml version="1.0"?> <!--*-nxml-*-->
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+
+<!--
+  This file goes here:
+
+	/etc/dbus-1/system.d/com.example.service.conf
+-->
+
+<busconfig>
+
+        <policy user="root">
+                <allow own="com.example.service"/>
+                <allow send_destination="com.example.service"/>
+                <allow receive_sender="com.example.service"/>
+        </policy>
+
+        <policy context="default">
+                <allow send_destination="com.example.service"/>
+                <allow receive_sender="com.example.service"/>
+        </policy>
+
+</busconfig>
diff --git a/software/dbus_test/service.py b/software/dbus_test/service.py
new file mode 100755
index 0000000..79c8412
--- /dev/null
+++ b/software/dbus_test/service.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python3
+
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+
+from gi.repository import GObject as gobject
+
+class Service(dbus.service.Object):
+   def __init__(self, message):
+      self._message = message
+
+   def run(self):
+      dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+      bus_name = dbus.service.BusName("com.example.service", dbus.SystemBus())
+      dbus.service.Object.__init__(self, bus_name, "/com/example/service")
+
+      self._loop = gobject.MainLoop()
+      print("Service running...")
+      self._loop.run()
+      print("Service stopped")
+
+   @dbus.service.method("com.example.service.Message", in_signature='', out_signature='s')
+   def get_message(self):
+      print("  sending message")
+      return self._message
+
+   @dbus.service.method("com.example.service.Quit", in_signature='', out_signature='')
+   def quit(self):
+      print("  shutting down")
+      self._loop.quit()
+
+if __name__ == "__main__":
+   Service("This is the service").run()
