14 votes

Faire en sorte qu'un script/app s'exécute à la déconnexion

Nous savons tous que Mac OS X dispose de la très utile Articles de connexion qui vous permet, entre autres, de configurer des apps/scripts à exécuter lorsque vous vous connectez.

Je cherche un moyen de configurer une liste de scripts/apps qui s'exécutent lorsque je se déconnecter . Une liste des "éléments de déconnexion", si vous voulez.
En gros, je veux écrire quelques petits scripts de nettoyage pour moi-même qui s'exécuteront automatiquement lorsque je me déconnecte ou que je m'arrête.

Je cherche donc un moyen d'avoir un script (ou, idéalement, une liste de ceux-ci) déclenché automatiquement lorsque je me déconnecte. La déconnexion attendrait que le script se termine (tout comme la déconnexion attend que vous cliquiez sur Enregistrer si une application le demande).

Existe-t-il un moyen de déclencher automatiquement un (des) script lorsque je me déconnecte de Mac OS X ?

7voto

Fuzzy Purple Monkey Points 702

Les crochets de déconnexion étaient déprécié en 10.4 mais ils fonctionnent toujours à partir de la 10.9.

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\nsay a' > ~/.logouthook
chmod +x ~/.logouthook

La valeur de la clé LogoutHook ne peut être qu'un chemin vers un exécutable et non une commande shell. Le crochet de déconnexion est exécuté en tant que Root.

La commande defaults modifie /var/Root/Library/Preferences/com.apple.loginwindow.plist. L'ajout d'une clé LogoutHook dans /Library/Preferences/com.apple.loginwindow.plist ne fonctionne pas.

Si un crochet de déconnexion prend suffisamment de temps pour s'exécuter, un écran gris s'affiche jusqu'à ce que le crochet de déconnexion se termine. Il ne semble pas y avoir de limite de temps après laquelle les crochets de déconnexion sont forcés de se terminer.

Je n'ai pas encore trouvé le moyen de lancer des programmes lors de la déconnexion de manière fiable avec launchd. Lorsque j'ai essayé de piéger des signaux comme EXIT, le code dans le piège n'était exécuté que lorsque je me déconnectais de la fenêtre de connexion et non lorsque je m'arrêtais ou redémarrais.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//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>bash</string>
    <string>-c</string>
    <string>trap 'echo a>/Users/username/Desktop/a;say a' EXIT;while :;do sleep 10;done</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

0 votes

Hmm, aucune de ces solutions n'a fonctionné pour moi. J'ai cette script qui fonctionne si je l'exécute avec sh (il crée ce fichier .txt). J'ai enregistré le script sous /etc/rc.shutdown.local, et je l'ai ajouté avec defaults comme vous l'avez dit. Aucun des deux fichiers n'existait déjà. Est-ce que je fais quelque chose de mal ? Je vous remercie.

0 votes

Je ne sais pas si je fais quelque chose de mal ou non. Je suis sur 10.6.8 et LogoutHook ne fonctionne pas. J'apprécierais que vous jetiez un coup d'œil à cette capture d'écran et faites-moi savoir si quelque chose ne va pas. Merci de votre compréhension.

1 votes

Ah ! la dernière a fait l'affaire sur 10.6.8. Merci ! Une remarque cependant : cela ne fonctionne pas avec Lion :(

4voto

HugoRune Points 3921

En fait, il existe une méthode non dépréciée pour le faire :

  1. Ouvrez l'application "script Editor".

  2. Pâte

    do shell script "PUT YOUR START SCRIPT PATH HERE"
    
    on quit
        do shell script "PUT YOUR STOP SCRIPT PATH HERE"
        continue quit
    end quit
  3. Fichier > Enregistrer, Sélectionner Application y Rester ouvert après avoir exécuté le gestionnaire et sauver

  4. Préférences système > Utilisateurs et groupes > onglet Éléments de connexion > bouton +.

  5. Ajouter l'application et la marquer comme cachée

Pour le cacher du Dock :

  1. Cliquez avec le bouton droit de la souris sur l'application et sélectionnez Afficher le contenu du paquet.
  2. Ouvrez Info.plist et ajoutez

    <key>NSUIElement</key> <string>1</string>

0 votes

J'adore ça. Simple et adapté à mes besoins. Et pas déprécié.

0voto

daviesgeek Points 35275

script Minuteur est un bon choix pour cela. Il peut s'exécuter lors de la déconnexion, de la connexion, et bien plus encore. J'opterais pour cette solution simple et facile à utiliser. Il a une interface graphique simple :

Triggered action

Il y a deux choses que vous devez noter à propos de script Timer. Premièrement, c'est no gratuit. Il coûte 12 $, mais je pense personnellement qu'il en vaut la peine. Deuxièmement, il n'est pas entièrement compatible avec Lion, mais ils ont promis une mise à jour gratuite dès qu'ils l'auront rendu compatible.

1 votes

Cette fonction est désormais obsolète

0voto

Styxsksu Points 1117

Vous pouvez également créer une application Mac à partir de votre script en utilisant quelque chose comme L'ornithorynque puis l'ajouter aux éléments de connexion comme toute autre application.

0voto

Graham Miln Points 39606

Gestionnaire d'énergie peut exécuter un script lorsqu'un utilisateur se déconnecte. Il s'agit d'un produit commercial et il prend en charge les derniers MacOS.

Power Manager run a script on log out Schedule Assistant task

Versions antérieures nécessaire en utilisant l'éditeur d'événements mais une tâche de l'assistant de programmation est maintenant incluse pour exécuter les scripts lors des ouvertures et fermetures de session.

J'ai écrit Power Manager, alors n'hésitez pas à poser des questions techniques sur sa mise en œuvre. Dans le cas des événements déclenchés par la déconnexion, Power Manager n'interroge pas les changements d'état de l'utilisateur, mais est informé des changements d'utilisateur par MacOS. Cette approche est plus efficace que d'avoir un script qui boucle et sonde.

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