Gérer les Notifications de Badge sur macOS
Contrôlez et gérez les notifications de badge sur vos appareils MacFleet en utilisant des outils en ligne de commande. Ce tutoriel couvre la suppression des notifications de badge pour des applications spécifiques, la gestion des notifications à l'échelle du dock, et l'implémentation de politiques de notification d'entreprise.
Comprendre les Notifications de Badge
Les notifications de badge sont les icônes circulaires rouges qui apparaissent au-dessus des icônes d'application dans le dock macOS, affichant généralement des numéros pour indiquer des éléments non lus comme des emails, messages ou mises à jour. Bien qu'utiles pour les utilisateurs individuels, les environnements d'entreprise nécessitent souvent une gestion centralisée des notifications.
Fonctionnalités Clés
- Contrôle spécifique aux applications - Supprimer les badges d'applications individuelles
- Gestion à l'échelle du dock - Effacer toutes les notifications de badge en une fois
- Restauration automatique - Les badges réapparaissent lorsque les applications sont ouvertes
- Intégration des préférences système - Fonctionne avec les paramètres de notification macOS
Supprimer les Notifications de Badge pour des Applications Spécifiques
Suppression de Badge Basique
#!/bin/bash
# Supprimer la notification de badge pour une application spécifique
APP_NAME="Mail"
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 && killall "$APP_NAME"
echo "Notification de badge supprimée pour $APP_NAME"
Gestion Avancée des Badges d'Application
#!/bin/bash
# Suppression avancée de notification de badge avec validation
remove_app_badge() {
local app_name="$1"
if [[ -z "$app_name" ]]; then
echo "❌ Erreur : Nom d'application requis"
return 1
fi
# Vérifier si l'application est en cours d'exécution
if pgrep -x "$app_name" > /dev/null; then
echo "📱 Suppression de la notification de badge pour $app_name..."
# Supprimer la notification de badge
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0
# Terminer et redémarrer l'application pour appliquer les changements
if killall "$app_name" 2>/dev/null; then
echo "✅ Notification de badge supprimée pour $app_name"
echo "ℹ️ Note : Le badge réapparaîtra lorsque $app_name sera rouvert"
else
echo "⚠️ Avertissement : Impossible de redémarrer $app_name (peut ne pas être en cours d'exécution)"
fi
else
echo "ℹ️ $app_name n'est pas actuellement en cours d'exécution"
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0
echo "✅ Paramètre de notification de badge mis à jour pour $app_name"
fi
}
# Exemples d'utilisation
remove_app_badge "Mail"
remove_app_badge "Messages"
remove_app_badge "Calendar"
Suppression des Badges d'Applications Communes
#!/bin/bash
# Supprimer les notifications de badge pour les applications d'entreprise communes
COMMON_APPS=("Mail" "Messages" "Calendar" "Reminders" "FaceTime" "App Store" "System Preferences")
echo "🧹 Suppression des notifications de badge pour les applications communes..."
for app in "${COMMON_APPS[@]}"; do
echo "Traitement de $app..."
# Définir la préférence de notification
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0
# Tuer l'application si elle est en cours d'exécution
if pgrep -x "$app" > /dev/null; then
killall "$app" 2>/dev/null
echo " ✅ Badge effacé pour $app"
else
echo " ⏭️ $app n'est pas en cours d'exécution, préférence mise à jour"
fi
done
echo "🎉 Nettoyage des notifications de badge terminé"
Supprimer Toutes les Notifications de Badge (À l'échelle du Dock)
Effacement Basique des Badges du Dock
#!/bin/bash
# Supprimer toutes les notifications de badge du dock
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 && killall Dock
echo "Toutes les notifications de badge effacées du dock"
Gestion Complète du Dock
#!/bin/bash
# Gestion avancée des notifications de badge du dock
clear_all_dock_badges() {
echo "🏗️ Effacement de toutes les notifications de badge du dock..."
# Sauvegarder les préférences actuelles du dock
local backup_file="/tmp/dock_backup_$(date +%s).plist"
defaults export com.apple.dock "$backup_file"
echo "📋 Préférences du dock sauvegardées dans : $backup_file"
# Effacer les notifications de badge
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0
# Obtenir la liste des applications du dock en cours d'exécution
local dock_apps
dock_apps=$(osascript -e 'tell application "System Events" to get name of every application process whose background only is false')
echo "🔄 Redémarrage du dock pour appliquer les changements..."
killall Dock
# Attendre que le dock redémarre
sleep 3
echo "✅ Toutes les notifications de badge effacées du dock"
echo "ℹ️ Les badges réapparaîtront lorsque les applications recevront de nouvelles notifications"
return 0
}
# Exécuter l'effacement des badges du dock
clear_all_dock_badges
Script de Gestion des Badges d'Entreprise
#!/bin/bash
# Outil de Gestion des Notifications de Badge MacFleet
# Contrôle centralisé des notifications de badge sur les appareils d'entreprise
# Configuration
LOG_FILE="/var/log/macfleet_badges.log"
CONFIG_FILE="/etc/macfleet/badge_policy.conf"
BACKUP_DIR="/var/backups/macfleet/badges"
# Fonction de journalisation
log_action() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Créer les répertoires nécessaires
setup_directories() {
sudo mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null
sudo mkdir -p "$BACKUP_DIR" 2>/dev/null
sudo mkdir -p "$(dirname "$CONFIG_FILE")" 2>/dev/null
}
# Charger la configuration
load_config() {
if [[ -f "$CONFIG_FILE" ]]; then
source "$CONFIG_FILE"
log_action "Configuration chargée depuis $CONFIG_FILE"
else
# Configuration par défaut
BADGE_POLICY="disabled" # Options : enabled, disabled, selective
ALLOWED_BADGE_APPS=("Calendar" "Reminders")
BLOCKED_BADGE_APPS=("App Store" "System Preferences")
AUTO_CLEAR_INTERVAL=3600 # 1 heure
log_action "Utilisation de la configuration par défaut"
fi
}
# Sauvegarder les paramètres de badge actuels
backup_badge_settings() {
local backup_file="$BACKUP_DIR/badge_settings_$(date +%Y%m%d_%H%M%S).plist"
defaults export com.apple.systempreferences "$backup_file" 2>/dev/null
if [[ -f "$backup_file" ]]; then
log_action "Paramètres de badge sauvegardés dans : $backup_file"
echo "$backup_file"
else
log_action "Avertissement : Impossible de sauvegarder les paramètres de badge"
return 1
fi
}
# Obtenir le statut actuel des badges
get_badge_status() {
echo "📊 Statut Actuel des Notifications de Badge :"
echo "============================================="
# Vérifier le paramètre des préférences système
local attention_pref
attention_pref=$(defaults read com.apple.systempreferences AttentionPrefBundleIDs 2>/dev/null || echo "non défini")
echo "AttentionPrefBundleIDs du système : $attention_pref"
# Lister les applications avec des badges potentiels
echo -e "\n📱 Applications pouvant afficher des badges :"
local badge_apps=("Mail" "Messages" "Calendar" "Reminders" "FaceTime" "App Store" "System Preferences" "Contacts")
for app in "${badge_apps[@]}"; do
if pgrep -x "$app" > /dev/null; then
echo " 🟢 $app (en cours d'exécution)"
else
echo " ⚪ $app (non en cours d'exécution)"
fi
done
# Vérifier les processus du dock
echo -e "\n🏗️ Statut du dock :"
if pgrep -x "Dock" > /dev/null; then
echo " 🟢 Le dock est en cours d'exécution"
else
echo " 🔴 Le dock n'est pas en cours d'exécution"
fi
}
# Appliquer la politique de badge
apply_badge_policy() {
log_action "Application de la politique de badge : $BADGE_POLICY"
case "$BADGE_POLICY" in
"disabled")
disable_all_badges
;;
"enabled")
enable_all_badges
;;
"selective")
apply_selective_policy
;;
*)
log_action "Erreur : Politique de badge inconnue : $BADGE_POLICY"
return 1
;;
esac
}
# Désactiver toutes les notifications de badge
disable_all_badges() {
echo "🚫 Désactivation de toutes les notifications de badge..."
backup_badge_settings
# Définir la préférence système pour désactiver les badges
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0
# Redémarrer le dock pour appliquer les changements
killall Dock 2>/dev/null
log_action "Toutes les notifications de badge désactivées"
echo "✅ Toutes les notifications de badge ont été désactivées"
}
# Activer toutes les notifications de badge
enable_all_badges() {
echo "✅ Activation de toutes les notifications de badge..."
backup_badge_settings
# Supprimer la restriction (supprimer la clé)
defaults delete com.apple.systempreferences AttentionPrefBundleIDs 2>/dev/null
# Redémarrer le dock pour appliquer les changements
killall Dock 2>/dev/null
log_action "Toutes les notifications de badge activées"
echo "✅ Toutes les notifications de badge ont été activées"
}
# Appliquer une politique de badge sélective
apply_selective_policy() {
echo "🎯 Application de la politique de badge sélective..."
# Pour la politique sélective, nous devons gérer les notifications d'applications individuelles
# Cela nécessite une gestion plus complexe des notifications
for app in "${BLOCKED_BADGE_APPS[@]}"; do
echo " 🚫 Blocage des badges pour $app"
# Tuer l'application pour effacer le badge actuel
killall "$app" 2>/dev/null
done
# Définir la préférence système
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0
log_action "Politique de badge sélective appliquée"
echo "✅ La politique de badge sélective a été appliquée"
}
# Surveiller et effacer automatiquement les badges
monitor_badges() {
echo "👁️ Démarrage de la surveillance des badges (intervalle : ${AUTO_CLEAR_INTERVAL}s)..."
while true; do
if [[ "$BADGE_POLICY" == "disabled" ]]; then
# Effacer les badges qui peuvent être apparus
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0
log_action "Badges effacés automatiquement pendant la surveillance"
fi
sleep "$AUTO_CLEAR_INTERVAL"
done
}
# Générer un rapport de gestion des badges
generate_report() {
local report_file="/tmp/macfleet_badge_report_$(date +%Y%m%d_%H%M%S).txt"
{
echo "Rapport de Notification de Badge MacFleet"
echo "========================================"
echo "Généré : $(date)"
echo "Nom d'hôte : $(hostname)"
echo "Politique : $BADGE_POLICY"
echo ""
echo "Configuration Système :"
echo " AttentionPrefBundleIDs : $(defaults read com.apple.systempreferences AttentionPrefBundleIDs 2>/dev/null || echo 'non défini')"
echo ""
echo "Statut des Applications :"
local apps=("Mail" "Messages" "Calendar" "Reminders" "App Store")
for app in "${apps[@]}"; do
if pgrep -x "$app" > /dev/null; then
echo " $app : En cours d'exécution"
else
echo " $app : Non en cours d'exécution"
fi
done
echo ""
echo "Actions Récentes :"
tail -10 "$LOG_FILE" 2>/dev/null || echo "Aucune entrée de journal récente"
} > "$report_file"
echo "📄 Rapport de gestion des badges généré : $report_file"
log_action "Rapport généré : $report_file"
}
# Fonction principale
main() {
case "${1:-status}" in
"disable")
setup_directories
load_config
log_action "=== Gestion des Badges : Désactiver Tout ==="
disable_all_badges
;;
"enable")
setup_directories
load_config
log_action "=== Gestion des Badges : Activer Tout ==="
enable_all_badges
;;
"policy")
setup_directories
load_config
log_action "=== Gestion des Badges : Appliquer la Politique ==="
apply_badge_policy
;;
"monitor")
setup_directories
load_config
log_action "=== Gestion des Badges : Démarrer la Surveillance ==="
monitor_badges
;;
"report")
setup_directories
load_config
generate_report
;;
"status"|*)
setup_directories
load_config
get_badge_status
;;
esac
}
# Exécuter la fonction principale avec les paramètres
main "$@"
Commandes de Gestion des Notifications de Badge
Référence Rapide
Tâche | Commande |
---|---|
Supprimer badge d'app spécifique | defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 && killall NomApp |
Effacer tous les badges du dock | defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 && killall Dock |
Vérifier paramètre actuel | defaults read com.apple.systempreferences AttentionPrefBundleIDs |
Réinitialiser par défaut | defaults delete com.apple.systempreferences AttentionPrefBundleIDs |
Exemples Spécifiques aux Applications
# Applications communes
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 && killall Mail
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 && killall Messages
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 && killall "App Store"
defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 && killall Calendar
Dépannage
Problèmes Courants
-
Les badges réapparaissent après effacement
- C'est un comportement normal ; les badges reviennent lorsque les applications reçoivent de nouvelles notifications
- Utilisez des scripts de surveillance pour un effacement persistant
-
L'application ne redémarre pas
- Certaines applications peuvent nécessiter un redémarrage manuel
- Vérifiez si l'application est configurée pour se lancer au démarrage
-
Le dock ne se met pas à jour
- Essayez de forcer le redémarrage du dock :
killall Dock && sleep 2 && open /System/Library/CoreServices/Dock.app
- Essayez de forcer le redémarrage du dock :
Commandes de Vérification
# Vérifier si le paramètre a été appliqué
defaults read com.apple.systempreferences AttentionPrefBundleIDs
# Lister les applications en cours d'exécution
ps aux | grep -E "(Mail|Messages|Calendar)" | grep -v grep
# Surveiller le processus du dock
ps aux | grep Dock | grep -v grep
Notes Importantes
- Effet temporaire : Les notifications de badge réapparaîtront lorsque les applications recevront de nouvelles notifications
- Redémarrage système : Les paramètres persistent après les redémarrages système
- Expérience utilisateur : Considérez les besoins de notification des utilisateurs avant le déploiement à l'échelle de l'entreprise
- Comportement des applications : Certaines applications peuvent nécessiter un redémarrage manuel pour appliquer les changements
- Tests recommandés : Testez sur des appareils individuels avant le déploiement à l'échelle de la flotte
Déploiement d'Entreprise
Pour le déploiement d'entreprise, considérez :
- Configuration de politique - Définir quelles applications doivent afficher des badges
- Communication utilisateur - Informer les utilisateurs des changements de notification
- Configuration de surveillance - Implémenter un effacement automatique des badges si requis
- Procédures de sauvegarde - Sauvegarder les paramètres originaux avant d'apporter des modifications
- Plan de retour en arrière - Capacité à restaurer le comportement de notification original