systemd 221中的总线API。当我在系统总线中请求对象的名称时,它会打印出一个错误,显示"Permission denied"。我正在以root用户身份运行输出文件。行"sd_bus_request_name(bus," net. poettering. Calculator ",0)"抛出一个错误:"获取服务名称失败..:权限被拒绝"
我认为root应该有权限获取对象的名称。有人知道如何解决这个问题吗?
先谢谢你。
下面是http://0pointer.net/blog/the-new-sd-bus-api-of-systemd.html中的示例代码:
int main(int argc, char *argv[]) {
sd_bus_slot *slot = NULL;
sd_bus *bus = NULL;
int r;
r = sd_bus_default_system(&bus);
if (r < 0) {
fprintf(stderr, "Failed to connect to system bus: %s\n", strerror(-r));
goto finish;
}
/* Install the object */
r = sd_bus_add_object_vtable(bus,
&slot,
"/net/poettering/Calculator",
"net.poettering.Calculator", /* interface name */calculator_vtable,
NULL);
if (r < 0) {
fprintf(stderr, "Failed to issue method call: %s\n", strerror(-r));
goto finish;
}
/* Take a well-known service name so that clients can find us */
r = sd_bus_request_name(bus, "net.poettering.Calculator", 0);
if (r < 0) {
fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-r));
goto finish;
}
3条答案
按热度按时间u4dcyp6a1#
典型的默认D-Bus配置不允许注册服务,除非显式允许。您需要允许root用户注册您的服务。创建/etc/dbus-1/system.d/net.poettering.Calculator.conf:
有关详细信息,请阅读man dbus-daemon。
83qze16e2#
我不知道这是否有用,但我发现了一个变通方法,不是最推荐的,因为您允许用户在系统总线中创建dbus对象,而无需列出它们或为其提供特定的配置文件。
sudo
编辑/usr/share/dbus-1/system.conf
中的文件。Holes must be punched...
短语下面各行的内容。x1米3英寸x1米4英寸
<deny own="*"/
<deny send_type="method_call"/>
通过这些更改,sd_bus_request_name返回Permission denied错误至少在我的情况下得到了解决。
tzcvj98z3#