6 votes

Exécuter l'action lorsque le périphérique est détaché

Je utilise un agent launchd pour exécuter un script shell chaque fois que je connecte mon dock Thunderbolt. J'ai pu utiliser les notifications IOKit pour détecter quand le dock est connecté, mais je veux également exécuter un script shell lorsque le dock est déconnecté.

Pour détecter la connexion du dock, j'utilise l'événement device-attach de com.apple.iokit.matching:

 LaunchEvents

     com.apple.iokit.matching

         com.apple.device-attach

             IOProviderClass
             IOPCIDevice
             idVendor
             21
             idProduct
             4
             IOMatchStream

             IOMatchLaunchStream

Il devrait y avoir un événement déclenché également lors de la déconnexion, bien que je ne l'ai pas encore trouvé. La documentation d'Apple sur ce sujet est déplorable.

Je veux vraiment éviter d'utiliser une méthode de sondage qui vérifie constamment si le périphérique est toujours connecté. Il doit y avoir de meilleures solutions.

Aussi, Growl, ControlPlane et d'autres applications similaires sont exclus.

Éditer:

Pour être clair. Je veux exécuter un script shell chaque fois que ce dock spécifique est connecté ou déconnecté, pas chaque fois qu'un périphérique est connecté/déconnecté.

1voto

Vladimir Points 439

//////////////////////////////////////////////////////////////////////////////

MODIFICATION : En relisant la question, je vois que ma réponse était en fait hors sujet.

//////////////////////////////////////////////////////////////////////////////

J'ai une solution pour ce que vous aimeriez faire. C'est en fait très simple, mais ce serait trop difficile pour moi de l'expliquer par écrit, donc j'ai enregistré une vidéo pour vous.

Déclencher un événement USB en utilisant l'application Automator d'Apple

)

PS. Dans la vidéo, je parle des dispositifs UBS car je n'avais pas réalisé que vous vouliez que cela fonctionne pour Thunderbolt. Mais je suis assez sûr que la solution fonctionnera tout aussi bien pour Thunderbolt. :)

0voto

Vladimir Points 439

Lorsque je cherchais moi-même une solution similaire auparavant, j'ai entendu parler d'une solution un peu confuse qui exécutera votre code à chaque fois qu'un appareil est "éjecté".

Ce qu'ils ont fait, c'est trouver le programme OSX qui effectue normalement une opération d'éjection d'USB, et le renommer en quelque chose comme Eject_old. Ensuite, ils ont écrit leur propre programme, qui exécute d'abord le code qu'ils veulent, puis appelle le programme Eject_old.

Ils ont nommé ce nouveau programme comme l'autre, donc maintenant chaque fois qu'ils éjectent un appareil, leur programme s'exécute en premier. Bien sûr, cela ne vous aidera probablement pas si votre dock est déconnecté sans être éjecté au préalable.

Si vous pensez que cela pourrait vous aider pour ce que vous souhaitez faire, faites-le moi savoir et je pourrai approfondir un peu plus.

)

PS. Il existe des applications tierces qui font des choses similaires. Peut-être pouvez-vous les contacter directement et leur demander comment fonctionnent leurs programmes.

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