Dropbox, PushBullet, Thunderbird y una docena de otras aplicaciones crean notificaciones. ¿Es posible registrarlos de forma similar a Unix?
No me gustan los pequeños mensajes que aparecen durante unos segundos y luego desaparecen sin dejar rastro.
Básicamente, quiero poder grep un archivo que contenga una línea para cada notificación.
Como lo vinculó Arthur Hammer, https://apple.stackexchange.com/a/142811/37689 establece que las notificaciones se almacenan en una base de datos SQLite. El siguiente script de python debería ayudarlo a comenzar:
#!/usr/bin/env python
import os
import re
import sqlite3
# Location of notification centers database under Yosemite
tmp = os.environ['TMPDIR']
conn = sqlite3.connect(tmp + '/../0/com.apple.notificationcenter/db/db')
for notification in conn.execute('SELECT * from notifications'):
encoded_data = str(notification[-1]) # last item
clean = re.sub('[^\w\s-]', '', encoded_data) # remove some funny stuff (fixme: removes too much?)
sp = clean.split('\t')
# Find NSActualdeliverydate, message content seems to always come after this
for ix in range(len(sp)):
if 'NSActualdeliverydate' in sp[ix]:
break
# Skip blanks
for ix in range(ix+1, len(sp)):
if sp[ix] != '': break
print 'notification', sp[ix].replace('_', '\n').strip()
conn.close()
Luego puede canalizar esto a un archivo y luego grep el archivo, o simplemente grep la salida del script directamente.
La respuesta de @oystein es genial, pero supongo que solo funciona para yosemite porque el sqlite db para high sierra es un modelo de db diferente...
así que encontré esta herramienta fácil... (que funciona perfectamente para high seirra) https://github.com/ydkhatri/MacForensics/blob/master/macNotifications.py
simplemente ejecute con su entrada de ruta de base de datos y ruta de salida .csv que le gustaría crear
nota: para encontrar la ruta de la base de datos de su centro de notificaciones, vea esto... https://stackoverflow.com/a/26777027
glff!
Primero ubique los archivos sqlite db y db-wal donde reside la notificación. Como en mojave, se puede encontrar usando este comando:
lsof -p $(ps aux | grep -m1 usernoted | awk '{ print $2 }')| awk '{ print $9 }' | grep 'db2/db$' | xargs dirname
Luego, como mencionó @greenhouse, el script MacFronsics es una buena opción para analizar el archivo db. Por lo que he probado, el script también es compatible con mojave.
En caso de que alguien no obtenga la última notificación, es probable que las notificaciones más recientes no estén en la base de datos principal. El análisis directo del archivo db terminaría con notificaciones antiguas. Si desea las últimas notificaciones, recuerde migrar el registro en el archivo db-wal (Write AHead Log) a db primero.
Arturo