Como você pode descobrir o usuário conectado no momento na GUI do OS X?

11

Tentando descobrir se um usuário específico está conectado à máquina, especificamente o usuário que usa a interface gráfica do usuário.

Isso é possível via linha de comando?

gak
fonte
1
Aguarde GUI e linha de comando? Ambos? Ou apenas linha de comando? Estou confuso.
Vervious
@ Nano8Blazex, deixou a pergunta mais clara para você.
gak
: D isso é ótimo!
Vervious

Respostas:

19

GUI:

  • Abra o painel de preferências Contas em Preferências do Sistema . A conta de usuário pré-selecionada será a conta de usuário ativa.
  • Se a troca rápida de usuário estiver ativa, seu menu extra (o menu no lado direito da barra de menus) poderá ser configurado para mostrar o nome do usuário ativo.

Linha de comando:

  • Verifique o proprietário de /dev/console

    stat -f '%u %Su' /dev/console
    
  • Escreva um programa que use a API oficial ( SCDynamicStoreCopyConsoleUser ; veja abaixo)

Em um programa C:

O código C em Perguntas e respostas técnicas QA1133: Determinando o status de login do usuário do console mostra como determinar qual usuário possui a sessão da GUI ativa.

Por exemplo:

/* 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
fonte
Veja a página de manual getlogin.
Itachi
stat -f '% u% Su' / dev / console funciona perfeitamente. Obrigado
Akshat 21/11/19
7

Através da linha de comando, whoe usersdeve funcionar.

John T
fonte
Ah, whoe procure por "console". Obrigado.
gak
1
@Gerald: A utilização whonão é precisa no meu sistema 10.4 ao usar a troca rápida de usuário (o sistema que estou usando agora mostra outro usuário no “console”, embora minha sessão da GUI seja a ativa). Talvez seja mais confiável nas versões mais recentes.
31810 Chris Johnsen
@ JohnT: se você tiver 2 usuários conectados (troca de usuário), o comando who listará os usuários associados ao 'console'. Isso não funciona corretamente.
Akshat