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 或任何其他完整的桌面环境中是可能的?
最后我自己解决了问题。
我会留下指示我做了什么。
问题由两部分组成:
问题一解决:
真正的问题是,我的 Windows 管理器是从 lxdm 运行的,出于某种原因,它不会合并来自/etc/X11/xinit/xinitrc.d
lxde 会话以外的配置文件(在 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 代理也应该可以正常工作。