Notifications et démon de notification ne fonctionnant pas sur le gestionnaire de fenêtres

13

Les notifications ne fonctionnent pas sur les gestionnaires de fenêtres autonomes Linux (Openbox, Awesome WM et similaires). J'ai essayé d'installer le démon de notification et dunst, mais l'envoi avec notify-send "something"ne fait pas apparaître de fenêtre.

J'ai essayé d'exécuter polkit-gnome-agent et d'exécuter directement des démons de notification, mais cela n'aide pas (alors que j'ai résolu un problème similaire de cette façon, mais maintenant il ne fait rien).

Il n'y a aucune indication d'erreur à moins que j'envoie une notification triviale avec python, alors je ne reçois qu'un message d'erreur vague: le 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 programme Trivial C ne produit rien (aucune erreur par exemple).

J'utilise Archlinux avec systemd et d-bus, je soupçonne que c'est un problème avec polkit ou un type de démon qui ne s'exécute pas au démarrage du gestionnaire de fenêtres, mais je n'ai aucune idée de ce que je pourrais essayer ou comment pourrais-je obtenir des messages d'erreur plus significatifs.

EDIT: J'ai pris un exemple de code à partir de là: https://wiki.archlinux.org/index.php/Libnotify#Python

Dbus devrait fonctionner car systemd l'a comme dépendance. J'ai libnotifyinstallé - c'est le paquet qui fournit notify-send. Le démon de notification doit également démarrer selon les besoins (uniquement lorsque la notification arrive), en suivant le fichier de bureau /usr/share/dbus-1/services/org.freedesktop.Notifications.service:

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

J'avais même essayé d'exécuter des démons directement (juste exécuter) et essayé d'envoyer des notifications. Si quelqu'un sait comment je pourrais obtenir plus d'informations, n'hésitez pas à suggérer.

EDIT 2: J'ai essayé d'exécuter le démon de notification avec sudo: sudo notification-daemon_name &(dans mon cas sudo dunst &) sudo notify-send something, puis la notification fonctionne. Mais lorsque j'essaie de faire l'une des actions précédentes en tant qu'utilisateur non privilégié (ce qui est important, la plupart des programmes envoient une notification en tant qu'utilisateur non privilégié), rien ne s'affiche.

notification-daemon refuse de travailler sans erreur ni avertissement.

EDIT 3: Il s'agit clairement d'un problème d'autorisations: je ne peux pas envoyer de notifications sans accès root. Après un redémarrage propre: sudo notify-send "something"fonctionne même sans lancer manuellement aucun démon, mais que dois-je faire (et mes programmes lancés) pour pouvoir envoyer des notifications sans privilèges root comme cela est possible dans Gnome ou tout autre environnement de bureau complet?

IBr
la source
1
Que signifie «essayé d'installer le démon de notification»? Avez-vous installé libnotifycar cela fournit la notify-sendcommande (qui est tout ce dont vous avez besoin)?
jasonwryan
Vous avez donné trop peu d'informations pour répondre correctement à cette question. Sur la base du seul message d'erreur que vous avez donné, je soupçonne que DBus ne fonctionne pas et donc il n'y a rien pour notifier-envoyer auquel se connecter. Si vous avez donné votre code de "notification triviale" et l'erreur exacte, nous pourrons peut-être nous rapprocher d'une réponse.
msw
J'ai pris des exemples de codes à partir de là: wiki.archlinux.org/index.php/Libnotify#Python
IBr
J'ai eu du succès avec Dunst. Plus de messages "Connexion refusée".
sshow

Réponses:

6

Enfin, j'ai résolu le problème moi-même.

Je vais laisser des instructions sur ce que j'ai fait.

Le problème se compose de deux parties:

  1. Dbus n'est pas accessible à partir du gestionnaire de fenêtres
  2. Le démon de notification ne peut pas recevoir de messages de dbus

1ère solution au problème:

Le vrai problème était que mon gestionnaire de fenêtres était exécuté à partir de lxdm, qui pour une raison quelconque ne fusionne pas les fichiers de configuration à l' /etc/X11/xinit/xinitrc.dexception de la session lxde (dans LXDE dbus fonctionne, dans awesome wm ne le fait pas). Dans ce dossier existe un fichier nommé 30-dbusavec le contenu suivant:

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

Cette partie du code définit une $DBUS_SESSION_BUS_ADDRESSvariable qui définit un port dbus à utiliser pour diverses applications. echo $DBUS_SESSION_BUS_ADDRESSpeut être utilisé comme simple contrôle de validité pour voir si une session dbus existe (il doit renvoyer le fichier de session dbus).

Les fichiers de configuration de ce dossier peuvent être fusionnés avec un simple script shell au démarrage de la session (code extrait 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

2ème solution au problème:

Bien que dbus fonctionne et soit disponible pour d'autres programmes, il a encore besoin de plus d'accès pour que les notifications fonctionnent correctement, j'ai donc dû exécuter l'agent polkit, car Awesome WM n'en a pas. J'avais choisi lxpolkit, car j'avais déjà un environnement lxde presque complet. Dans mon cas, je viens d'ajouter à mon ~/.config/awesome/rc.luafichier awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop"):, pour une raison quelconque sans cette ligne, il a refusé de démarrer par défaut avec lxdm.

Je pense que l'agent gnome polkit devrait aussi fonctionner correctement.

IBr
la source
1
remarque: votre gestionnaire d'affichage ne fait et ne doit rien faire avec .xinitrc/ j'oublie comment l'autre saveur s'appelle. ces fichiers sont équivalents (celui qui est utilisé varie selon la distribution) et ne sont utilisés que lorsque vous appelez startxou xinitdepuis la console. la raison pour laquelle le fichier système est chargé est probablement parce qu'il se produit dans LXDE, pas LXDM.
strugee
Merci pour la clarification. Il semble que je doive effectuer moi-même une configuration supplémentaire.
IBr
oui, la façon de procéder dépend de l'environnement de bureau / wm.
strugee
généralement, tout ce que vous feriez serait de .xinitrcdémarrer tous les démons d'arrière-plan qui ne seraient pas activés plus tard (vous le feriez si vous ne l'aviez pas fait par exemple gnome-session), puis à la toute dernière ligne, execquel que soit l'environnement WM / bureau que vous utilisez .
strugee
0

Ce n'est pas une réponse, juste une grande clarification pour peut-être aider à générer la question suivante.

Merci d'avoir ajouté des détails supplémentaires. Vous avez probablement un problème d'autorisations, mais malheureusement, il se trouve probablement dans les autorisations nécessaires pour se connecter au socket de domaine DBus Unix.

Pour confirmer cette exécution en tant que non 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

sauf que vous obtiendrez probablement quelque chose comme

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

Pourquoi? Je n'ai aucune idée. Je sais que le sous-système de notification a attiré beaucoup plus d'attention dans la communauté de développement GNOME que je n'aurais jamais pensé qu'une fonctionnalité aussi superficiellement simple devrait. Je soupçonne un fichier de configuration dans le zillion ou les emplacements de configuration GTK, mais je sais que ce n'est pas trop utile.

msw
la source
En effet, j'ai euconnect(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

Pour moi, cela a fonctionné pour installer notify-osd et dunst sur i3wm.

anstue
la source