您如何在OS X GUI中找到当前登录的用户?


11

尝试找出是否有特定用户(特别是使用图形用户界面的用户)登录到计算机中。

是否可以通过命令行?


1
等待GUI和命令行?都?还是只是命令行?我糊涂了。
2010年

@ Nano8Blazex,让您的问题更清楚了。
gak 2010年

:D太好了!
2010年

Answers:


19

界面:

  • 在“ 系统偏好设置”中打开“帐户”偏好设置窗格。预先选择的用户帐户将是活动用户帐户。
  • 如果快速用户切换处于活动状态,则可以配置其附加菜单(菜单栏右侧的菜单)以显示活动用户的名称。

命令行:

  • 检查的所有者 /dev/console

    stat -f '%u %Su' /dev/console
    
  • 编写一个使用官方API的程序(SCDynamicStoreCopyConsoleUser;请参见下文)

在C程序中:

技术问答QA1133:确定控制台用户登录状态 中的C代码显示了如何确定哪个用户拥有活动的GUI会话。

例如:

/* Adapted from QA1133:
 *    http://developer.apple.com/mac/library/qa/qa2001/qa1133.html
 */
#include <assert.h>
#include <SystemConfiguration/SystemConfiguration.h>

int main(int argc, char **argv) {
    SCDynamicStoreRef store;
    CFStringRef name;
    uid_t uid;
#define BUFLEN 256
    char buf[BUFLEN];
    Boolean ok;

    store = SCDynamicStoreCreate(NULL, CFSTR("GetConsoleUser"), NULL, NULL);
    assert(store != NULL);
    name = SCDynamicStoreCopyConsoleUser(store, &uid, NULL);
    CFRelease(store);

    if (name != NULL) {
        ok = CFStringGetCString(name, buf, BUFLEN, kCFStringEncodingUTF8);
        assert(ok == true);
        CFRelease(name);
    } else {
        strcpy(buf, "<none>");
    }

    printf("%d %s\n", uid, buf);

    return 0;
}

请参见手册页getlogin。
Itachi 2014年

stat -f'%u%Su'/ dev / console可以正常工作。谢谢
Akshat

7

通过命令行,whousers应工作。


啊,who寻找“控制台”。谢谢。
gak 2010年

1
@Gerald:使用who快速用户切换时,在我的10.4系统上使用不准确(我正在使用的系统在“控制台”上显示了另一个用户,即使我的GUI会话处于活动状态)。也许在新版本中更可靠。
克里斯·约翰森

@JohnT:如果您有2个用户登录(用户切换),则who命令将列出与“控制台”关联的两个用户。这不能正常工作。
Akshat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.