Arch-Linux

通知和通知守護程序在視窗管理器上不起作用

  • April 12, 2021

通知不適用於 Linux 獨立視窗管理器(Openbox、Awesome WM 等)。我嘗試安裝通知守護程序和 dunst,但發送 withnotify-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 權限的通知?

最後我自己解決了問題。

我會留下指示我做了什麼。

問題由兩部分組成:

  1. 無法從 Windows 管理器中訪問 Dbus
  2. 通知守護程序無法從 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 代理也應該可以正常工作。

引用自:https://unix.stackexchange.com/questions/89016