Avec l'aide de Growl documentation sur le support AppleScript et une petite discussion avec Bart Arondson y Elliot B dans le commentaires sur la question, j'ai créé l'AppleScript suivant.
J'ai sauvegardé ce script en tant qu'agent d'application que vous pouvez ajouter à vos éléments de connexion en Préférences système → Utilisateurs et groupes → Éléments de connexion .
En gros, cette application fonctionne en détectant si un exécutable unique lié à l'utilisation de la caméra est consulté. Chaque fois que l'exécutable est accédé, l'application le notifie à Growl :
Il est important de savoir que ce script contrôle l'accès à l'exécutable...
/System/Library/Frameworks/CoreMediaIO.framework/Versions/A/Resources/VDC.plugin/Contents/MacOS/VDC
script complet
-- 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
0 votes
Je suppose que le pilote iSight est consulté à chaque fois. En supposant que atime soit activé sur votre système de fichiers (c'est le cas par défaut), vous pouvez vérifier la date du dernier accès à ce pilote de la manière suivante :
ls -lu /System/Library/Quicktime/QuickTimeUSBVDCDigitizer.component/Contents/MacOS/QuickTimeUSBVDCDigitizer | awk '{print $6,$7,$8}'
. Ecrivez un script combinant cela avec growlnotify et faites le tourner en arrière plan. Et voilà !1 votes
J'ai copié-collé la ligne de code dans le terminal et j'ai obtenu :
No such file or directory
0 votes
@BartArondson Comme c'est une commande très longue, il y a quelques problèmes de formatage lors de la copie. Donc, soit vous naviguez manuellement vers ce répertoire et exécutez
ls -lu
ou copier la commande entière depuis aquí . Je vais essayer de trouver une solution fonctionnant avec Growl, mais ne vous attendez pas à ce que cela arrive aujourd'hui. Peut-être que quelqu'un d'autre est plus rapide que moi...0 votes
Merci, la commande du lien dropbox fonctionne. Cependant, l'exécution de la commande me montre une date et une heure à laquelle je n'ai pas utilisé mon iSight. De même, le fait d'allumer Photo Booth (donc aussi l'iSight), de l'éteindre à nouveau et d'exécuter la commande ne change pas la date affichée. Il semble donc que la commande ne fonctionne pas comme prévu. Une solution fonctionnelle serait formidable, mais rien ne presse, j'ai posé cette question en janvier, je peux attendre un peu plus.
0 votes
J'ai écrit une application AppleScript qui notifie l'accès à un fichier. Vous pouvez la télécharger aquí . L'intervalle pour détecter un accès est de 10s. Cependant, le vrai problème est de savoir quel est le fichier auquel on accède de manière unique lorsque la caméra est utilisée. Tant qu'on ne le sait pas, cette application est inutile. Pour le moment, elle notifie un accès à
/System/Library/CoreServices/RawCamera.bundle/Contents/MacOS/RawCamera
.0 votes
Merci. Y a-t-il un moyen de savoir à quels fichiers on accède lorsque l'iSight est allumée ? Est-ce que je peux d'une manière ou d'une autre tracer cela dans le Terminal ?
0 votes
J'ai vérifié les fichiers et les ports ouverts dans le moniteur d'activité (via Inspect) et j'ai trouvé les fichiers que Skype (en utilisant l'iSight) et Photo Booth ouvrent. Je les ai listés tous les deux, les ai comparés et ai extrait les fichiers que les deux programmes ouvrent. Ils sont listés aquí . L'un de ces fichiers doit être unique à l'utilisation de l'iSight. J'ai essayé celui de la ligne 12 (..../MacOS/VDC), je l'ai collé dans votre script et il semble fonctionner. Lorsque Skype, PhotoBooth, FaceTime ou une application web Flash utilise l'iSight, je reçois une notification.
0 votes
Le fichier que j'ai mentionné ci-dessus est celui dont j'ai besoin. Je viens d'essayer d'autres applications qui utilisent iSight et à chaque fois j'ai eu une notification de Growl. Merci beaucoup pour votre aide, si vous postez une réponse avec ma modification suggérée, je l'accepterai.
0 votes
Si c'est vraiment ça, je suis très content que ça ait marché. Je vais bientôt poster une réponse et faire un petit changement dans le fichier
.plist
afin que l'application s'exécute en tant qu'agent en arrière-plan (sans icône de dock).