Las notificaciones y el daemon de notificaciones no funcionan en el administrador de ventanas

13

Las notificaciones no funcionan en los administradores de ventanas independientes de Linux (Openbox, Awesome WM y similares). Traté de instalar notificaciones-daemon y dunst, pero el envío con notify-send "something"no abre ninguna ventana emergente.

Intenté ejecutar polkit-gnome-agent y ejecutar directamente daemons de notificación, pero no ayuda (mientras que hace un tiempo resolví un problema similar, pero ahora no hace nada).

No hay ninguna indicación de errores a menos que envíe una notificación trivial con python, entonces solo recibo un mensaje de error vago: el 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 programa Trivial C no genera nada (por ejemplo, ningún error).

Estoy usando Archlinux con systemd y d-bus, sospecho que es un problema con polkit o algún tipo de demonio que no se ejecuta en el inicio del administrador de ventanas, pero no tengo idea, qué podría probar o cómo podría obtener mensajes de error más significativos.

EDITAR: tomé un código de muestra desde allí: https://wiki.archlinux.org/index.php/Libnotify#Python

Dbus debería estar ejecutándose porque systemd lo tiene como dependencia. He libnotifyinstalado, es el paquete que proporciona notify-send. Además, el demonio de notificación debe comenzar según sea necesario (solo cuando se produce la notificación), siguiendo el archivo de escritorio /usr/share/dbus-1/services/org.freedesktop.Notifications.service:

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/bin/dunst

Incluso intenté ejecutar demonios directamente (solo ejecutar) e intenté enviar notificaciones. Si somenone sabe cómo puedo obtener más información, no dude en sugerirme.

EDIT 2: intenté ejecutar el demonio de notificación con sudo: sudo notification-daemon_name &(en mi caso sudo dunst &) y sudo notify-send something, luego, la notificación funciona. Pero cuando intento realizar alguna de las acciones anteriores como usuario sin privilegios (lo cual es importante, la mayoría de los programas envían notificaciones como usuarios sin privilegios), no se muestra nada.

notification-daemon se niega a trabajar sin ningún error o advertencia.

EDITAR 3: Claramente es un problema de permisos: no puedo enviar notificaciones sin acceso a la raíz. Después de un reinicio limpio: sudo notify-send "something"funciona incluso sin iniciar manualmente ningún demonio, sin embargo, ¿qué debo hacer yo (y mis programas iniciados) para poder enviar notificaciones sin privilegios de root, ya que es posible en Gnome o en cualquier otro entorno de escritorio completo?

IBr
fuente
1
¿Qué significa "intentó instalar un demonio de notificación"? ¿Instalaste libnotifyya que esto proporciona el notify-sendcomando (que es todo lo que necesitas)?
jasonwryan
Has dado muy poca información para responder adecuadamente a esta pregunta. Según el único mensaje de error que proporcionó, sospecho que DBus no se está ejecutando y, por lo tanto, no hay nada para notificar-enviar para conectarse. Si proporcionó su código de "notificación trivial" y el error exacto, es posible que podamos acercarnos a una respuesta.
msw
Tomé códigos de muestra desde allí: wiki.archlinux.org/index.php/Libnotify#Python
IBr
Tuve éxito con Dunst. No más mensajes de "Conexión rechazada".
show

Respuestas:

6

Finalmente resolví el problema yo mismo.

Dejaré instrucciones de lo que hice.

El problema consta de dos partes:

  1. No se puede acceder a Dbus desde el administrador de Windows
  2. El daemon de notificación no puede recibir mensajes de dbus

Solución del primer problema:

El verdadero problema era que mi administrador de Windows se ejecutó desde lxdm, que por alguna razón no combina archivos de configuración, /etc/X11/xinit/xinitrc.dexcepto para la sesión lxde (en LXDE dbus funciona, en wm impresionante no lo hace). En esta carpeta existe un archivo 30-dbuscon el siguiente contenido:

#!/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

Esta parte del código define la $DBUS_SESSION_BUS_ADDRESSvariable que define un puerto dbus para usar en varias aplicaciones. echo $DBUS_SESSION_BUS_ADDRESSpuede usarse como una simple verificación de cordura para ver si existe una sesión dbus (debería devolver el archivo de sesión dbus).

Los archivos de configuración de esta carpeta se pueden combinar con un script de shell simple al inicio de la sesión (código tomado de .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

Solución del segundo problema:

Mientras dbus se ejecuta y está disponible para otros programas, todavía necesita más acceso para que las notificaciones funcionen correctamente, por lo que necesitaba ejecutar polkit agent, porque Awesome WM no tiene uno. Había elegido lxpolkit, porque ya tenía un entorno lxde casi completo. En mi caso, solo agregué a mi ~/.config/awesome/rc.luaarchivo:, awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop")por alguna razón sin esta línea, se negó a comenzar por defecto con lxdm.

Creo que el agente gnome polkit también debería funcionar bien.

IBr
fuente
1
nota: su administrador de pantalla no hace ni debe hacer nada con .xinitrc/ Olvidé cómo se llama el otro sabor. esos archivos son equivalentes (el que se usa varía según la distribución) y solo se usa cuando invoca startxo xinitdesde la consola. probablemente la razón por la que se carga el archivo del sistema es porque ocurre en LXDE, no en LXDM.
Strugee
Gracias por la aclaración. Parece que necesito hacer una configuración adicional cargándome a mí mismo.
IBr
sí, cómo debe hacerlo depende del entorno de escritorio / wm.
Strugee
por lo general, todo lo que debería hacer .xinitrces iniciar cualquier demonio de fondo que no se habilitaría más tarde (lo haría si no tuviera, por ejemplo, gnome-sessionhacerlo por usted), luego en la última línea, execsea ​​cual sea el entorno de escritorio / WM que use .
Strugee
0

Esta no es una respuesta, solo una gran aclaración para ayudar a generar la siguiente pregunta.

Gracias por agregar el detalle adicional. Probablemente tenga un problema de permisos, pero desafortunadamente es probable que tenga los permisos necesarios para conectarse al socket de dominio DBus Unix.

Para confirmar esta ejecución como no root:

$ 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

excepto que probablemente obtendrás algo como

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

¿Por qué? No tengo idea. Sé que el subsistema de notificación ha recibido mucha más atención en la comunidad de desarrollo de GNOME de lo que alguna vez pensé que debería ser una característica tan superficialmente simple. Sospecho que hay algún archivo de configuración en el trillón de ubicaciones de configuración de GTK, pero sé que eso no es demasiado útil.

msw
fuente
De hecho, conseguí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
0

Para mí, funcionó para instalar notify-osd y dunst en i3wm.

responder
fuente