Esegui l'azione quando il dispositivo è scollegato

3

Sto utilizzando un agente launchd per eseguire uno script di shell ogni volta che collego il mio dock thunderbolt. Sono stato in grado di utilizzare le notifiche di IOKit per rilevare quando viene collegato il dock, ma voglio anche eseguire uno script di shell ogni volta che il dock viene rimosso.

Per rilevare l'allegato del dock, utilizzo com.apple.iokit.matching 's device-attach event:

 <key>LaunchEvents</key>
 <dict>
     <key>com.apple.iokit.matching</key>
     <dict>
         <key>com.apple.device-attach</key>
         <dict>
             <key>IOProviderClass</key>
             <string>IOPCIDevice</string>
             <key>idVendor</key>
             <integer>21</integer>
             <key>idProduct</key>
             <integer>4</integer>
             <key>IOMatchStream</key>
             <true/>
             <key>IOMatchLaunchStream</key>
             <true/>
         </dict>
    </dict>
</dict>

Ci dovrebbe essere un evento che viene licenziato anche se non mi piace ancora. La documentazione della mela su questo argomento è deplorevole.

Voglio davvero evitare l'uso di un metodo di polling che continua a controllare se il dispositivo è ancora collegato. Alcune soluzioni migliori devono

Anche ringhiare, ControlPlane e altre app simili sono fuori questione.

Modifica:

Per essere chiari. Voglio eseguire uno script di shell ogni volta che questo dock specifico è connesso o disconnesso, non ogni volta che un dispositivo è collegato / scollegato.

    
posta romeovs 31.07.2014 - 19:25
fonte

2 risposte

1

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

EDIT: rileggendo la domanda, vedo che la mia risposta era effettivamente fuori tema.

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

Ho una soluzione per ciò che vorresti fare. In realtà è davvero semplice, ma sarebbe difficile per me spiegarlo per iscritto, quindi ho registrato un video per te.

Attiva un evento USB utilizzando l'app di Automator di Apple

:)

PS. Nel video parlo dei dispositivi UBS perché non avevo capito che volevi che funzionasse per Thunderbolt. Ma sono abbastanza sicuro che la soluzione funzionerà altrettanto bene per Thunderbolt. :)

    
risposta data 03.08.2014 - 18:16
fonte
0

Quando stavo cercando una cosa simile prima, ho sentito parlare di una soluzione disordinata che eseguirà il tuo codice ogni volta che un dispositivo viene "espulso".

Quello che hanno fatto è stato trovare il programma OSX che normalmente esegue un'operazione di espulsione USB e lo ha rinominato in qualcosa come Eject_old. Poi hanno scritto il loro programma, che prima esegue il codice che vogliono e poi chiama il programma Eject_old.

Hanno chiamato questo nuovo programma qualunque sia stato chiamato l'altro, quindi ora ogni volta che espellono un dispositivo esegue prima il programma. Naturalmente questo probabilmente non ti aiuterà se il tuo dock è disconnesso senza prima essere espulso.

Se pensi che questo possa essere d'aiuto con ciò che vorresti fare, fammelo sapere e potrò approfondire l'argomento.

:)

PS. Esistono app di terze parti che fanno cose simili. Forse puoi contattarli direttamente e chiedere come funzionano i loro programmi.

    
risposta data 03.08.2014 - 20:31
fonte

Leggi altre domande sui tag