2017-05-23 97 views
1

我有一個啓動守護程序,需要在OSX的用戶會話中產生一個托盤圖標。我目前的問題是:有沒有辦法在用戶登錄或註銷時獲取事件?類似於在Linux上使用logind或consolekit。檢測用戶是否登錄或註銷

+0

LaunchDaemon在登錄時會自動運行,並且應該在註銷時終止。除此之外,你還有什麼問題要解決?如果你的托盤是一個LaunchDaemon,它運行的事實是一個強烈的暗示,用戶剛剛登錄。你需要將其與其他運行守護進程的情況分開嗎? –

+0

我以爲LoginDaemon會以這種方式行事?我有一個gloabal服務,可以監聽未知連接,只有當用戶登錄並且托盤可見時才接受它們。但是,連接必須一直保持,因爲還有一些其他流量正在通過該連接。 – Nidhoegger

+0

對不起,自從我建立其中一個以來已經過去了幾年。在我腦海中翻轉守護進程和代理。我會在下面回答。 –

回答

1

你想要的工具是LaunchAgent。當用戶登錄時,LaunchAgent會自動啓動,並在註銷時關閉。如果您還有LaunchDaemon,則可以使用LaunchAgent從用戶上下文與它進行通信。詳細信息請參見Creating Launch Daemons and Agents,以及如何設置。確保也查看XPC服務(在同一文檔中)以瞭解進程間通信的一種方式。您也可以使用回送網絡,但XPC在適當的情況下功能更強大並且更受歡迎。

如果你正在建造這種東西,你一定要閱讀整個Daemons and Services Programming GuideTN2083: Daemons and Agents。該技術說明可能是您爲這類問題閱讀的最重要的文檔。 OS X在這方面不像Linux(或BSD)。

+0

這不是我想要的。我想我只是解釋了一下我需要的東西。我需要的服務將始終保持連接。但是,只有當用戶登錄並且托盤圖標正在運行時,纔會接受某種類型的連接。這就是爲什麼我需要檢測登錄。 – Nidhoegger