Як можна дізнатися користувача, який зараз увійшов у GUI OS X?


11

Намагаючись з’ясувати, чи певний користувач увійшов до машини, зокрема користувач за допомогою графічного інтерфейсу користувача.

Це можливо за допомогою командного рядка?


1
Зачекати GUI та командний рядок? Обидва? Або просто командний рядок? Я збентежений.
Вірний

@ Nano8Blazex, зробив це питання для вас більш зрозумілим.
gak

: D це чудово!
Верний

Відповіді:


19

GUI:

  • Відкрийте панель налаштувань облікових записів у Налаштуваннях системи . Попередньо обраний обліковий запис користувача буде активним обліковим записом користувача.
  • Якщо активна швидка комутація користувача активна, її додаткове меню (меню в правій частині рядка меню) може бути налаштоване для відображення імені активного користувача.

Командний рядок:

  • Перевірте власника /dev/console

    stat -f '%u %Su' /dev/console
    
  • Написати програму, яка використовує офіційний API ( SCDynamicStoreCopyConsoleUser ; див. Нижче)

У програмі С:

Код C у Технічному запитанні та запитанні QA1133: Визначення статусу входу користувача консолі показує, як визначити, якому користувачеві належить активний сеанс 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;
}

Див. Manlog getlogin.
Ітачі

stat -f '% u% Su' / dev / консоль працює відмінно. Дякую
Акшат

7

Через командний рядок whoі usersповинен працювати.


Ах, whoі шукайте "консоль". Дякую.
gak

1
@Gerald: Використання whoне є точним у моїй системі 10.4 при швидкій комутації користувачів (система, яку я зараз використовую, показує іншого користувача на "консолі", навіть якщо мій сеанс GUI є активним). Можливо, він є більш надійним у новіших версіях.
Кріс Джонсен

@JohnT: якщо у вас ввійшли 2 користувачі (комутація користувача), команда who перелічить обох користувачів, пов’язаних із "console". Це працює не правильно.
Акшат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.