web-dev-qa-db-fra.com

Exécution du script lors de la connexion mac

Je me demande si quelqu'un est capable de m'aider à obtenir un fichier .sh à exécuter lorsque je me connecte à mon compte sur mon ordinateur. J'utilise Mac OS X 10.6.7.

J'ai un fichier "Example.sh" que je veux exécuter lorsque je me connecte à mon ordinateur. Je n'ai pas de problème à l'exécuter quand je suis déjà connecté, mais je veux que cela s'exécute automatiquement.

Les gens disent de l'ajouter au fichier shell de connexion, mais je ne sais pas où il se trouve. Un peu d'aide s'il vous plaît.

239
MZimmerman6

Suivez ceci:

  • démarrer Automator.app
  • sélectionnez Application
  • cliquez Show library dans la barre d'outils (si masqué)
  • ajouter Run Shell script (du Actions/Utilities)
  • copier et coller votre script dans la fenêtre
  • essaye-le
  • enregistrer quelque part (par exemple, vous pouvez créer un dossier Applications dans votre HOME, vous obtiendrez un your_name.app)

  • allez à System Preferences -> Accounts -> Login items

  • ajouter cette application
  • test et fait;)

EDIT:

J'ai récemment obtenu un badge "Bonne réponse" pour cette réponse. Bien que ma solution soit simple et efficace, le moyen le plus propre d’exécuter un programme ou un script Shell au moment de la connexion est décrit dans la section réponse de @ trisweb, , sauf si , vous voulez de l’interactivité .

Avec la solution automator, vous pouvez faire les choses suivantes: automator screenshot login application

alors, demandant d'exécuter un script ou de quitter l'application, demandant des mots de passe, exécutant d'autres flux de travaux de l'automate au moment de la connexion, exécutant des applications de manière conditionnelle au moment de la connexion, etc.

331
jm666

tl; dr: utilise le lanceur et le gestionnaire de processus natifs d’OSX, launchd.

Pour ce faire, créez un démon launchctl. Vous aurez un contrôle total sur tous les aspects du script. Vous pouvez exécuter une fois ou rester en vie en tant que démon. Dans la plupart des cas, c'est la voie à suivre.

  1. Créez un fichier .plist conformément aux instructions dans la AppleDev Docs ici ou plus de détails ci-dessous.
  2. Placez dans ~/Library/LaunchAgents
  3. Connectez-vous (ou exécutez manuellement via launchctl load [filename.plist])

Pour plus d'informations sur launchd, l'article de Wikipédia est plutôt bon et décrit le système et ses avantages par rapport aux systèmes plus anciens.


Voici le fichier de plist spécifique pour exécuter un script à la connexion .

Mise à jour le 25/09/2017 pour OSX El Capitan et versions ultérieures (crédit pour José Messias Jr ):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>com.user.loginscript</string>
   <key>ProgramArguments</key>
   <array><string>/path/to/executable/script.sh</string></array>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

Remplacez le <string> après la touche Programme par la commande souhaitée.

Enregistrer sous ~/Library/LaunchAgents/com.user.loginscript.plist

Exécutez launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist et déconnectez-vous pour tester (ou pour tester directement, exécutez launchctl start com.user.loginscript)

Tail /var/log/system.log pour les messages d'erreur.

La clé est qu'il s'agit d'une entrée launchd spécifique à l'utilisateur. Elle sera donc exécutée lors de la connexion pour l'utilisateur donné. Les démons de lancement spécifiques au système (placés dans /Library/LaunchDaemons) sont exécutés au démarrage.

Si vous souhaitez qu'un script soit exécuté lors de la connexion pour tous les utilisateurs, je pense que LoginHook est votre seule option, et c'est probablement la raison pour laquelle il existe.

348
trisweb
  1. Créez votre script Shell sous le nom login.sh dans votre dossier $ HOME.

  2. Collez le script d'une ligne suivant dans l'éditeur de script:

    le script shell "$ HOME/login.sh"

  3. Puis enregistrez-le en tant qu'application.

  4. Enfin, ajoutez l’application à vos éléments de connexion.

Si vous souhaitez rendre la sortie du script visuelle, vous pouvez permuter l'étape 2 pour cela:

tell application "Terminal"
  activate
  do script "$HOME/login.sh"
end tell

Si plusieurs commandes sont nécessaires, vous pouvez utiliser quelque chose comme ceci:

tell application "Terminal"
  activate
  do script "cd $HOME"
  do script "./login.sh" in window 1
end tell
36
anubhava