Aygıt ayrıldığında eylemi çalıştır


4

launchdThunderbolt dock'umu her bağladığımda bir kabuk betiği çalıştırmak için bir aracı kullanıyorum . IOKitDock'un ne zaman takıldığını algılamak için bildirimleri kullanabildim , ancak dock ne zaman çıkarılırsa bir kabuk betiği de çalıştırmak istiyorum.

Dock'un ekini tespit etmek için com.apple.iokit.matching's device-attacholayı kullanıyorum:

 <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>

Henüz düşlememiş olmama rağmen, aynı zamanda kopmaktan ateşlenen bir olay olmalı. Bu konuyla ilgili elma belgeleri konuşlandırılabilir.

Gerçekten cihazın hala bağlı olup olmadığını kontrol etmeye devam eden bir sorgulama yöntemi kullanmaktan kaçınmak istiyorum. Bazı daha iyi çözümler gerekir

Ayrıca growl, ControlPlane ve diğer benzer uygulamalar söz konusu değil.

Düzenle:

Açık olmak gerekirse. Herhangi bir cihazın takılı / çıkarılmış olduğu durumlarda değil, bu belirli dok her bağlandığında veya bağlantısı kesildiğinde bir kabuk betiği çalıştırmak istiyorum .

Yanıtlar:


1

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

EDIT: Soruyu tekrar okuduktan sonra cevabımın gerçekten konu dışı olduğunu görüyorum.

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

Yapmak istediğin şey için bir çözümüm var. Aslında çok basit, ama bunu yazılı olarak açıklamak benim için zor olurdu, bu yüzden sizin için bir video kaydettim.

Apple'ın Automator uygulamasını kullanarak bir USB olayını tetikleyin

:)

PS. Videoda UBS cihazları hakkında konuşuyorum çünkü bunun Thunderbolt için çalışmasını istediğinizi anlamadım. Ancak çözümün hala Thunderbolt için de iyi çalışacağından eminim. :)


Tamam Ben sadece videoyu bağlayan bir yorum yaptım.
Vladimir,

1
Bu videoyu benim için yaptığınız çabayı gerçekten takdir ediyorum. Bununla birlikte, bu çözüm, bir bağlantı kesme cihazının tespit edilmesi için bir tamirciye girmez . Ayrıca, bu çözümün çalışması için iskeleye takılı bir depolama aygıtı olması gerekir - ve iskelede bulunanlardan başka depolama aygıtları bağlıysa olaylar da tetiklenir. Çaba için size +1 veriyorum ama aradığım cevap bu değil.
romeovs

Aslında benim çözümümün iskeleye takılması için bir cihaza ihtiyacı yok. (Ekranın altındaki OSX "Dock" dan bahsediyorsun, değil mi?)
Vladimir

Ayırıcı şey hakkında ne demek istediğinizi anlıyorum, sorunuzu yanlış anladım, üzgünüm.
Vladimir

Evet, şimdi cevabımın tamamen konu dışı olduğunu gördüm. Üzgünüm;)
Vladimir

0

Daha önce kendimden benzer bir şey ararken, bir cihaz "Ejected" olduğunda kodunuzu çalıştıracak dağınık bir çözüm hakkında bir şeyler duydum.

Yaptıkları normalde bir USB Çıkarma işlemi gerçekleştiren OSX programını bulmak ve Eject_old gibi bir şeyle yeniden adlandırmaktı. Sonra, ilk önce istedikleri kodu çalıştıran ve daha sonra Eject_old programını çağıran kendi programlarını yazdılar.

Bu programa diğerinin adı ne olursa olsun adını verdiler, bu yüzden bir aygıtı her çıkardıklarında önce programlarını çalıştırıyorlar. Tabii ki bu muhtemelen ilk önce çıkarılmadan dock bağlantısı kesilirse yardımcı olmaz.

Bunun yapmak istediklerinize yardımcı olabileceğini düşünüyorsanız, bana bildirin, ben de biraz daha inceleyebilirim.

:)

PS. Benzer şeyler yapan üçüncü taraf uygulamalar var. Belki doğrudan onlarla iletişim kurabilir ve programlarının nasıl çalıştığını sorabilirsiniz.


Daha sonra, hangi cihaz için özel bir şey yapmanız gerekip gerekmediğini belirlemek için hangi cihazın çıkarıldığını kontrol etmenizi isteyebilirsiniz.
Vladimir,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.