blob: 4ddeb4d09b331b1663fb7a00e692247e3891ab7b [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gdbus: GIO Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="GIO Reference Manual">
<link rel="up" href="tools.html" title="GIO Tools">
<link rel="prev" href="glib-compile-resources.html" title="glib-compile-resources">
<link rel="next" href="gdbus-codegen.html" title="gdbus-codegen">
<meta name="generator" content="GTK-Doc V1.25.1 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="tools.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="glib-compile-resources.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gdbus-codegen.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div lang="en" class="refentry">
<a name="gdbus"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle">gdbus</span></h2>
<p>gdbus — Tool for working with D-Bus objects</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="cmdsynopsis"><p><code class="command">gdbus</code> introspect [ --system | --session | --address <em class="replaceable"><code>address</code></em> ] --dest <em class="replaceable"><code>bus_name</code></em> --object-path <em class="replaceable"><code>/path/to/object</code></em> [ --xml ] [ --recurse ] [ --only-properties ]</p></div>
<div class="cmdsynopsis"><p><code class="command">gdbus</code> monitor [ --system | --session | --address <em class="replaceable"><code>address</code></em> ] --dest <em class="replaceable"><code>bus_name</code></em> [ --object-path <em class="replaceable"><code>/path/to/object</code></em> ]</p></div>
<div class="cmdsynopsis"><p><code class="command">gdbus</code> call [ --system | --session | --address <em class="replaceable"><code>address</code></em> ] --dest <em class="replaceable"><code>bus_name</code></em> --object-path <em class="replaceable"><code>/path/to/object</code></em> --method <em class="replaceable"><code>org.project.InterfaceName.MethodName</code></em> [ --timeout <em class="replaceable"><code>seconds</code></em> ] ARG1 ARG2... </p></div>
<div class="cmdsynopsis"><p><code class="command">gdbus</code> emit [ --system | --session | --address <em class="replaceable"><code>address</code></em> ] --object-path <em class="replaceable"><code>/path/to/object</code></em> --signal <em class="replaceable"><code>org.project.InterfaceName.SignalName</code></em> [ --dest <em class="replaceable"><code>unique_bus_name</code></em> ] ARG1 ARG2... </p></div>
<div class="cmdsynopsis"><p><code class="command">gdbus</code> help </p></div>
</div>
<div class="refsect1">
<a name="id-1.4.26.6.5"></a><h2>Description</h2>
<p>
<span class="command"><strong>gdbus</strong></span> is a simple tool for working with D-Bus objects.
</p>
</div>
<div class="refsect1">
<a name="id-1.4.26.6.6"></a><h2>Commands</h2>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term"><code class="option">introspect</code></span></p></td>
<td><p>
Prints out interfaces and property values for a remote object.
For this to work, the owner of the object needs to implement the
<code class="literal">org.freedesktop.DBus.Introspectable</code> interface.
If the <code class="option">--xml</code> option is used, the returned
introspection XML is printed, otherwise a parsed pretty
representation is printed.
The <code class="option">--recurse</code> option can be used to
introspect children (and their children and so on) and the
<code class="option">--only-properties</code> option can be used to
only print the interfaces with properties.
</p></td>
</tr>
<tr>
<td><p><span class="term"><code class="option">monitor</code></span></p></td>
<td><p>
Monitors one or all objects owned by the owner of
<em class="replaceable"><code>bus_name</code></em>.
</p></td>
</tr>
<tr>
<td><p><span class="term"><code class="option">call</code></span></p></td>
<td><p>
Invokes a method on a remote object. Each argument to pass to the
method must be specified as a serialized
<a href="../glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> except that strings do
not need explicit quotes. The return values are printed out as
serialized <a href="../glib-GVariant.html#GVariant"><span class="type">GVariant</span></a>
values.
</p></td>
</tr>
<tr>
<td><p><span class="term"><code class="option">emit</code></span></p></td>
<td><p>
Emits a signal. Each argument to include in the signal must be specified as a serialized
<a href="../glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> except that strings do
not need explicit quotes.
</p></td>
</tr>
<tr>
<td><p><span class="term"><code class="option">help</code></span></p></td>
<td><p>
Prints help and exit.
</p></td>
</tr>
</tbody>
</table></div>
</div>
<div class="refsect1">
<a name="id-1.4.26.6.7"></a><h2>Bash Completion</h2>
<p>
<span class="command"><strong>gdbus</strong></span> ships with a bash completion script to
complete commands, destinations, bus names, object paths and
interface/method names.
</p>
</div>
<div class="refsect1">
<a name="id-1.4.26.6.8"></a><h2>Examples</h2>
This shows how to introspect an object - note that the value of each
property is displayed:
<pre class="programlisting">
$ gdbus introspect --system \
--dest org.freedesktop.NetworkManager \
--object-path /org/freedesktop/NetworkManager/Devices/0
node /org/freedesktop/NetworkManager/Devices/0 {
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s data);
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s propname,
out v value);
Set(in s interface,
in s propname,
in v value);
GetAll(in s interface,
out a{sv} props);
};
interface org.freedesktop.NetworkManager.Device.Wired {
signals:
PropertiesChanged(a{sv} arg_0);
properties:
readonly b Carrier = false;
readonly u Speed = 0;
readonly s HwAddress = '00:1D:72:88:BE:97';
};
interface org.freedesktop.NetworkManager.Device {
methods:
Disconnect();
signals:
StateChanged(u arg_0,
u arg_1,
u arg_2);
properties:
readonly u DeviceType = 1;
readonly b Managed = true;
readwrite o Ip6Config = '/';
readwrite o Dhcp4Config = '/';
readwrite o Ip4Config = '/';
readonly u State = 2;
readwrite u Ip4Address = 0;
readonly u Capabilities = 3;
readonly s Driver = 'e1000e';
readwrite s Interface = 'eth0';
readonly s Udi = '/sys/devices/pci0000:00/0000:00:19.0/net/eth0';
};
};
</pre>
<p>
The <code class="option">--recurse</code> and <code class="option">--only-properties</code> options can be useful when wanting to inspect all objects owned by a particular process:
</p>
<pre class="programlisting">
$ gdbus introspect --system --dest org.freedesktop.UPower --object-path / --recurse --only-properties
node / {
node /org {
node /org/freedesktop {
node /org/freedesktop/UPower {
interface org.freedesktop.UPower {
properties:
readonly b IsDocked = true;
readonly b LidForceSleep = false;
readonly b LidIsPresent = false;
readonly b LidIsClosed = false;
readonly b OnLowBattery = false;
readonly b OnBattery = false;
readonly b CanHibernate = true;
readonly b CanSuspend = true;
readonly s DaemonVersion = '0.9.10';
};
node /org/freedesktop/UPower/Policy {
};
node /org/freedesktop/UPower/Wakeups {
interface org.freedesktop.UPower.Wakeups {
properties:
readonly b HasCapability = true;
};
};
};
};
};
};
</pre>
<p>
In a similar fashion, the <code class="option">introspect</code> command can be
used to learn details about the <code class="literal">Notify</code> method:
</p>
<pre class="programlisting">
[...]
interface org.freedesktop.Notifications {
methods:
GetServerInformation(out s return_name,
out s return_vendor,
out s return_version,
out s return_spec_version);
GetCapabilities(out as return_caps);
CloseNotification(in u id);
Notify(in s app_name,
in u id,
in s icon,
in s summary,
in s body,
in as actions,
in a{sv} hints,
in i timeout,
out u return_id);
};
[...]
</pre>
<p>
With this information, it's easy to use the <code class="option">call</code>
command to display a notification
</p>
<pre class="programlisting">
$ gdbus call --session \
--dest org.freedesktop.Notifications \
--object-path /org/freedesktop/Notifications \
--method org.freedesktop.Notifications.Notify \
my_app_name \
42 \
gtk-dialog-info \
"The Summary" \
"Here's the body of the notification" \
[] \
{} \
5000
(uint32 12,)
</pre>
<p>
Monitoring all objects on a service:
</p>
<pre class="programlisting">
$ gdbus monitor --system --dest org.freedesktop.ConsoleKit
Monitoring signals from all objects owned by org.freedesktop.ConsoleKit
The name org.freedesktop.ConsoleKit is owned by :1.15
/org/freedesktop/ConsoleKit/Session2: org.freedesktop.ConsoleKit.Session.ActiveChanged (false,)
/org/freedesktop/ConsoleKit/Seat1: org.freedesktop.ConsoleKit.Seat.ActiveSessionChanged ('',)
/org/freedesktop/ConsoleKit/Session2: org.freedesktop.ConsoleKit.Session.ActiveChanged (true,)
/org/freedesktop/ConsoleKit/Seat1: org.freedesktop.ConsoleKit.Seat.ActiveSessionChanged ('/org/freedesktop/ConsoleKit/Session2',)
</pre>
<p>
Monitoring a single object on a service:
</p>
<pre class="programlisting">
$ gdbus monitor --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager/AccessPoint/4141
Monitoring signals on object /org/freedesktop/NetworkManager/AccessPoint/4141 owned by org.freedesktop.NetworkManager
The name org.freedesktop.NetworkManager is owned by :1.5
/org/freedesktop/NetworkManager/AccessPoint/4141: org.freedesktop.NetworkManager.AccessPoint.PropertiesChanged ({'Strength': &lt;byte 0x5c&gt;},)
/org/freedesktop/NetworkManager/AccessPoint/4141: org.freedesktop.NetworkManager.AccessPoint.PropertiesChanged ({'Strength': &lt;byte 0x64&gt;},)
/org/freedesktop/NetworkManager/AccessPoint/4141: org.freedesktop.NetworkManager.AccessPoint.PropertiesChanged ({'Strength': &lt;byte 0x5e&gt;},)
/org/freedesktop/NetworkManager/AccessPoint/4141: org.freedesktop.NetworkManager.AccessPoint.PropertiesChanged ({'Strength': &lt;byte 0x64&gt;},)
</pre>
<p>
Emitting a signal:
</p>
<pre class="programlisting">
$ gdbus emit --session --object-path /foo --signal org.bar.Foo "['foo', 'bar', 'baz']"
</pre>
<p>
Emitting a signal to a specific process:
</p>
<pre class="programlisting">
$ gdbus emit --session --object-path /bar --signal org.bar.Bar someString --dest :1.42
</pre>
</div>
<div class="refsect1">
<a name="id-1.4.26.6.9"></a><h2>Bugs</h2>
<p>
Please send bug reports to either the distribution bug tracker
or the upstream bug tracker at
<a class="ulink" href="https://bugzilla.gnome.org/enter_bug.cgi?product=glib" target="_top">https://bugzilla.gnome.org/enter_bug.cgi?product=glib</a>.
</p>
</div>
<div class="refsect1">
<a name="id-1.4.26.6.10"></a><h2>See Also</h2>
<p>
<span class="citerefentry"><span class="refentrytitle">dbus-send</span>(1)</span>
</p>
</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25.1</div>
</body>
</html>