1 votes

Comment utiliser les événements de l'écran de verrouillage comme déclencheur d'un script ?

Ma Magic Mouse 2 est morte aujourd'hui et j'ai pensé que ce serait cool si je pouvais utiliser le verrouillage de l'écran comme un déclencheur pour envoyer une notification push à mon iPhone pour me rappeler de brancher ma souris pour la recharger.

Je me suis un peu renseigné. Il y a une application appelée EventScripts qui a un déclencheur d'écran de veille. J'ai essayé la démo, mais c'est trop lent.

J'ai également appris que je peux envoyer des notifications push via script de mon Mac à mon iPhone en utilisant Prowl/Growl.

Et j'ai trouvé que l'un des journaux du système ( /var/log/DiagnosticMessages/* ) contient activeScreenSaver des événements qui apparaissent immédiatement lorsque je regarde la console. Ce serait génial si je pouvais envoyer une notification push de prowl à chaque fois que activeScreenSaver apparaît dans ce journal, je sais comment envoyer le push, mais tous les fichiers dans /var/log/DiagnosticMessages sont binaires. Je peux les récupérer pour activeScreenSaver et voir qu'il y a des correspondances, mais je n'ai pas de fichier en ASCII que je puisse appliquer tail -f et de le transmettre à un script qui surveille les activeScreenSaver les occurrences et envoie le push... Est-ce que quelqu'un sait comment je pourrais surveiller ces fichiers pour activeScreenSaver occurrences ? J'ai déjà écrit des analyseurs de journaux similaires pour d'autres journaux en texte brut, mais je ne sais pas par où commencer lorsque j'ai affaire à des fichiers binaires qui changent de temps en temps.

J'ai essayé d'utiliser une balise iBeacon pour les rappels, mais le temps que je reçoive la notification, je suis trop paresseux pour retourner à mon bureau et brancher la souris. J'aimerais donc recevoir la notification push juste après avoir verrouillé l'écran... au moins jusqu'à ce que cela devienne une habitude.

UPDATE :

En cherchant sur Google, j'ai découvert que je pouvais le faire :

cat 2019.05.17.asl | strings - -o | grep activeScreenSaver
 290676 (com.apple.ScreenSaver.activeScreenSaver
 452746 (com.apple.ScreenSaver.activeScreenSaver
 481785 (com.apple.ScreenSaver.activeScreenSaver

Note, j'ai utilisé -o pour montrer le numéro de ligne correspondant afin que je puisse dire quels événements sont les bons.

Cependant, cela n'incluait pas tous mes événements de test de l'écran de verrouillage aujourd'hui. J'ai cherché dans la sortie des chaînes brutes et j'ai découvert que si je faisais ceci à la place, j'obtenais tous les événements d'aujourd'hui (lorsque je les compare à ce que je vois dans l'application Console en recherchant activeScreenSaver) :

cat 2019.05.17.asl | strings - -o | grep "QuartzCore,ScreenSaver"
 290278 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib
 443512 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib
 481387 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib
 482889 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib
 486926 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib
 488824 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib
 501148 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib
 504036 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib

Je pensais que j'étais prêt à partir, mais quand j'ai essayé tail -f au lieu de cat la sortie a été tronquée :

tail -c +1 -f 2019.05.17.asl | strings - -o | grep "QuartzCore,ScreenSaver"
 290278 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib
 443512 nAppKit,GLEngine,Flurry,QuartzCore,ScreenSaver,libdispatch.dylib,CoreFoundation,HIToolbox,Direct,libdyld.dylib

Je ne suis pas sûr de savoir pourquoi tail -f s'arrête au milieu du fichier... De plus, il faudrait encore que je trouve comment mettre à jour la queue quand le fichier change...

tail -F me permet d'aller plus loin - jusqu'à la fin du fichier, mais les nouvelles entrées ajoutées au fichier ne sortent pas.

De plus, j'ai essayé quelques versions homebrew de tail qui, je l'espérais, permettraient de surveiller plusieurs fichiers, mais aucune d'entre elles n'était capable de gérer les fichiers binaires...

Il est intéressant de noter que si je ne pipe pas la sortie de l'application strings à quoi que ce soit, je vois des messages en direct qui sortent continuellement. Mais si je fais un pipe vers grep d'un on-liner perl, le flux meurt à mi-chemin.

0voto

hepcat72 Points 1077

Eh bien, c'était facile. J'avais juste besoin d'aborder le problème sous un angle nouveau. Apparemment, la lecture d'un fichier journal système doit être faite en tant que super utilisateur :

sudo tail -c +1 -F 2019.05.17.asl | strings - -o | grep "QuartzCore,ScreenSaver"

Mettez sudo devant permet à la sortie de continuer à être crachée lorsque l'écran est verrouillé.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X