aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/doc/extras/QtDBus.rst
diff options
context:
space:
mode:
Diffstat (limited to 'sources/pyside6/doc/extras/QtDBus.rst')
-rw-r--r--sources/pyside6/doc/extras/QtDBus.rst193
1 files changed, 193 insertions, 0 deletions
diff --git a/sources/pyside6/doc/extras/QtDBus.rst b/sources/pyside6/doc/extras/QtDBus.rst
new file mode 100644
index 000000000..3b9cd775a
--- /dev/null
+++ b/sources/pyside6/doc/extras/QtDBus.rst
@@ -0,0 +1,193 @@
+An introduction to Inter-Process Communication and Remote Procedure
+Calling with D-Bus.
+
+Introduction
+^^^^^^^^^^^^
+
+D-Bus is an Inter-Process Communication (IPC) and Remote Procedure
+Calling (RPC) mechanism originally developed for Linux to replace
+existing and competing IPC solutions with one unified protocol. It has
+also been designed to allow communication between system-level
+processes (such as printer and hardware driver services) and normal
+user processes.
+
+It uses a fast, binary message-passing protocol, which is suitable for
+same-machine communication due to its low latency and low overhead.
+Its specification is currently defined by the ``freedesktop.org``
+project, and is available to all parties.
+
+Communication in general happens through a central server application,
+called the "bus" (hence the name), but direct
+application-to-application communication is also possible. When
+communicating on a bus, applications can query which other
+applications and services are available, as well as activate one on
+demand.
+
+The Buses
+^^^^^^^^^
+
+D-Bus buses are used when many-to-many communication is desired. In
+order to achieve that, a central server is launched before any
+applications can connect to the bus: this server is responsible for
+keeping track of the applications that are connected and for properly
+routing messages from their source to their destination.
+
+In addition, D-Bus defines two well-known buses, called the system bus
+and the session bus. These buses are special in the sense that they
+have well-defined semantics: some services are defined to be found in
+one or both of these buses.
+
+For example, an application wishing to query the list of hardware
+devices attached to the computer will probably communicate to a
+service available on the system bus, while the service providing
+opening of the user's web browser will probably be found on the
+session bus.
+
+On the system bus, one can also expect to find restrictions on what
+services each application is allowed to offer. Therefore, one can be
+reasonably certain that, if a certain service is present, it is being
+offered by a trusted application.
+
+Messages
+^^^^^^^^
+
+On the low level, applications communicate over D-Bus by sending
+messages to one another. Messages are used to relay the remote
+procedure calls as well as the replies and errors associated with
+them. When used over a bus, messages have a destination, which means
+they are routed only to the interested parties, avoiding congestion
+due to "swarming" or broadcasting.
+
+A special kind of message called a "signal message" (a concept based
+on Qt's :ref:`Signals and Slots<Signals---Slots>` mechanism), however,
+does not have a pre-defined destination. Since its purpose is to be
+used in a one-to-many context, signal messages are designed to work
+over an "opt-in" mechanism.
+
+The Qt D-Bus module fully encapsulates the low-level concept of
+messages into a simpler, object-oriented approach familiar to Qt
+developers. In most cases, the developer need not worry about sending
+or receiving messages.
+
+Service Names
+^^^^^^^^^^^^^
+
+When communicating over a bus, applications obtain what is called a
+"service name": it is how that application chooses to be known by
+other applications on the same bus. The service names are brokered by
+the D-Bus bus daemon and are used to route messages from one
+application to another. An analogous concept to service names are IP
+addresses and hostnames: a computer normally has one IP address and
+may have one or more hostnames associated with it, according to the
+services that it provides to the network.
+
+On the other hand, if a bus is not used, service names are also not
+used. If we compare this to a computer network again, this would
+equate to a point-to-point network: since the peer is known, there is
+no need to use hostnames to find it or its IP address.
+
+The format of a D-Bus service name is in fact very similar to a host
+name: it is a dot-separated sequence of letters and digits. The common
+practice is even to name one's service name according to the domain
+name of the organization that defined that service.
+
+For example, the D-Bus service is defined by ``freedesktop.org`` and
+can be found on the bus under the service name:
+
+ ::
+
+ org.freedesktop.DBus
+
+Object Paths
+^^^^^^^^^^^^
+
+Like network hosts, applications provide specific services to other
+applications by exporting objects. Those objects are hierarchically
+organized, much like the parent-child relationship that classes
+derived from :class:`QObject<PySide6.QtCore.QObject>` possess. One
+difference, however, is that there is the concept of "root object",
+which all objects have as the ultimate parent.
+
+If we continue our analogy with Web services, object paths equate to
+the path part of a URL.
+
+Like them, object paths in D-Bus are formed resembling path names on
+the filesystem: they are slash-separated labels, each consisting of
+letters, digits and the underscore character ("\_"). They must always
+start with a slash and must not end with one.
+
+Interfaces
+^^^^^^^^^^
+
+Interfaces are similar to C++ abstract classes and Java's
+``interface`` keyword and declare the "contract" that is established
+between caller and callee. That is, they establish the names of the
+methods, signals, and properties that are available as well as the
+behavior that is expected from either side when communication is
+established.
+
+Qt uses a very similar mechanism in its Plugin system: Base classes in
+C++ are associated with a unique identifier by way of the
+:meth:`Q\_DECLARE\_INTERFACE()<~QtDBus.Q_DECLARE_INTERFACE>` macro.
+
+D-Bus interface names are, in fact, named in a manner similar to what
+is suggested by the Qt Plugin System: an identifier usually
+constructed from the domain name of the entity that defined that
+interface.
+
+Cheat Sheet
+^^^^^^^^^^^
+
+To facilitate remembering of the naming formats and their purposes,
+the following table can be used:
+
+ +-------------+------------------+---------------------------------------+
+ |D-Bus Concept|Analogy |Name format |
+ +-------------+------------------+---------------------------------------+
+ |Service name |Network hostnames |Dot-separated ("looks like a hostname")|
+ +-------------+------------------+---------------------------------------+
+ |Object path |URL path component|Slash-separated ("looks like a path") |
+ +-------------+------------------+---------------------------------------+
+ |Interface |Plugin identifier |Dot-separated |
+ +-------------+------------------+---------------------------------------+
+
+Debugging
+^^^^^^^^^
+
+When developing applications that use D-Bus, it is sometimes useful to
+be able to see information about the messages that are sent and
+received across the bus by each application.
+
+This feature can be enabled on a per-application basis by setting the
+``QDBUS_DEBUG`` environment variable before running each application.
+For example, we can enable debugging only for the car in the
+:ref:`D-Bus Remote Controlled Car
+Example<D-Bus-Remote-Controlled-Car-Example>` by running the
+controller and the car in the following way:
+
+ ::
+
+ QDBUS_DEBUG=1 python examples/dbus/pingpong/pong.py
+
+Information about the messages will be written to the console the
+application was launched from.
+
+Using the Module
+^^^^^^^^^^^^^^^^
+
+To include the definitions of modules classes, use the following
+directive:
+
+::
+
+ import PySide6.QtDBus
+
+Further Reading
+^^^^^^^^^^^^^^^
+
+The following documents contain information about Qt's D-Bus integration features, and provide details about the mechanisms used to send and receive type information over the bus:
+
+ * `Using Qt D-Bus Adaptors <https://doc.qt.io/qt-6/usingadaptors.html>`_
+ * `The Qt D-Bus Type System <https://doc.qt.io/qt-6/qdbustypesystem.html>`_
+ * `Qt D-Bus XML compiler (qdbusxml2cpp) <https://doc.qt.io/qt-6/qdbusxml2cpp.html>`_
+ * `D-Bus Viewer <https://doc.qt.io/qt-6/qdbusviewer.html>`_