看来获取这些信息最有用的方法是使用ConsoleKit DBus 接口。
以下过程概述了如何枚举会话并确定它们是否处于活动状态:
1.) 使用以下方法枚举会话:
Bus: org.freedesktop.ConsoleKit
Path: /org/freedesktop/ConsoleKit/Manager
Method: org.freedesktop.ConsoleKit.Manager.GetSessions
返回的是一个导出 Session 接口的对象路径数组。反过来,可以使用 DBus 查询这些以获取其适当的属性。例如,我使用 dbus-send 与 ConsoleKit 通信以枚举我系统中的会话:
dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.GetSessions
我收到的回报如下:
method return sender=:1.15 -> dest=:1.205 reply_serial=2
array [
object path "/org/freedesktop/ConsoleKit/Session2"
]
2.)使用返回的对象路径,我可以查询它们的属性,例如它们是否处于活动状态,使用以下内容:
Bus: org.freedesktop.ConsoleKit
Path: /org/freedesktop/ConsoleKit/Session2
Method: org.freedesktop.ConsoleKit.Session.IsActive
根据方法,我可以从会话中查询我需要的内容!使用 ConsoleKit 界面,我还可以检索当前会话的标识符,因此我可以随时查询它以查看它是否在需要时处于活动状态。只是为了好玩,这是以下命令的输出:
dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.IsActive
方法返回发件人=:1.15 -> dest=:1.206 reply_serial=2 boolean true
整洁的。