¿Cómo puedo registrar todas las notificaciones? [duplicar]

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.

Esta respuesta y esta indican que hay una base de datos SQLite del centro de notificación. Sin embargo, no es un simple texto sin formato.

Respuestas (3)

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.

Gracias. Lamentablemente, PushBullet, Dropbox y las otras aplicaciones que estaba investigando no parecen registrar los datos relevantes. Descargué las bases de datos de sqlite y busqué tokens/cadenas sobre las que quiero información (como los títulos de notificación, archivos, fuentes, etc.) y no apareció nada.

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.