1、编译后,由于没有进行配置,默认是无法运行的。
为了可以正常运行,增加或修改下面的配置文件即可。
/etc/dbus-1.0/system-local.conf
<!-- This configuration file controls the systemwide message bus. Add a system-local.conf and edit that rather than changing this file directly. --> <!-- Note that there are any number of ways you can hose yourself security-wise by screwing up this file; in particular, you probably don't want to listen on any more addresses, add any more auth mechanisms, run as a different user, etc. --> <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <!-- Our well-known bus type, do not change this --> <type>system</type> <!-- Run as special user --> <user>messagebus</user> <!-- Fork into daemon mode --> <fork/> <!-- We use system service launching using a helper --> <standard_system_servicedirs/> <!-- This is a setuid helper that is used to launch system services --> <servicehelper>/usr/lib/dbus-1.0/dbus-daemon-launch-helper</servicehelper> <!-- Write a pid file --> <pidfile>/var/run/dbus/pid</pidfile> <!-- Enable logging to syslog --> <syslog/> <!-- Only allow socket-credentials-based authentication --> <auth>EXTERNAL</auth> <!-- Only listen on a local socket. (abstract=/path/to/socket means use abstract namespace, don't really create filesystem file; only Linux supports this. Use path=/whatever on other systems.) --> <listen>unix:path=/var/run/dbus/system_bus_socket</listen> <policy context="default"> <!-- All users can connect to system bus --> <allow user="*"/> <!-- Holes must be punched in service configuration files for name ownership and sending method calls --> <allow own="*"/> <allow send_type="method_call"/> <!-- Signals and reply messages (method returns, errors) are allowed by default --> <allow send_type="signal"/> <allow send_requested_reply="true" send_type="method_return"/> <allow send_requested_reply="true" send_type="error"/> <!-- All messages may be received by default --> <allow receive_type="method_call"/> <allow receive_type="method_return"/> <allow receive_type="error"/> <allow receive_type="signal"/> <!-- Allow anyone to talk to the message bus --> <allow send_destination="org.freedesktop.DBus"/> <!-- But disallow some specific bus services --> <deny send_destination="org.freedesktop.DBus" send_interface="org.freedesktop.DBus" send_member="UpdateActivationEnvironment"/> <deny send_destination="org.freedesktop.DBus" send_interface="org.freedesktop.systemd1.Activator"/> </policy> <!-- Only systemd, which runs as root, may report activation failures. --> <policy user="root"> <allow send_destination="org.freedesktop.DBus" send_interface="org.freedesktop.systemd1.Activator"/> </policy> <!-- Config files are placed here that among other things, punch holes in the above policy for specific services. --> <includedir>system.d</includedir> <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include> </busconfig>
2、测试消息发送
服务端:
$./testdbus_s.bin receive Listening for signals Match rule sent Got Signal with value: Hello Got Signal with value: Hi Bye......
客户端:
$./testdbus_s.bin send Hello Sending signal with value: Hello Signal Sent $./testdbus_s.bin send Hi Sending signal with value: Hi Signal Sent $./testdbus_s.bin send Bye Sending signal with value: Bye Signal Sent
3、测试方法调用
服务端:
$./testdbus_s.bin listen Listening for method calls Method Invoked with value: Hello Method Invoked with value: Hi Bye......
客户端:
$./testdbus_s.bin query Hello Calling remote method with Hello Request Sent Got Reply: 1, 21614 $./testdbus_s.bin query Hi Calling remote method with Hi Request Sent Got Reply: 1, 21614 $./testdbus_s.bin query Bye Calling remote method with Bye Request Sent Got Reply: 1, 21614