1

Linux BLE Gatt 服务器程序在作为服务运行时无法检索 dbus org.bluez 对象。当我以 root 身份使用终端运行程序时,程序运行良好,但当我尝试将程序作为服务运行时,程序会失败。

这是我的 systemd testproj.service 文件

[Unit]
Description=Start BLE Gatt Server

[Service]
Type=dbus
BusName=com.testproj
WorkingDirectory=/home/root/ble_gatt_server
ExecStart=/home/root/ble_gatt_server/standalone
User=root


[Install]
WantedBy=multi-user.target

以下是我对 dbus testproj.conf 内容的许可文件

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <policy user="root">
    <allow own="com.testproj"/>
    <allow send_destination="com.testproj"/>
    <allow send_destination="org.bluez"/>
  </policy>
  <policy at_console="true">
    <allow own="com.testproj"/>
    <allow send_destination="com.testproj"/>
    <allow send_destination="org.bluez"/>
  </policy>
  <policy group="lp">
    <allow own="com.testproj"/>
    <allow send_destination="com.testproj"/>
    <allow send_destination="org.bluez"/>
  </policy>
  <policy context="default">
    <allow own="com.testproj"/>
    <allow send_destination="com.testproj"/>
    <allow send_destination="org.bluez"/>
  </policy>
</busconfig>

以下是我对 dbus bluetooth.conf 内容的许可文件

<!-- This configuration file specifies the required security policies
     for Bluetooth core daemon to work. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <!-- ../system.conf have denied everything, so we just punch some holes -->

  <policy user="root">
    <allow own="org.bluez"/>
    <allow send_destination="org.bluez"/>
    <allow send_interface="org.bluez.Agent1"/>
    <allow send_interface="org.bluez.MediaEndpoint1"/>
    <allow send_interface="org.bluez.MediaPlayer1"/>
    <allow send_interface="org.bluez.ThermometerWatcher1"/>
    <allow send_interface="org.bluez.AlertAgent1"/>
    <allow send_interface="org.bluez.Profile1"/>
    <allow send_interface="org.bluez.HeartRateWatcher1"/>
    <allow send_interface="org.bluez.CyclingSpeedWatcher1"/>
    <allow send_interface="org.bluez.GattCharacteristic1"/>
    <allow send_interface="org.bluez.GattDescriptor1"/>
    <allow send_interface="org.freedesktop.DBus.ObjectManager"/>
    <allow send_interface="org.freedesktop.DBus.Properties"/>
  </policy>

  <policy at_console="true">
    <allow send_destination="org.bluez"/>
  </policy>

  <!-- allow users of lp group (printing subsystem) to 
       communicate with bluetoothd -->
  <policy group="lp">
    <allow send_destination="org.bluez"/>
  </policy>

  <policy context="default">
    <deny send_destination="org.bluez"/>
  </policy>

</busconfig>
4

0 回答 0