由于 UnknownMethod 错误导致 xfce4 上出现多个卷通知

由于 UnknownMethod 错误导致 xfce4 上出现多个卷通知

该错误的明显部分是我在更改音量时收到多个通知:

多音量通知

症状看起来与AskUbuntu 上的一个问题但是,由于这可能是一个不同的原因,而且我实际上并没有使用 Ubuntu,所以我提出了一个新问题。

经过一番修补后,我发现了一些奇怪的事情。当调用D-Bus服务Notify的方法时xorg.freedesktop.Notifications,我可以显示通知,但返回错误:

调用 Notify 方法有效,但返回错误

由于我用来d-feet浏览 D-Bus 服务并检查方法签名,所以我很高兴我使用了正确的参数类型(否则我会得到更具体的错误)。使用时我遇到同样的错误notify-send

~% notify-send a                                                              
GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: Method "Notify" with signature "susssasa{sv}i" on interface "org.freedesktop.Notifications" doesn't exist

至少有一个人在同一时间遇到了同样的问题:https://www.linuxquestions.org/questions/slackware-14/pygobject-desktop-notifications-stopped-working-4175710943/

当与没有 bug 的 Xubuntu 20.04 进行比较时,我发现它应该返回通知的 id,然后可以将其用作replacedid更新通知的参数。这可以解释为什么xfce4-pulseaudio-plugin无法更新第一个通知而是打开新通知。

我正在使用 Debian 测试(书虫)和最新更新,以及xfce4=4.16xfce4-pulseaudio-plugin=0.4.3-1和。另请注意,实际上是由以下提供的:xfce4-notifyd=0.6.3-1dbus=1.14.0-1xorg.freedesktop.Notifications/usr/share/dbus-1/services/org.xfce.xfce4-notifyd.Notifications.service

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/lib/x86_64-linux-gnu/xfce4/notifyd/xfce4-notifyd
SystemdService=xfce4-notifyd.service

我想这可能是xfce4-pulseaudio-plugin、、、或者更可能是我的配置dbus的错误。xfce4-notifyd我该怎么做才能弄清真相?

答案1

我认为找到解决方案还不够,但仅查看 D-Bus 日志就让我走上了正轨。

因此,我在打开通知时运行了以下命令d-feet

dbus-monitor >log

在日志中,我能够找到相应的交换:

method call time=1656781561.510107 sender=:1.75 -> destination=:1.48 serial=325 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
   string "Test"
   uint32 0
   string "computer"
   string "Title"
   string "Body"
   array [
   ]
   array [
   ]
   int32 1
error time=1656781561.510300 sender=:1.61 -> destination=:1.75 error_name=org.freedesktop.DBus.Error.UnknownMethod reply_serial=325
   string "Method "Notify" with signature "susssasa{sv}i" on interface "org.freedesktop.Notifications" doesn't exist
"

它包含与我相同的信息,除了它还包括通信服务的 ID。您可以看到方法调用是从:1.75d-tree本身)发送到(按照 的:1.48D-Bus 服务,如下面的屏幕截图所示)。xfce4-notifydd-tree

d-tree中xfce4-notifyd提供的D-Bus服务

然而,错误来自:1.61。查看d-tree,我注意到eavesdrop=true,它暗示另一个服务对方法调用做了一些事情。

d-tree 中另一个意想不到的服务

环顾四周,我最终发现一篇关于在 D-bus 的 session.conf 中弃用窃听的文章。扫描我的系统,我找到/usr/share/dbus-1/session.conf,应用以下补丁并重新启动我的会话。现在,一切都很好!

-    <allow send_destination="*" eavesdrop="true"/>
+    <allow send_destination="*" eavesdrop="false"/>
     <!-- Allow everything to be received -->
-    <allow eavesdrop="true"/>
+    <allow eavesdrop="false"/>

我的理解是,原始服务正常工作,但另一个服务尝试处理它,但失败了,因为它没有正确的Notify方法(或错误的签名)。我不知道这种窃听从何而来,正确的修复意味着识别它。然而,解决方法似乎解决了我最初的问题。


编辑:我通过跑步找到了罪魁祸首grep -r freedesktop.Notifications ~/.local。原来是我没有更新发现覆盖,不受 管理apt。运行pip install --upgrade discover-overlay并将更改恢复为后/usr/share/dbus-1/session.conf,一切都恢复正常!

相关内容