Comment exécuter un script lors de la connexion / déconnexion sous OS X?


10

Je joue avec la création d'un gestionnaire de ferme de rendu personnalisé et je veux ajouter automatiquement des machines OS X à la ferme de rendu lorsqu'elles ne sont pas utilisées.

Existe-t-il un moyen de déclencher l'exécution d'un script une fois qu'un utilisateur s'est déconnecté, puis de s'arrêter lorsqu'un utilisateur s'est connecté?

Réponses:


10

Il existe plusieurs façons d'exécuter des scripts lors de la connexion / déconnexion sous OS X , certains sont plus récents et ne s'appliquent qu'à 10.5 et supérieur, certains sont plutôt obsolètes, mais le plus rapide serait d'ajouter un Login Hook.

Créez d'abord le script que vous souhaitez exécuter. Ouvrez un terminal et entrez:

touch ~/script.sh
open -e !$

Cela ouvrira un éditeur de texte. Entrez le script, par exemple avec le contenu suivant:

#!/bin/sh
# insert your script here

Enregistrez le fichier. Dans votre terminal, exécutez:

chmod +x ~/script.sh

Cela rendra le fichier exécutable. Maintenant, ajoutons-le comme un crochet:

sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/script.sh 

Il y a aussi la Logout Hookcontrepartie:

sudo defaults write com.apple.loginwindow LogoutHook /usr/local/bin/script2.sh

J'ai testé cela sur OS X 10.6, et cela devrait fonctionner même jusqu'à 10.8. Gardez à l'esprit que le script s'exécute en tant que rootet il n'y a qu'un seul crochet pour la connexion et la déconnexion respectivement.

Pour annuler tout cela, entrez

sudo defaults delete com.apple.loginwindow LoginHook
sudo defaults delete com.apple.loginwindow LogoutHook

Notez que cette méthode n'est pas recommandée pour le déploiement ou quoi que ce soit, mais si vous l'utilisez uniquement comme indiqué dans votre question, cela ne devrait pas poser de problème.


ne fonctionne pas pour yosemite
davidcondrey

5

Les hooks de connexion ont été dépréciés en 10.4 en faveur de launchd. Pour exécuter un script à la connexion, enregistrez un plist comme celui-ci sous ~/Library/LaunchAgents/test.plist. Il est chargé lors de la prochaine connexion même si vous ne lancez pas launchctl load ~/Library/LaunchAgents/test.plist.

<?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>test</string>
    <key>ProgramArguments</key>
    <array>
        <string>say</string>
        <string>test</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Pour plus d'informations, voir man launchd.plistet cet article de blog .


Selon l'article de blog lié, cela chargera la liste la première fois que vous vous connecterez et la gardera chargée jusqu'au redémarrage du système. Comment utilisez-vous launchd pour exécuter un script à chaque connexion? Ou à la déconnexion?
ShadSterling

-1

Pour que ces crochets fonctionnent en 10.10, vous devrez faire ceci:

  1. Ouvrez le /etc/ttysfichier: dans le Finder, choisissez Aller au dossier dans le menu Aller, tapez /etc/, puis cliquez sur Aller.

  2. Dans la fenêtre résultante, ouvrez le ttysfichier dans votre éditeur de texte préféré (tel que TextEdit).

  3. Recherchez une ligne qui se lit comme suit:

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

  4. Modifiez cette ligne pour qu'elle se lise comme suit (il n'y a pas de coupure dans cette ligne):

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow -LoginHook /path/to/script" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

    c'est-à-dire, ajoutez (où est le chemin d'accès complet au script que vous souhaitez exécuter lorsqu'un utilisateur se connecte) juste avant la deuxième marque quote ( ).-LoginHook /path/to/script/path/to/script"

  5. Enregistrez le fichier.

Assurez-vous que l'éditeur de texte que vous utilisez pour modifier ce fichier ne coupe pas la ligne ci-dessus en plusieurs lignes.


ou suivez les instructions complètes ici:

http://support.apple.com/en-ca/HT2420


ne fonctionne pas pour yosemite
davidcondrey
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.