2009-07-29 9 views
1

J'écris un logiciel qui fonctionne sous la forme d'un service système sous Mac OSX et ne parvient pas à trouver comment obtenir l'utilisateur 'actif'.OSX - Récupérer l'ID utilisateur de l'utilisateur connecté à partir d'un service système

Il semble qu'il y ait des API pour itérer dans la liste des utilisateurs connectés et pouvoir dire à partir d'une valeur dont on a la console de la machine ... mais je ne trouve aucune documentation sur ces API.

En regardant /dev, il semble que le périphérique /dev/console appartient à l'utilisateur actuellement connecté ... mais je n'ai trouvé aucune documentation pour le confirmer.

Des idées?

Répondre

2

Réponse avec la permission de Technical Q&A

Apple
  • Exigent SystemConfiguration.framework

    #include <SystemConfiguration/SystemConfiguration.h> 
    /* .... */ 
    CFStringRef result = SCDynamicStoreCopyConsoleUser(NULL, NULL, NULL); 
    /* .... */ 
    

OU utiliser les API utmpx pour obtenir une liste de tous les comptes connectés dont vous devriez être en mesure d'obtenir les informations nécessaires ...

1

Vous pouvez utiliser getuid et getgid pour obtenir l'ID utilisateur et l'ID de groupe de l'utilisateur. Vous pouvez utiliser getlogin ou getlogin_r pour récupérer une représentation sous forme de chaîne du nom de l'utilisateur actuel. Vous pouvez obtenir des informations supplémentaires avec getpwuid.

En note, "man" est votre ami. En cas de doute, consultez le UNIX Manual Pages.

+0

Désolé, je n'ai pas entièrement compris ce que vous demandiez. Je ne pense pas que vous puissiez obtenir l'utilisateur "actif", car il est toujours possible que plus d'un utilisateur soit connecté à la fois. Si vous voulez faire quelque chose pour un utilisateur spécifique, vous pouvez créer un agent de lancement par utilisateur. –

+2

Une seule personne peut physiquement utiliser un Mac en même temps. Le changement d'utilisateur rapide ne permet pas à plusieurs personnes d'avoir le contrôle d'un terminal à un moment donné. SSH non plus, il vous donne accès à la console, mais pas d'accès à l'interface graphique. getuid et similaire retournera l'utilisateur courant du processus en cours (ex: root) ... getlogin semble avoir le même comportement. – harningt

Questions connexes