Запустить действие, когда устройство отсоединено

4

Я использую 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 и другие подобные приложения исключены.

Редактировать:

Чтобы было ясно. Я хочу запускать скрипт оболочки каждый раз, когда эта конкретная док-станция подключается или отключается, а не всякий раз, когда какое-либо устройство подключено / отключено.

romeovs
источник

Ответы:

1

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

РЕДАКТИРОВАТЬ: После перечитывания вопроса, я вижу, что мой ответ был на самом деле не по теме.

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

У меня есть решение для того, что вы хотели бы сделать. Это на самом деле очень просто, но мне было бы сложно объяснить это в письменном виде, поэтому я записал видео для вас.

Инициирование события USB с помощью приложения Apple Automator

:)

PS. В видео я говорю об устройствах UBS, потому что я не осознавал, что вы хотели, чтобы это работало для Thunderbolt. Но я уверен, что решение для Thunderbolt все равно будет работать. :)

Владимир
источник
ОК, я только что обновил комментарий со ссылкой на видео.
Владимир
1
Я очень ценю ваши усилия по созданию этого видео для меня. Это решение, однако, не входит в механику для обнаружения отключающего устройства. Кроме того, для работы этого решения должно быть подключено запоминающее устройство, подключенное к док-станции, и события также будут запускаться, если подключены другие устройства хранения, кроме тех, которые находятся в док-станции. Я даю вам +1 за усилие, но это не тот ответ, который я ищу.
romeovs
На самом деле, моему решению не нужно подключать устройство к док-станции. (Вы говорите о OSX «Док» в нижней части экрана, верно?)
Владимир
И я понимаю, что вы имеете в виду об отделении, я неправильно понял ваш вопрос, извините.
Владимир
Да, теперь я вижу, что мой ответ был совершенно не по теме. Прошу прощения;)
Владимир
0

Когда я сам раньше искал подобное, я услышал о каком-то грязном решении, которое будет запускать ваш код всякий раз, когда устройство «выбрасывается».

Они нашли программу OSX, которая обычно выполняет операцию извлечения USB, и переименовали ее в что-то вроде Eject_old. Затем они написали свою собственную программу, которая сначала запускает нужный код, а затем вызывает программу Eject_old.

Они назвали эту новую программу так, как называли другую, поэтому теперь каждый раз, когда они извлекают устройство, программа запускает их программу в первую очередь. Конечно, это, вероятно, не поможет, если ваша док-станция отключена без предварительного извлечения.

Если вы думаете, что это может помочь с тем, что вы хотели бы сделать, дайте мне знать, и я могу еще немного разобраться.

:)

PS. Есть сторонние приложения, которые делают подобные вещи. Может быть, вы можете связаться с ними напрямую и спросить, как работают их программы.

Владимир
источник
Затем вы можете проверить свой код, какое устройство извлекается, чтобы определить, нужно ли для него что-то особенное.
Владимир