4 votes

Comment puis-je déterminer l'utilisateur qui invoque dans un installateur Apple postinstall script.

Je veux construire un apple installer .pkg où je lance un script postinstall après que les fichiers aient été copiés par l'installateur. Le script est exécuté et tout fonctionne parfaitement sauf que toutes les commandes du script sont exécutées en tant que Root.

La question est la suivante : comment puis-je déterminer l'identité de l'utilisateur qui a effectivement invoqué le programme d'installation ?

who -m

renvoie l'utilisateur qui l'invoque lorsque je lance le script sur la ligne de commande avec sudo . Mais il retourne root quand je l'exécute dans le programme d'installation.

Y a-t-il un moyen d'obtenir l'"utilisateur réel" ?

Merci pour votre aide !

5voto

n8felton Points 767

Après quelques essais, je crois avoir trouvé que l'une des meilleures options pour cela est

INSTALLER_USER=$(stat -f '%Su' $HOME)

J'ai constaté que le $HOME de la variable d'environnement de l'utilisateur qui installe le paquet est transmise, même après l'élévation pour Installer.app ou en utilisant le installer commandement.

Les réponses précédentes supposent certaines choses sur l'environnement qui ne sont pas toujours vraies.

Par exemple CONSOLE_USER=$(ps aux | grep console | grep -v grep | cut -d' ' -f1) ne fonctionne pas si plusieurs utilisateurs sont connectés, comme cela peut être le cas dans un environnement de laboratoire informatique.

Quant à ps aux | grep "CoreServices/Installer" | grep -v grep | awk '{print $1;}' ; cela ne fonctionne que si l'utilisateur exécute effectivement le programme Installer.app et ne s'appliquerait pas à quelqu'un qui l'utiliserait avec le programme installer dans un shell.

1voto

Mateusz Szlosek Points 21762

Vous pouvez déterminer qui est le propriétaire de la "console" et invoquer sudo -u commandement.

Quelque chose comme ça :

CONSOLE_USER=$(ps aux | grep console | grep -v grep | cut -d' ' -f1)
sudo -u $CONSOLE_USER COMMAND_TO_EXECUTE

0 votes

Je fais maintenant quelque chose de similaire en recherchant l'utilisateur qui a lancé le processus d'installation. ps aux | grep "CoreServices/Installer" | grep -v grep | awk '{print $1;}' Mais est-ce vraiment la "voie à suivre" ?

0 votes

A résolu mon problème et semble être plus stable que ma solution, puisque le nom de l'installateur n'est pas impliqué. Merci beaucoup !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X