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 libnotify
installé - 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?
libnotify
car cela fournit lanotify-send
commande (qui est tout ce dont vous avez besoin)?Réponses:
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è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.d
exception de la session lxde (dans LXDE dbus fonctionne, dans awesome wm ne le fait pas). Dans ce dossier existe un fichier nommé30-dbus
avec le contenu suivant:Cette partie du code définit une
$DBUS_SESSION_BUS_ADDRESS
variable qui définit un port dbus à utiliser pour diverses applications.echo $DBUS_SESSION_BUS_ADDRESS
peut ê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
):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.lua
fichierawful.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.
la source
.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 appelezstartx
ouxinit
depuis la console. la raison pour laquelle le fichier système est chargé est probablement parce qu'il se produit dans LXDE, pas LXDM..xinitrc
dé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 exemplegnome-session
), puis à la toute dernière ligne,exec
quel que soit l'environnement WM / bureau que vous utilisez .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:
sauf que vous obtiendrez probablement quelque chose comme
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.
la source
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)
Pour moi, cela a fonctionné pour installer notify-osd et dunst sur i3wm.
la source