4 votos

Cambiar las preferencias del Centro de Notificaciones programáticamente o desde la línea de comandos

(Hay muchas preguntas sobre cómo alternar el modo No molestar de forma programática, esta es diferente)

¿Hay un archivo plist o una base de datos sqlite que se pueda modificar para cambiar estos ajustes de forma programática? Específicamente, "Mostrar notificaciones en la pantalla bloqueada", "Mostrar en el Centro de Notificaciones", etc.

Me gustaría cambiar esto en lotes y sincronizar esos cambios entre mis máquinas.

Una captura de pantalla de los ajustes del sistema de macOS, con el panel de preferencias de Notificaciones abierto, enfocado en la aplicación de Correo.

(En este momento estoy usando Venura Beta, pero esta pregunta aplica igualmente a Monteray).

Encontré NCUtil, pero las cosas han cambiado desde que fue escrito.

  • Se espera que haya una base de datos SQLite en $(getconf DARWIN_USER_DIR)com.apple.notificationcenter/db/db,
  • pero ahora está en $(getconf DARWIN_USER_DIR)com.apple.notificationcenter/db/db, la cual tiene un esquema diferente (por ejemplo, ya no hay una tabla app_info con una columna flags)

1voto

Swapnil hajare Puntos 31

Sí, el nombre del archivo es /Usuarios//Biblioteca/Preferencias/com.apple.ncprefs.plist puedes modificar el valor de flags para tu aplicación en ese archivo a "Mostrar notificaciones en la pantalla de bloqueo" o "Mostrar en el Centro de Notificaciones".

El archivo está en formato binario plist. Puedes convertirlo a formato xml para observar los valores de las banderas. Utiliza el siguiente comando:

plutil -convert xml1 "/Usuarios//Biblioteca/Preferencias/com.apple.ncprefs.plist"

Cambia la configuración desde las Preferencias del Sistema y observa el valor deseado y luego configúralo programáticamente utilizando PlistBuddy

Te proporciono un código de muestra para activar las notificaciones para tu aplicación de forma forzada

#!/bin/sh
notification_plist="/Usuarios/$usuario/Biblioteca/Preferencias/com.apple.ncprefs.plist"

#Conteo de los paquetes existentes en el plist
count=$(/usr/libexec/PlistBuddy -c "Print :apps" "${notification_plist}" | grep -c "bundle-id")

for ((index=1; index<"${count}"; index++)); do
    bundle_id=$(/usr/libexec/PlistBuddy -c "Print apps:${index}:bundle-id" "${notification_plist}");
            if [[ "${bundle_id}" ==  ]]; then
                    flags_value=$(/usr/libexec/PlistBuddy -c "Print apps:${index}:flags" "${notification_plist}");
                    echo $flags_value $index

                    if [[ $flags_value == 276* ]]; then
                        /usr/libexec/PlistBuddy -c "Set :apps:${index}:flags 41951246" "${notification_plist}"
                    fi
            fi
done

# Reiniciar el centro de notificaciones para que los cambios surtan efecto.
killall sighup usernoted

Nota: Necesitas reiniciar el servicio binario usernoted para que los cambios surtan efecto, simplemente mátalo y macOS lo reiniciará inmediatamente. La solución ha sido probada en macOS Big Sur y Monterey.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X