Inibidor Dbus adicionado, mas removido imediatamente

Inibidor Dbus adicionado, mas removido imediatamente

Aprendi que é possível criar inibidores para uma sessão GUI viadbus. No entanto, quando tento adicionar um inibidor, ele é imediatamente removido. Aqui está um exemplo.

Eu chamo para adicionar inibidor por meio deste comando (que supostamente evita que o logout aconteça):

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

A saída de dbus-monitorsugere que ele seja adicionado, mas imediatamente removido.

$ 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

Como posso solucionar isso?

Sistema em uso: Ubuntu 16.04, Unity

Responder1

O inibidor é removido imediatamente porque é removido automaticamente na desconexão do cliente dbus.

Portanto, você deve manter seu cliente funcionando enquanto a inibição estiver ativa.

Exemplo:

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

Relacionados para teste estão os métodos IsInhibitede GetInhibitorsdessa org.gnome.SessionManagerinterface D-Bus, por exemplo:

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

Para saber como listar os inibidores, cf.lista_inibidores()em uma utilidade minha.

informação relacionada