通知和通知守護程序在視窗管理器上不起作用
通知不適用於 Linux 獨立視窗管理器(Openbox、Awesome WM 等)。我嘗試安裝通知守護程序和 dunst,但發送 with
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
平凡的 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
我什至嘗試過直接執行守護程序(只是執行)並嘗試發送通知。如果有人知道我如何獲得更多資訊,請隨時提出建議。
**編輯 2:**我嘗試使用 sudo:
sudo notification-daemon_name &
(在我的情況下sudo dunst &
)和執行通知守護程序sudo notify-send something
,然後通知工作。但是,當我嘗試以非特權使用者身份執行上述任何操作時(這對於大多數程序作為非特權使用者發送通知很重要),什麼都沒有顯示。
notification-daemon
在沒有任何錯誤或警告的情況下拒絕工作。**編輯 3:**顯然這是權限問題:沒有 root 訪問權限我無法發送通知。乾淨重啟後:
sudo notify-send "something"
即使沒有手動啟動任何守護程序也可以工作,但是我(和我啟動的程序)應該做些什麼才能在 Gnome 或任何其他完整桌面環境中發送沒有 root 權限的通知?
最後我自己解決了問題。
我會留下指示我做了什麼。
問題由兩部分組成:
- 無法從 Windows 管理器中訪問 Dbus
- 通知守護程序無法從 dbus 獲取消息
第一個問題解決方案:
真正的問題是,我的 Windows 管理器是從 lxdm 執行的,由於某種原因,它不會合併
/etc/X11/xinit/xinitrc.d
除 lxde 會話之外的配置文件(在 LXDE dbus 中有效,在真棒 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
這部分程式碼定義了
$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
問題二:
雖然 dbus 執行並且可用於其他程序,但它仍然需要更多訪問權限才能使通知正常工作,所以我需要執行 polkit 代理,因為 Awesome WM 沒有。我選擇了
lxpolkit
,因為我已經擁有了幾乎完整的 lxde 環境。就我而言,剛剛添加到我的~/.config/awesome/rc.lua
文件中:awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop")
,由於某種原因,沒有這一行,它預設拒絕以 lxdm 開頭。我認為 gnome polkit 代理也應該可以正常工作。