Inhibidor Dbus agregado pero eliminado inmediatamente

Inhibidor Dbus agregado pero eliminado inmediatamente

Aprendí que es posible crear inhibidores para una sesión GUI a través dedbus. Sin embargo, cuando intento agregar un inhibidor, se elimina inmediatamente. He aquí un ejemplo.

Llamo para agregar inhibidor a través de este comando (que se supone que evita que se cierre la sesión):

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

El resultado de dbus-monitorsugiere que se agrega, pero luego se elimina inmediatamente.

$ 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

¿Cómo puedo solucionar este problema?

Sistema en uso: Ubuntu 16.04, Unity

Respuesta1

El inhibidor se elimina inmediatamente porque se elimina automáticamente al desconectarse el cliente dbus.

Por lo tanto, debe mantener a su cliente funcionando mientras la inhibición esté activa.

Ejemplo:

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

Relacionado para las pruebas están los métodos IsInhibitedy GetInhibitorsde esa org.gnome.SessionManagerinterfaz D-Bus, por ejemplo:

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

Para saber cómo enumerar los inhibidores, cf.lista_inhibidores()en una utilidad mía.

información relacionada