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 libnotify
instalado, 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?
libnotify
ya que esto proporciona elnotify-send
comando (que es todo lo que necesitas)?Respuestas:
Finalmente resolví el problema yo mismo.
Dejaré instrucciones de lo que hice.
El problema consta de dos partes:
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.d
excepto para la sesión lxde (en LXDE dbus funciona, en wm impresionante no lo hace). En esta carpeta existe un archivo30-dbus
con el siguiente contenido:Esta parte del código define la
$DBUS_SESSION_BUS_ADDRESS
variable que define un puerto dbus para usar en varias aplicaciones.echo $DBUS_SESSION_BUS_ADDRESS
puede 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
):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.lua
archivo:,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.
fuente
.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 invocastartx
oxinit
desde la consola. probablemente la razón por la que se carga el archivo del sistema es porque ocurre en LXDE, no en LXDM..xinitrc
es iniciar cualquier demonio de fondo que no se habilitaría más tarde (lo haría si no tuviera, por ejemplo,gnome-session
hacerlo por usted), luego en la última línea,exec
sea cual sea el entorno de escritorio / WM que use .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:
excepto que probablemente obtendrás algo como
¿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.
fuente
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)
Para mí, funcionó para instalar notify-osd y dunst en i3wm.
fuente