Dbus Inhibitor hinzugefügt, aber sofort wieder entfernt

Dbus Inhibitor hinzugefügt, aber sofort wieder entfernt

Ich habe gelernt, dass es möglich ist, Inhibitoren für eine GUI-Sitzung zu erstellen überdbus. Wenn ich jedoch versuche, einen Inhibitor hinzuzufügen, wird dieser sofort entfernt. Hier ist ein Beispiel.

Ich rufe über diesen Befehl auf, einen Inhibitor hinzuzufügen (der das Abmelden verhindern soll):

qdbus org.gnome.SessionManager  /org/gnome/SessionManager org.gnome.SessionManager.Inhibit "x-terminal-emulator" $(xdotool getactivewindow) "TEST REASON" 1

Die Ausgabe dbus-monitorlässt darauf schließen, dass es hinzugefügt, dann aber sofort wieder entfernt wird.

$ dbus-monitor --profile | grep -i inhibitor
sig 1474613346.596581   156 :1.23   <none>  /org/gnome/SessionManager   org.gnome.SessionManager    InhibitorAdded
sig 1474613346.603137   159 :1.23   <none>  /org/gnome/SessionManager   org.gnome.SessionManager    InhibitorRemoved

Wie kann ich dieses Problem beheben?

Verwendetes System: Ubuntu 16.04, Unity

Antwort1

Der Inhibitor wird sofort entfernt, da er beim Trennen der Verbindung zum DBus-Client automatisch entfernt wird.

Sie müssen Ihren Klienten also so lange am Laufen halten, wie die Hemmung aktiv sein soll.

Beispiel:

python3 -c 'import pydbus; pydbus.SessionBus().get(
"org.gnome.SessionManager").Inhibit("what", 0, "why", 1);
import time; time.sleep(2**32-1)'

Zum Testen geeignet sind die IsInhibitedMethoden GetInhibitorsdieser org.gnome.SessionManagerD-Bus-Schnittstelle, z. B.:

qdbus org.gnome.SessionManager /org/gnome/SessionManager \
    org.gnome.SessionManager.IsInhibited 8

Zur Auflistung der Inhibitoren vgl.list_inhibitors()in einem meiner Dienstprogramme.

verwandte Informationen