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 libnotify
installiert - 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?
libnotify
da dies dennotify-send
Befehl liefert (was ist alles, was Sie brauchen)?Antworten:
Endlich habe ich das Problem selbst gelöst.
Ich werde Anweisungen hinterlassen, was ich getan habe.
Das Problem besteht aus zwei Teilen:
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.d
nur für lxde-Sitzungen zusammenführt (in LXDE funktioniert dbus, in awesome funktioniert wm nicht). In diesem Ordner befindet sich eine Datei30-dbus
mit folgendem Inhalt:Dieser Teil des Codes definiert eine
$DBUS_SESSION_BUS_ADDRESS
Variable, die einen für verschiedene Anwendungen zu verwendenden dbus-Port definiert.echo $DBUS_SESSION_BUS_ADDRESS
kann 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
):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.lua
Datei hinzugefügt wurde : Ausawful.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.
quelle
.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 Aufrufenstartx
oderxinit
über die Konsole verwendet. Wahrscheinlich liegt der Grund dafür, dass die Systemdatei geladen wird, in LXDE und nicht in LXDM..xinitrc
starten Sie nur Hintergrund-Daemons, die später nicht aktiviert werden (Sie würden dies tun, wenn Sie es zB nichtgnome-session
für Sie erledigen müssten ), und zwar in der allerletzten Zeile,exec
unabhängig davon , welche WM / Desktop-Umgebung Sie verwenden .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:
außer du wirst wahrscheinlich so etwas bekommen
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.
quelle
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)
Bei mir hat es geklappt, notify-osd und dunst auf i3wm zu installieren.
quelle