该错误的明显部分是我在更改音量时收到多个通知:
症状看起来与AskUbuntu 上的一个问题但是,由于这可能是一个不同的原因,而且我实际上并没有使用 Ubuntu,所以我提出了一个新问题。
经过一番修补后,我发现了一些奇怪的事情。当调用D-Bus服务Notify
的方法时xorg.freedesktop.Notifications
,我可以显示通知,但返回错误:
由于我用来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.16
、xfce4-pulseaudio-plugin=0.4.3-1
和。另请注意,实际上是由以下提供的:xfce4-notifyd=0.6.3-1
dbus=1.14.0-1
xorg.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.75
(d-tree
本身)发送到(按照 的:1.48
D-Bus 服务,如下面的屏幕截图所示)。xfce4-notifyd
d-tree
然而,错误来自:1.61
。查看d-tree
,我注意到eavesdrop=true
,它暗示另一个服务对方法调用做了一些事情。
环顾四周,我最终发现一篇关于在 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
,一切都恢复正常!