Как показать уведомление при включении веб-камеры iSIght?

Можно ли получить уведомление на рабочем столе при включении iSight? Было бы оптимально, если бы это можно было пройти через Growl, но я попробовал HardwareGrowler, и он не дает мне уведомления.

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

У меня MacBook Pro 5,3 и у меня Mountain Lion 10.8.3.

Я предполагаю, что к драйверу iSight обращаются каждый раз. Предполагая, что в вашей файловой системе включено atime (по умолчанию оно включено), вы можете проверить, когда последний раз обращались к этому драйверу, следующим образом: ls -lu /System/Library/Quicktime/QuickTimeUSBVDCDigitizer.component/Contents/MacOS/QuickTimeUSBVDCDigitizer | awk '{print $6,$7,$8}'. Напишите скрипт, сочетающий это с гроулнотифи, и заставьте его работать в фоновом режиме. Та-даа!
Я скопировал строку кода в терминал и получил:No such file or directory
@BartArondson Поскольку это такая длинная команда, при ее копировании возникают некоторые проблемы с форматированием. Так что либо перейдите вручную в этот каталог и запустите, ls -luлибо скопируйте всю команду отсюда . Я постараюсь найти решение, работающее с Growl, но не ожидайте, что оно появится сегодня. Может быть, кто-то другой быстрее меня...
Спасибо, команда dropbox link работает. Однако запуск команды показывает мне дату и время, когда я не использовал свой iSight. Также включение Photo Booth (а также iSight), его повторное выключение и запуск команды не меняет отображаемую дату. Таким образом, кажется, что команда работает не так, как ожидалось. Было бы здорово рабочее решение, но не торопитесь, я задавал этот вопрос еще в январе, можно еще немного подождать.
Я написал приложение AppleScript, которое будет уведомлять о доступе к файлу. Вы можете скачать его здесь . Интервал обнаружения доступа составляет 10 с. Однако реальная проблема заключается в том, чтобы знать, к какому файлу осуществляется уникальный доступ при использовании камеры. Пока мы этого не знаем, это приложение бесполезно. На данный момент уведомляет о доступе к /System/Library/CoreServices/RawCamera.bundle/Contents/MacOS/RawCamera.
Спасибо. Есть ли способ узнать, к каким файлам осуществляется доступ при включении iSight? Могу ли я как-то отследить это в Терминале?
Я проверил открытые файлы и порты в мониторе активности (через Inspect) и нашел файлы, которые открываются Skype (при использовании iSight) и Photo Booth. Я перечислил их обе, сравнил их и извлек файлы, которые открываются обеими программами. Они перечислены здесь . Один из этих файлов должен быть уникальным для использования iSight. Я попробовал тот, что в строке 12 (..../MacOS/VDC), вставил его в ваш скрипт, и, похоже, он работает. Когда Skype, PhotoBooth, FaceTime или веб-приложение Flash используют iSight, я получаю уведомление.
Файл, который я упомянул выше, - это тот, который мне нужен. Я просто пробовал другие приложения, использующие iSight, и каждый раз получал уведомление Growl. Большое спасибо за вашу помощь, если вы опубликуете ответ с моей предложенной модификацией, я приму ее.
Если это действительно так, я очень рад, что это сработало. Я собираюсь опубликовать ответ в ближайшее время и внести небольшое изменение в .plistфайл, чтобы приложение работало как агент в фоновом режиме (без значка в доке).

Ответы (2)

С помощью документации Growl о поддержке AppleScript и небольшого обсуждения с Бартом Арондсоном и Эллиотом Б. в комментариях к вопросу я придумал следующий AppleScript.

Я сохранил этот сценарий в качестве агента приложения, который вы можете добавить к своим элементам входа в систему в « Системные настройки» → «Пользователи и группы» → «Элементы входа» .

По сути, это приложение работает, обнаруживая доступ к уникальному исполняемому файлу, связанному с использованием камеры. Всякий раз, когда к исполняемому файлу обращаются, приложение уведомляет об этом Growl:

введите описание изображения здесь

Скачать

Важно знать, что этот скрипт отслеживает доступ к исполняемому файлу...

/System/Library/Frameworks/CoreMediaIO.framework/Versions/A/Resources/VDC.plugin/Contents/MacOS/VDC

Полный сценарий

-- check if growl is running in order to avoid the "Choose Application" dialog
tell application "System Events"
    set isRunning to (count of (every process whose bundle identifier is "com.Growl.GrowlHelperApp")) > 0
end tell

-- store time of last iSight access
global lastopened
set lastopened to do shell script "ls -lu /System/Library/Frameworks/CoreMediaIO.framework/Versions/A/Resources/VDC.plugin/Contents/MacOS/VDC | awk '{print $6,$7,$8}'"

-- make the application ready for use with growl
if isRunning then
    tell application id "com.Growl.GrowlHelperApp"

        -- make a list of all the notification types that this script will ever send
        set the allNotificationsList to ¬
            {"iSight access monitor"}

        -- register the script with growl
        register as application ¬
            "iSight access monitor" all notifications allNotificationsList ¬
            default notifications allNotificationsList ¬
            icon of application "FaceTime"

        -- send the first notification right after the application is started
        notify with name ¬
            "iSight access monitor" title ¬
            "iSight access monitor" description ¬
            "last iSight access: 
" & lastopened application name "iSight access monitor"
    end tell
end if

-- monitoring routine: checks every 10s if the VDC executable has been accessed
on idle
    tell application id "com.Growl.GrowlHelperApp"
        set newopen to do shell script "ls -lu /System/Library/Frameworks/CoreMediaIO.framework/Versions/A/Resources/VDC.plugin/Contents/MacOS/VDC | awk '{print $6,$7,$8}'"
        if (newopen is not equal to lastopened) then
            notify with name ¬
                "iSight access monitor" title ¬
                "iSight access monitor" description ¬
                "new iSight access: 
" & newopen application name "iSight access monitor"
            set lastopened to newopen
        end if
    end tell
    return 10 -- interval in seconds
end idle
Ах, я слишком рано обрадовался. Citrix Viewer, клиент удаленного рабочего стола, также обращается к VDCфайлу по мере его открытия. Это имеет смысл, так как может потребоваться доступ к камере, но это делает это решение менее совершенным.
@BartArondson Жаль. Я надеюсь, что какой-нибудь знающий разработчик Mac наткнется на этот вопрос и сможет улучшить ответ в будущем.

Micro Snitch делает именно то, что я искал:

Вы когда-нибудь задумывались, записывает ли приложение звук через встроенный микрофон вашего Mac без вашего ведома? Или если камера снимает видео без уважительной причины?

С Micro Snitch больше нет сомнений. Это сверхлегкое приложение строки меню незаметно работает в фоновом режиме. Он отслеживает и сообщает о любой активности микрофона и камеры, чтобы помочь вам выяснить, не шпионит ли кто-то за вами.

Это не бесплатно (4,50 евро на момент написания статьи), но я думаю, что оно того стоит.

Никакой принадлежности, просто счастливый пользователь.