Я использую launchd
агент для запуска сценария оболочки всякий раз, когда подключаю свой док Thunderbolt. Я был в состоянии использовать IOKit
уведомления, чтобы определить, когда присоединяется док, но я также хочу запускать сценарий оболочки всякий раз, когда док отсоединяется.
Для того, чтобы обнаружить крепление док я использую com.apple.iokit.matching
«s device-attach
событие:
<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>
Должно быть и событие, которое будет происходить при отсоединении, хотя я еще не увлекался им. Apple документация на эту тему плачевна.
Я действительно хочу избегать использования метода опроса, который постоянно проверяет, подключено ли устройство. Некоторые лучшие решения должны
Также рычание, ControlPlane и другие подобные приложения исключены.
Редактировать:
Чтобы было ясно. Я хочу запускать скрипт оболочки каждый раз, когда эта конкретная док-станция подключается или отключается, а не всякий раз, когда какое-либо устройство подключено / отключено.
источник
Когда я сам раньше искал подобное, я услышал о каком-то грязном решении, которое будет запускать ваш код всякий раз, когда устройство «выбрасывается».
Они нашли программу OSX, которая обычно выполняет операцию извлечения USB, и переименовали ее в что-то вроде Eject_old. Затем они написали свою собственную программу, которая сначала запускает нужный код, а затем вызывает программу Eject_old.
Они назвали эту новую программу так, как называли другую, поэтому теперь каждый раз, когда они извлекают устройство, программа запускает их программу в первую очередь. Конечно, это, вероятно, не поможет, если ваша док-станция отключена без предварительного извлечения.
Если вы думаете, что это может помочь с тем, что вы хотели бы сделать, дайте мне знать, и я могу еще немного разобраться.
:)
PS. Есть сторонние приложения, которые делают подобные вещи. Может быть, вы можете связаться с ними напрямую и спросить, как работают их программы.
источник