
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-monitor
lä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 IsInhibited
Methoden GetInhibitors
dieser org.gnome.SessionManager
D-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.