PowerManagement.Inhibit适用于dbus-python但不适用于dbus-send

时间:2013-07-04 21:54:31

标签: python linux dbus freedesktop.org

我正在a project工作,我需要以编程方式禁止电源管理(例如暂停)。我能够从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

为什么?

1 个答案:

答案 0 :(得分:6)

当设置它的过程死亡时,会自动释放禁止。

因此,对于一次性命令,禁止将立即释放。

我在Freedesktop.org上找不到规范,但我在KDE和this page下的测试往往会确认大多数会话管理员/电源管理员的行为都是一样的。