Comment connaître l'utilisateur actuellement connecté dans l'interface graphique OS X?

11

Essayer de savoir si un utilisateur particulier est connecté à la machine, en particulier l'utilisateur à l' aide de l'interface utilisateur graphique.

Est-ce possible via la ligne de commande?

gak
la source
1
Attendez l'interface graphique et la ligne de commande? Tous les deux? Ou tout simplement en ligne de commande? Je suis confus.
Vervious
@ Nano8Blazex, a rendu la question plus claire pour vous.
gak
: D c'est super!
Vervious

Réponses:

19

GUI:

  • Ouvrez le volet des préférences Comptes dans les Préférences Système . Le compte d'utilisateur présélectionné sera le compte d'utilisateur actif.
  • Si le changement rapide d'utilisateur est actif, son menu supplémentaire (le menu sur le côté droit de la barre de menu) peut être configuré pour afficher le nom de l'utilisateur actif.

Ligne de commande:

  • Vérifiez le propriétaire de /dev/console

    stat -f '%u %Su' /dev/console
    
  • Écrivez un programme qui utilise l'API officielle ( SCDynamicStoreCopyConsoleUser ; voir ci-dessous)

Dans un programme C:

Le code C dans Q&A technique QA1133: Déterminer l'état de connexion de l'utilisateur de la console montre comment déterminer quel utilisateur possède la session GUI active.

Par exemple:

/* 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
la source
Voir la page de manuel getlogin.
Itachi
stat -f '% u% Su' / dev / console fonctionne parfaitement. Merci
Akshat
7

Via la ligne de commande, whoet usersdevrait fonctionner.

John T
la source
Ah, whoet cherchez "console". Merci.
gak
1
@Gerald: L'utilisation whon'est pas précise sur mon système 10.4 lors de l'utilisation d'un changement rapide d'utilisateur (le système que j'utilise actuellement montre un autre utilisateur sur "console" même si ma session GUI est la plus active). Peut-être qu'il est plus fiable dans les versions plus récentes.
Chris Johnsen
@JohnT: si vous avez 2 utilisateurs connectés (changement d'utilisateur), la commande who listera les deux utilisateurs associés à 'console'. Cela ne fonctionne pas correctement.
Akshat