Демон сповіщень та повідомлень не працює у вікні-менеджері


13

Повідомлення не працюють у самостійних менеджерах вікон Linux (Openbox, Awesome WM тощо). Я намагався встановити сповіщення-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 програма Trivial C нічого не видає (наприклад, помилки немає).

Я використовую Archlinux з systemd та d-bus, я підозрюю, що це проблема з polkit або якийсь демон, що не працює при запуску менеджера вікон, але поняття не маю, що я можу спробувати чи як отримати більш значущі повідомлення про помилки.

EDIT: я взяв зразок коду звідти: 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

Я навіть намагався запускати демони безпосередньо (просто виконувати) і намагався надсилати сповіщення. Якщо соменон знає, як я міг би отримати мені більше інформації, будь ласка, не соромтеся запропонувати.

EDIT 2: Я спробував запустити демона сповіщень з sudo: sudo notification-daemon_name &(у моєму випадку sudo dunst &), а sudo notify-send somethingпотім сповіщення працює. Але коли я намагаюся виконувати будь-яку з попередніх дій як непривілейований користувач (що важливо, більшість програм надсилає сповіщення як непривілейовані користувачі), нічого не показується.

notification-daemon відмовляється взагалі працювати без помилок чи попереджень.

EDIT 3: Очевидно, це проблема дозволів: я не можу надсилати сповіщення без доступу root. Після чистої перезавантаження: sudo notify-send "something"працює навіть без запуску демонів вручну, проте що я (і мої запущені програми) потрібно зробити, щоб мати можливість надсилати сповіщення без привілеїв root, як це можливо в Gnome або будь-якому іншому повноцінному середовищі робочого столу?


1
Що означає "спробував встановити сповіщення-демон"? Ви встановили, libnotifyяк це забезпечує notify-sendкоманду (що все, що вам потрібно)?
jasonwryan

Ви дали занадто мало інформації, щоб правильно відповісти на це питання. На основі єдиного повідомлення про помилку, яке я дав, я підозрюю, що DBus не працює, і, отже, немає нічого для сповіщення-відправлення для підключення. Якщо ви надали код "тривіального повідомлення" та точну помилку, ми можемо наблизитись до відповіді.
msw

Я взяв зразки кодів звідти: wiki.archlinux.org/index.php/Libnotify#Python
IBR

Я мав успіх із Данстом. Більше не було повідомлень "Відмовлено від з'єднання"
sshow

Відповіді:


6

Нарешті я сам вирішив проблему.

Я залишу інструкції, що я зробив.

Проблема складається з двох частин:

  1. Доступ до Dbus не можна отримати з менеджера Windows
  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).

Налаштування файлів із цієї папки можна об’єднати з простим скриптом оболонки на початку запуску сеансу (код взято з .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

2-е рішення проблеми:

Поки dbus працює і доступний для інших програм, він все ще потребує більшого доступу, щоб сповіщення працювало належним чином, тому мені потрібно було запустити polkit агент, тому що у Awesome WM його немає. Я вибрав lxpolkit, бо вже мав майже повне середовище lxde. У моєму випадку щойно доданий у мій ~/.config/awesome/rc.luaфайл: awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop")чомусь без цього рядка він відмовився запускатись за замовчуванням з lxdm.

Я думаю, що агент гнома-полікіта теж повинен працювати добре.


1
Примітка: ваш менеджер дисплеїв не робить і не повинен нічого робити .xinitrc/ я забуваю, як називається інший аромат. ці файли еквівалентні (який використовується в залежності від дистрибутива) і використовуються лише при виклику startxабо xinitз консолі. Можливо, причина завантаження системного файлу полягає в тому, що це відбувається в LXDE, а не в LXDM.
strugee

Дякуємо за роз’яснення Здається, що мені потрібно робити додаткове налаштування конфігурації.
IBr

так, як це робити, залежить від середовища на робочому столі / wm.
strugee

як правило, все, що ви робите, .xinitrc- це запустити фонові демони, які не було б увімкнено пізніше (ви б це зробили, якби цього не зробили, наприклад, gnome-sessionце робили для вас), то в останньому рядку, execнезалежно від того , яке середовище WM / desktop ви використовуєте .
strugee

0

Це не відповідь, а велике уточнення, можливо, допоможе створити наступне питання.

Дякуємо, що додали додаткову деталь. У вас, ймовірно, є проблеми з дозволами, але, на жаль, це ймовірність дозволів, необхідних для підключення до сокета домену DBus Unix.

Для підтвердження цього запуску як некореневого:

$ strace -o /tmp/ns.out notify-send "why will this not connect"
$ grep '^connect' /tmp/ns.out
connect(4, {sa_family=AF_FILE, path=@"/tmp/dbus-6AIOJVWzCC"}, 23) = 0

за винятком, напевно, ви отримаєте щось на кшталт

connect(…) = -1 ECONNREFUSED  (Connection refused)

Чому? Я поняття не маю. Я знаю, що підсистема сповіщень привернула набагато більше уваги у спільноті розвитку GNOME, ніж я коли-небудь думав, що така поверхнево проста функція повинна бути. Я підозрюю, що якийсь файл конфігурації знаходиться в конфігурації 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)
IBr

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.