通知和通知守护进程在窗口管理器上不起作用

IBr*_*IBr 14 arch-linux notifications libnotify

通知不适用于 Linux 独立窗口管理器(Openbox、Awesome WM 等)。我尝试安装notification-daemon和dunst,但发送时notify-send "something"没有弹出任何窗口。

我试图运行 polkit-gnome-agent 并直接运行通知守护进程,但它没有帮助(之前我用这种方式解决了类似的问题,但现在它什么也不做)。

除非我用 python 发送微不足道的通知,否则没有任何错误迹象,然后我只收到模糊的错误消息:

File "/usr/lib/python3.3/site-packages/gi/types.py", line 113, in function
    return info.invoke(*args, **kwargs)
gi._glib.GError: Could not connect: Connection refused
Run Code Online (Sandbox Code Playgroud)

琐碎的 C 程序不输出任何内容(例如没有错误)。

我正在将 Archlinux 与 systemd 和 d-bus 一起使用,我怀疑是 polkit 或某种守护程序没有在窗口管理器启动时运行的问题,但不知道我可以尝试什么或如何获得更有意义的错误消息。

编辑:我从那里获取了示例代码:https : //wiki.archlinux.org/index.php/Libnotify#Python

Dbus 应该正在运行,因为 systemd 将其作为依赖项。我已经libnotify安装 - 它是提供notify-send. 此外,通知守护程序应根据需要启动(仅当通知到达时),通过以下桌面文件/usr/share/dbus-1/services/org.freedesktop.Notifications.service

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/bin/dunst
Run Code Online (Sandbox Code Playgroud)

我什至尝试过直接运行守护进程(只是执行)并尝试发送通知。如果有人知道我如何才能获得更多信息,请不要犹豫,提出建议。

编辑 2:我尝试使用 sudo: sudo notification-daemon_name &(在我的情况下sudo dunst &)和运行通知守护程序sudo notify-send something,然后通知工作。但是,当我尝试以非特权用户身份执行之前的任何操作(这很重要,大多数程序以非特权用户身份发送通知)时,没有任何显示。

notification-daemon 拒绝在没有任何错误或警告的情况下工作。

编辑 3:显然是权限问题:没有 root 访问权限我无法发送通知。干净重启后:sudo notify-send "something"即使不手动启动任何守护进程也能工作,但是我(和我启动的程序)应该怎么做才能在没有 root 权限的情况下发送通知,因为这在 Gnome 或任何其他完整的桌面环境中是可能的?

IBr*_*IBr 9

最后我自己解决了问题。

我会留下指示我做了什么。

问题由两部分组成:

  1. 无法从 Windows 管理器中访问 Dbus
  2. 通知守护进程无法从 dbus 获取消息

问题一解决:

真正的问题是,我的 Windows 管理器是从 lxdm 运行的,出于某种原因,它不会合并来自/etc/X11/xinit/xinitrc.dlxde 会话以外的配置文件(在 LXDE dbus 中有效,在 awesome wm 中没有)。在此文件夹中存在以30-dbus以下内容命名的文件:

#!/bin/bash

# launches a session dbus instance
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && type dbus-launch >/dev/null; then
  eval $(dbus-launch --sh-syntax --exit-with-session)
fi
Run Code Online (Sandbox Code Playgroud)

这部分代码定义了$DBUS_SESSION_BUS_ADDRESS变量,该变量定义了用于各种应用程序的 dbus 端口。echo $DBUS_SESSION_BUS_ADDRESS可以用作简单的健全性检查以查看 dbus 会话是否存在(它应该返回 dbus 会话文件)。

此文件夹中的配置文件可以在会话开始时与简单的 shell 脚本合并(代码取自.xinitrc):

#!/bin/bash

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi
Run Code Online (Sandbox Code Playgroud)

问题二解决:

虽然 dbus 正在运行并且可用于其他程序,但它仍然需要更多的访问权限才能使通知正常工作,所以我需要运行 polkit 代理,因为 Awesome WM 没有。我选择了lxpolkit,因为我已经拥有几乎完整的 lxde 环境。在我的情况下,刚刚添加到我的~/.config/awesome/rc.lua文件中: awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop"),由于某种原因没有这一行,它拒绝默认使用 lxdm 启动。

我认为 gnome polkit 代理也应该可以正常工作。