在 mac 平台上,如何以编程方式确定用户何时通过 SSH 会话登录?

On the mac platform, how can I programmatically determine when a user logs in via an SSH session?

当我打开终端时(在linux 或mac 中),我可以使用命令'who' 查看当前登录的用户。我想编写一个本机 mac 应用程序(C 或 Objective-C),在用户登录(例如通过 SSH)的准确时刻通知我。

我在这里找到了这段代码: SystemEventsMonitor.m

...它看起来能够收集有关桌面的信息,但不会泄露有关已登录用户的任何信息。我还找到了一个关于 Login Hooks 的 link 但我需要的是一个 C 或 objective-C api.

那么:我如何检测用户何时登录我的 mac machine(通过 SSH 或其他方式)?

本.

如您所知,linux 命令 who 在 Mac 平台上也可用,您可以使用 system 调用此命令:

int main ()
{
    system("who");
    return 0;
}

您也可以使用 w 命令。

最后,我决定使用 NSTask class 从 objective-c 以编程方式轮询命令 /usr/bin/users。每 5 秒,我检查是否有新用户登录或注销,方法是解析命令的输出并将其与当前存储的状态进行比较,将新用户添加到状态并显示新用户通知(即 'user logged in event' ),或者删除它们并在它们已注销时显示通知(即 'user logged out event')。

Code on github here