Как вы можете узнать, кто в данный момент вошел в систему в OS X GUI?

11

Попытка выяснить, вошел ли в систему конкретный пользователь, в частности, пользователь, использующий графический интерфейс пользователя.

Это возможно через командную строку?

гак
источник
1
Ждать GUI и командную строку? Обе? Или просто командная строка? Я запутался.
Верный
@ Nano8Blazex, сделал вопрос более понятным для вас.
Гак
: D это здорово!
Верный

Ответы:

19

GUI:

  • Откройте панель настроек «Учетные записи» в « Системных настройках» . Предварительно выбранная учетная запись пользователя будет активной учетной записью пользователя.
  • Если быстрое переключение пользователей активно, его дополнительное меню (меню в правой части строки меню) можно настроить для отображения имени активного пользователя.

Командная строка:

  • Проверьте владельца /dev/console

    stat -f '%u %Su' /dev/console
    
  • Напишите программу, которая использует официальный API ( SCDynamicStoreCopyConsoleUser ; см. Ниже)

В программе на C:

Код C в Технических вопросах и ответах QA1133: Определение статуса входа пользователя в консоль показывает, как определить, кому принадлежит активный сеанс графического интерфейса пользователя.

Например:

/* 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;
}
Крис Джонсен
источник
Смотрите man-страницу getlogin.
Итачи
stat -f '% u% Su' / dev / console работает отлично. Спасибо
Akshat
7

Через командную строку whoи usersдолжно работать.

Джон Т
источник
Ах, whoи искать "консоль". Спасибо.
Гак
1
@Gerald: Использование whoне является точным в моей системе 10.4 при использовании быстрого переключения пользователей (система, которую я сейчас использую, отображает другого пользователя на «консоли», даже если мой сеанс GUI является активным). Может быть, это более надежно в новых версиях.
Крис Джонсен
@JohnT: если в систему вошли 2 пользователя (переключение пользователей), команда who выведет список обоих пользователей, связанных с «console». Это не работает правильно.
Akshat