看來,獲取這些信息的最有用的方法是使用ConsoleKit DBus interface。
以下步驟概述如何枚舉會話和確定它們是否有效或不是:
Bus: org.freedesktop.ConsoleKit
Path: /org/freedesktop/ConsoleKit/Manager
Method: org.freedesktop.ConsoleKit.Manager.GetSessions
什麼返回是一個磁盤陣列:
1)使用以下枚舉會話的導出Session接口的對象路徑。反過來,這些可以使用DBus查詢以獲得其適當的屬性。例如,我使用的dbus-發送與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)使用返回的對象路徑(S),我可以查詢他們的屬性,例如,如果它們是活性的或不使用以下:
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 邏輯真
整潔。
也許從顯示管理器尋找適當的dbus信號? – Novelocrat
但是你爲什麼要想知道呢?這聽起來像是一個設計錯誤,除了xlock之類的一些特殊情況。 –
@jørgensen這樣做有很好的理由,例如產生一個VNC服務器來遠程激活X服務器,並在FUS發生時重新創建它。 –