Benachrichtigungen und Benachrichtigungs-Daemon funktionieren im Window Manager nicht

13

Benachrichtigungen funktionieren nicht auf eigenständigen Linux-Fenstermanagern (Openbox, Awesome WM und Ähnliches). Ich habe versucht, den Benachrichtigungs-Daemon und Dunst zu installieren, aber beim Senden mit notify-send "something"wird kein Fenster zum Öffnen geöffnet .

Ich habe versucht, polkit-gnome-agent auszuführen und direkt Benachrichtigungs-Daemons auszuführen, aber es hilft nicht (vor einiger Zeit habe ich ein ähnliches Problem auf diese Weise gelöst, aber jetzt tut es nichts).

Es gibt keine Anzeichen von Fehlern, es sei denn, ich sende eine einfache Benachrichtigung mit Python, dann erhalte ich nur eine vage Fehlermeldung: Das 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 Programm Trivial C gibt nichts aus (zum Beispiel keinen Fehler).

Ich verwende Archlinux mit systemd und d-bus. Ich vermute, es liegt ein Problem mit polkit oder einem Dämon vor, der nicht beim Start des Fenstermanagers ausgeführt wird, aber ich habe keine Ahnung, was ich versuchen könnte oder wie ich aussagekräftigere Fehlermeldungen erhalten könnte.

BEARBEITEN: Ich habe Beispielcode von dort genommen: https://wiki.archlinux.org/index.php/Libnotify#Python

Dbus sollte ausgeführt werden, da systemd dies als Abhängigkeit hat. Ich habe libnotifyinstalliert - es ist Paket, das bietet notify-send. Außerdem sollte der Benachrichtigungs-Daemon nach Bedarf gestartet werden (nur wenn eine Benachrichtigung eingeht), indem folgende Desktop-Datei verwendet wird /usr/share/dbus-1/services/org.freedesktop.Notifications.service:

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

Ich hatte sogar versucht, Daemons direkt auszuführen (nur auszuführen) und Benachrichtigungen zu senden. Wenn jemand weiß, wie ich mehr Informationen bekommen kann, zögern Sie bitte nicht, mir einen Vorschlag zu machen.

BEARBEITEN 2: Ich habe versucht, den Benachrichtigungs-Daemon mit sudo: sudo notification-daemon_name &(in meinem Fall sudo dunst &) und auszuführen sudo notify-send something, dann funktioniert die Benachrichtigung. Aber wenn ich versuche, eine der vorherigen Aktionen als nicht privilegierter Benutzer auszuführen (was wichtig ist, dass die meisten Programme Benachrichtigungen als nicht privilegierte Benutzer senden), wird nichts angezeigt.

notification-daemon weigert sich, überhaupt ohne Fehler oder Warnung zu arbeiten.

EDIT 3: Es ist eindeutig ein Berechtigungsproblem: Ich kann keine Benachrichtigungen ohne Root-Zugriff senden. Nach einem sauberen Neustart: Funktioniert dies sudo notify-send "something"auch ohne manuelles Starten von Daemons. Wie sollte ich (und meine gestarteten Programme) jedoch vorgehen, um Benachrichtigungen ohne Root-Berechtigungen zu senden, wie dies in Gnome oder anderen vollständigen Desktop-Umgebungen möglich ist?

IBr
quelle
1
Was bedeutet "versucht, den Benachrichtigungs-Daemon zu installieren"? Haben Sie installiert, libnotifyda dies den notify-sendBefehl liefert (was ist alles, was Sie brauchen)?
Jasonwryan
Sie haben viel zu wenig Informationen angegeben, um diese Frage richtig zu beantworten. Anhand der einzigen Fehlermeldung, die Sie ausgegeben haben, vermute ich, dass DBus nicht ausgeführt wird und daher nichts zum Benachrichtigen und Senden vorhanden ist, mit dem eine Verbindung hergestellt werden kann. Wenn Sie Ihren "Trivial Notification" -Code und den genauen Fehler angegeben haben, können wir möglicherweise einer Antwort näher kommen.
msw
Von dort habe ich Beispielcodes genommen: wiki.archlinux.org/index.php/Libnotify#Python
IBr
Ich hatte Erfolg mit Dunst. Keine weiteren Nachrichten "Verbindung abgelehnt".
sshow

Antworten:

6

