Jak znaleźć aktualnie zalogowanego użytkownika w GUI OS X?

11

Próbowanie sprawdzenia, czy dany użytkownik jest zalogowany na komputerze, w szczególności użytkownik korzystający z graficznego interfejsu użytkownika.

Czy jest to możliwe za pośrednictwem wiersza poleceń?

gak
źródło
1
Poczekaj na GUI i wiersz poleceń? Obie? A może po prostu wiersz poleceń? Jestem zmieszany.
Verident
@ Nano8Blazex, uściślił pytanie.
gak
: D to świetnie!
Verident

Odpowiedzi:

19

GUI:

  • Otwórz panel preferencji Konta w Preferencjach systemowych . Wstępnie wybrane konto użytkownika będzie aktywnym kontem użytkownika.
  • Jeśli szybkie przełączanie użytkowników jest aktywne, jego dodatkowe menu (menu po prawej stronie paska menu) można skonfigurować tak, aby wyświetlało nazwę aktywnego użytkownika.

Wiersz poleceń:

  • Sprawdź właściciela /dev/console

    stat -f '%u %Su' /dev/console
    
  • Napisz program, który używa oficjalnego interfejsu API ( SCDynamicStoreCopyConsoleUser ; patrz poniżej)

W programie C:

Kod C w pytaniach technicznych QA1133: Określanie statusu logowania użytkownika konsoli pokazuje, jak ustalić, który użytkownik jest właścicielem aktywnej sesji GUI.

Na przykład:

/* 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;
}
Chris Johnsen
źródło
Zobacz manual getlogin.
Itachi
stat -f '% u% Su' / dev / console działa idealnie. Dziękuję
Akszat
7

Za pomocą wiersza polecenia whoi userspowinien działać.

John T.
źródło
Ach whoi poszukaj „konsoli”. Dzięki.
gak
1
@ Gerald: Używanie whonie jest dokładne w moim systemie 10.4, gdy używam szybkiego przełączania użytkowników (system, którego używam teraz pokazuje innego użytkownika na „konsoli”, mimo że moja sesja GUI jest aktywna). Może jest bardziej niezawodny w nowszych wersjach.
Chris Johnsen
@JohnT: jeśli masz 2 zalogowanych użytkowników (przełączanie użytkowników), komenda who wyświetli zarówno użytkowników powiązanych z „konsolą”. To nie działa poprawnie.
Akszat