DBus:无法获取用户会话总线的匹配规则



我试图使用dbus/tools/GetAllMatchRules.py来获取诊断信息。当我作为普通用户不带参数地运行它时,我得到"GetConnectionMatchRules失败:你启用了Stats接口吗?">

我修改了GetAllMatchRules以打印特定的异常细节。现在显示

GetConnectionMatchRules failed:你启用了Stats接口吗?: org.freedesktop.DBus.Error.AccessDenied:调用者没有必要的特权来调用这个方法

所以我想知道,它到底起作用了吗?所以我sudo su并再次运行它,它给出了我期望看到的信息,只是不是针对正确的总线。奇怪的是,如果我使用——system参数,即使是root也会得到org.freedesktop.DBus.Error.AccessDenied。

存储库声明,在bus/example-session-disable-stats.conf中。在那里面如果Stats接口在编译时启用,则用户可以使用它默认为会话总线。提供进程隔离的系统使用lsm的人可能想要限制这一点。这可以通过复制来实现该文件位于@ expded_sysconfdir @/dbus-1/session.d/中">

但显然不是这样,因为我的用户不能访问这些信息。

我甚至尝试了一种蛮力方法来禁用(注释掉)/usr/share/dbus-1/system.conf中的所有deny语句并重新加载,但它仍然不起作用。我还尝试了一个完整的系统重启,以防我没有正确地重新加载。我还在系统范围内搜索了system.conf,以防它实际上使用了一些我没有看到的其他配置文件,这意味着我修改了错误的东西。我得到了一个很大的提示,当我有一个错字(——而不是——>(用于注释),它无法重新加载,但在我修复了拼写错误后重新加载。

我对我只能以root身份登录的可能性很好,所以我也尝试修改GetAllMatchRules以使用dbus.bus.BusConnection(),并强制输入会话地址(unix:path=/run/user/1000/bus),从而导致

"org.freedesktop.DBus.Error.NoReply:未收到回复。可能的原因包括:远程应用程序未发送应答、消息总线安全策略阻止应答、应答超时过期或网络连接中断。">

顺便说一下,如果我不修改代码,但使用sudo -E su而不是sudo su(在这种情况下-E选项意味着保留$DBUS_SESSION_BUS_ADDRESS变量),也会发生同样的问题。

我不知道下一步该做什么…

目前没有解决方案,特权错误只是选择的代码,表明该方法是未实现的存根方法

最新更新