как выставить методы на системной шине используя Qtdbus - PullRequest
4 голосов
/ 27 января 2012

Я хочу представить методы моего приложения на системной шине, используя Qt Dbus в Qt Creator. при использовании сеансовой шины методы становятся доступными, но с системной шиной я могу видеть только имя службы, под которой я зарегистрировался, но нет доступных для нее методов (я проверяю это в D-футах) Что мне делать?

1 Ответ

2 голосов
/ 02 октября 2013

Вы должны поместить свой конфигурационный файл (например, example-dbus.conf) в /etc/dbus-1/system.d/

Файл example-dbus.conf выглядит следующим образом:

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

<busconfig>
  <!-- Only root user can own the service -->
  <policy user="root">
    <allow own="com.company.qtdbus"/>
  </policy>

  <!-- Allow anyone to invoke methods on server, except SetHostName -->
  <policy context="default">
    <allow send_destination="com.company.qtdbus"/>
    <allow receive_sender="com.company.qtdbus"/>

    <deny send_destination="com.company.qtdbus"
          send_interface="com.company.qtdbus.Server" send_member="SetHostName"/>
  </policy>

  <!-- Allow everything, including access to SetHostName -->
  <policy user="root">
    <allow send_destination="com.company.qtdbus"/>
    <allow receive_sender="com.company.qtdbus"/>
  </policy>
</busconfig>

Перезапустите демон dbus с помощью /etc/init.d/d-bus restart, и теперь вам будет разрешено подключиться к системной шине. Фактически, если вам не разрешено подключаться к системной шине, появится сообщение об ошибке.

...