Уведомления не работают в автономных оконных менеджерах 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
Тривиальная программа 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
Я даже пытался запускать демоны напрямую (просто выполнять) и пытался отправлять уведомления. Если somenone знает, как я могу получить больше информации, пожалуйста, не стесняйтесь предлагать.
РЕДАКТИРОВАТЬ 2: Я попытался запустить демон уведомлений с sudo: sudo notification-daemon_name &
(в моем случае sudo dunst &
), а sudo notify-send something
затем уведомление работает. Но когда я пытаюсь выполнить какое-либо из предыдущих действий от имени непривилегированного пользователя (что важно, большинство программ отправляют уведомления непривилегированным пользователям), ничего не отображается.
notification-daemon
отказывается работать вообще без каких-либо ошибок или предупреждений.
РЕДАКТИРОВАТЬ 3: Очевидно, это проблема с разрешениями: я не могу отправлять уведомления без root-доступа. После чистой перезагрузки: sudo notify-send "something"
работает даже без ручного запуска каких-либо демонов, однако что я (и мои запущенные программы) должен сделать, чтобы иметь возможность отправлять уведомления без привилегий root, как это возможно в Gnome или любых других средах полного рабочего стола?
libnotify
поскольку это обеспечиваетnotify-send
команду (это все, что вам нужно)?Ответы:
Наконец я решил проблему сам.
Я оставлю инструкции, что я сделал.
Проблема состоит из двух частей:
1-е решение проблемы:
Реальная проблема заключалась в том, что мой менеджер окон был запущен из lxdm, который по какой-то причине не объединяет конфигурационные файлы,
/etc/X11/xinit/xinitrc.d
за исключением сеанса lxde (в LXDE работает dbus, в удивительном wm - нет). В этой папке существует файл с именем30-dbus
следующего содержания:Эта часть кода определяет
$DBUS_SESSION_BUS_ADDRESS
переменную, которая определяет порт dbus для использования в различных приложениях.echo $DBUS_SESSION_BUS_ADDRESS
может использоваться как простая проверка работоспособности, чтобы увидеть, существует ли сеанс dbus (он должен возвращать файл сеанса dbus).Файлы конфигурации из этой папки могут быть объединены с простым сценарием оболочки при запуске сеанса (код взят из
.xinitrc
):2-е решение проблемы:
Несмотря на то, что dbus работает и доступен для других программ, ему все еще нужен больший доступ для корректной работы уведомлений, поэтому мне нужно было запустить агент polkit, потому что в Awesome WM его нет. Я выбрал
lxpolkit
, потому что у меня уже была почти полная среда lxde. В моем случае, просто добавили в мой~/.config/awesome/rc.lua
файл:awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop")
по какой-то причине без этой строки он отказался запускаться по умолчанию с lxdm.Я думаю, что агент Gnome Polkit тоже должен работать.
источник
.xinitrc
/ я забыл, как называется другой вариант. эти файлы эквивалентны (какой из них зависит от дистрибутива) и используются только при вызовеstartx
илиxinit
из консоли. вероятно, причина загрузки системного файла заключается в том, что это происходит в LXDE, а не в LXDM..xinitrc
это запустить любые фоновые демоны, которые не будут включены позже (вы сделаете это, если у вас не было, например,gnome-session
сделать это для вас), а затем в самой последней строке,exec
какую бы среду WM / desktop вы не использовали ,Это не ответ, просто большое разъяснение, которое может помочь в создании следующего вопроса.
Спасибо за добавление дополнительных деталей. Вероятно, у вас есть проблема с разрешениями, но, к сожалению, она связана с разрешениями, необходимыми для подключения к сокету домена DBus Unix.
Чтобы подтвердить этот запуск без полномочий root:
за исключением того, что вы, вероятно, получите что-то вроде
Почему? Я понятия не имею. Я знаю, что подсистема уведомлений привлекла гораздо больше внимания в сообществе разработчиков GNOME, чем я когда-либо думала, что такая поверхностно простая функция должна. Я подозреваю, что какой-то конфигурационный файл находится в zillion или около того местах конфигурации GTK, но я знаю, что это не слишком полезно
источник
connect(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/dbus-WC3XySChb5"}, 23) = -1 ECONNREFUSED (Connection refused)
connect(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/dbus-b3oei13hP2"}, 23) = -1 ECONNREFUSED (Connection refused)
У меня получилось установить notify-osd и dunst на i3wm.
источник