¿Cómo puede encontrar el usuario actualmente conectado en la GUI de OS X?


11

Tratando de averiguar si un usuario en particular está conectado a la máquina, específicamente el usuario que usa la interfaz gráfica de usuario.

¿Es esto posible a través de la línea de comando?


1
Espera GUI y línea de comando? ¿Ambos? O simplemente línea de comando? Estoy confundido.
Vervious

@ Nano8Blazex, te hizo la pregunta más clara.
gak

: D eso es genial!
Vervious

Respuestas:


19

GUI

  • Abra el panel de preferencias Cuentas en Preferencias del sistema . La cuenta de usuario preseleccionada será la cuenta de usuario activa.
  • Si el cambio rápido de usuario está activo, su menú adicional (el menú en el lado derecho de la barra de menú) se puede configurar para mostrar el nombre del usuario activo.

Línea de comando:

  • Compruebe el dueño de /dev/console

    stat -f '%u %Su' /dev/console
    
  • Escriba un programa que use la API oficial ( SCDynamicStoreCopyConsoleUser ; ver más abajo)

En un programa C:

El código C en Preguntas y respuestas técnicas QA1133: Determinar el estado de inicio de sesión del usuario de la consola muestra cómo determinar qué usuario posee la sesión GUI activa.

Por ejemplo:

/* 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;
}

Consulte la página de manual getlogin.
Itachi

stat -f '% u% Su' / dev / console funciona perfectamente. Gracias
Akshat

7

A través de la línea de comando, whoy usersdebería funcionar.


Ah, whoy busca "consola". Gracias.
gak

1
@Gerald: El uso whono es preciso en mi sistema 10.4 cuando uso el cambio rápido de usuario (el sistema que estoy usando ahora muestra a otro usuario en la "consola" a pesar de que mi sesión GUI es la activa). Quizás sea más confiable en versiones más nuevas.
Chris Johnsen

@JohnT: si tiene 2 usuarios conectados (cambio de usuario), el comando who enumerará los dos usuarios asociados con 'consola'. Esto no funciona correctamente.
Akshat
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.