PowerManagement.Inhibit работает с dbus-python, но не с dbus-send

Я работаю над проектом, где мне нужно программно запретить управление питанием (например, приостановить работу). Я могу сделать это отлично из Python:

import dbus
pm = dbus.SessionBus().get_object("org.freedesktop.PowerManagement", "/org/freedesktop/PowerManagement/Inhibit")
print(pm.HasInhibit()) # 0
inhibited = pm.Inhibit("Me", "I said so")
print(pm.HasInhibit()) # 1
pm.UnInhibit(inhibited)
print(pm.HasInhibit()) # 0

но не при использовании dbus-send из командной строки:

$ dbus-send --print-reply --dest=org.freedesktop.PowerManagement /org/freedesktop/PowerManagement/Inhibit org.freedesktop.PowerManagement.Inhibit.HasInhibit
method return sender=:1.2 -> dest=:1.260969 reply_serial=2
  boolean false
$ dbus-send --print-reply --dest=org.freedesktop.PowerManagement /org/freedesktop/PowerManagement/Inhibit org.freedesktop.PowerManagement.Inhibit.Inhibit string:"Me" string:"I said so"
method return sender=:1.2 -> dest=:1.260972 reply_serial=2
  uint32 52
$ dbus-send --print-reply --dest=org.freedesktop.PowerManagement /org/freedesktop/PowerManagement/Inhibit org.freedesktop.PowerManagement.Inhibit.HasInhibit
method return sender=:1.2 -> dest=:1.260973 reply_serial=2
  boolean false

Почему?


person piedar    schedule 04.07.2013    source источник


Ответы (1)


Запрет автоматически снимается, когда процесс, установивший его, умирает.

Таким образом, для одноразовых команд блокировка будет снята немедленно.

Я не могу найти спецификацию на Freedesktop.org, но мои собственные тесты в KDE и эта страница обычно подтверждает, что такое поведение одинаково для большинства диспетчеров сеансов/менеджеров питания.

person Adrien    schedule 02.02.2014