Endlich habe ich das Problem selbst gelöst.

Ich werde Anweisungen hinterlassen, was ich getan habe.

Das Problem besteht aus zwei Teilen:

  1. Auf Dbus kann nicht über den Windows-Manager zugegriffen werden
  2. Der Benachrichtigungsdämon kann keine Nachrichten von dbus abrufen

1. Problemlösung:

Ein echtes Problem war, dass mein Windows-Manager von lxdm ausgeführt wurde, das aus irgendeinem Grund die Konfigurationsdateien /etc/X11/xinit/xinitrc.dnur für lxde-Sitzungen zusammenführt (in LXDE funktioniert dbus, in awesome funktioniert wm nicht). In diesem Ordner befindet sich eine Datei 30-dbusmit folgendem Inhalt:

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

Dieser Teil des Codes definiert eine $DBUS_SESSION_BUS_ADDRESSVariable, die einen für verschiedene Anwendungen zu verwendenden dbus-Port definiert. echo $DBUS_SESSION_BUS_ADDRESSkann als einfache Überprüfung verwendet werden, um festzustellen, ob eine dbus-Sitzung vorhanden ist (es sollte eine dbus-Sitzungsdatei zurückgeben).

Konfigurationsdateien aus diesem Ordner können beim Sitzungsstart mit einem einfachen Shell-Skript zusammengeführt werden (Code aus .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. Problemlösung:

Während dbus ausgeführt wird und für andere Programme verfügbar ist, muss noch mehr Zugriff vorhanden sein, damit Benachrichtigungen ordnungsgemäß funktionieren. Daher musste ich den Polkit-Agenten ausführen, da Awesome WM keinen hat. Ich hatte gewählt lxpolkit, weil ich schon fast volle lxde Umgebung hatte. In meinem Fall, der gerade zu meiner ~/.config/awesome/rc.luaDatei hinzugefügt wurde : Aus awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop")irgendeinem Grund hat es sich geweigert, ohne diese Zeile standardmäßig mit lxdm zu beginnen.

Ich denke, Gnome Polkit Agent sollte auch gut funktionieren.

IBr
quelle
1
hinweis: dein display manager macht und soll nichts mit .xinitrc/ ich vergesse was der andere geschmack nennt. Diese Dateien sind äquivalent (welche verwendet wird, hängt von der Distribution ab) und werden nur beim Aufrufen startxoder xinitüber die Konsole verwendet. Wahrscheinlich liegt der Grund dafür, dass die Systemdatei geladen wird, in LXDE und nicht in LXDM.
Strugee
Danke für die Klarstellung. Es scheint, dass ich zusätzliche Konfigurationsladevorgänge selbst durchführen muss.
5.
Ja, wie Sie das tun sollten, hängt von der Desktop-Umgebung / wm ab.
Strugee
In der Regel .xinitrcstarten Sie nur Hintergrund-Daemons, die später nicht aktiviert werden (Sie würden dies tun, wenn Sie es zB nicht gnome-sessionfür Sie erledigen müssten ), und zwar in der allerletzten Zeile, execunabhängig davon , welche WM / Desktop-Umgebung Sie verwenden .
Strugee
0

Dies ist keine Antwort, sondern nur eine große Klarstellung, um die nächste Frage zu generieren.

Vielen Dank für das Hinzufügen des zusätzlichen Details. Wahrscheinlich haben Sie ein Berechtigungsproblem, aber leider liegt es wahrscheinlich an den Berechtigungen, die zum Herstellen einer Verbindung zum DBus-Unix-Domain-Socket erforderlich sind.

So bestätigen Sie diesen Lauf als Nicht-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

außer du wirst wahrscheinlich so etwas bekommen

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

Warum? Ich habe keine Ahnung. Ich weiß, dass das Benachrichtigungs-Subsystem in der GNOME-Entwickler-Community weitaus mehr Beachtung gefunden hat, als ich jemals gedacht hätte, dass eine so oberflächlich einfache Funktion dies tun sollte. Ich würde vermuten, dass eine Konfigurationsdatei in den zig GTK-Konfigurationsverzeichnissen vorhanden ist, aber ich weiß, dass dies nicht allzu hilfreich ist.

msw
quelle
In der Tat bekam ichconnect(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

Bei mir hat es geklappt, notify-osd und dunst auf i3wm zu installieren.

anstue
quelle