Gestion Entreprise du Sommeil et de l'Alimentation pour macOS
Implémentez une gestion de sommeil et d'alimentation de niveau entreprise sur votre déploiement MacFleet avec des politiques d'alimentation automatisées, l'optimisation énergétique, la surveillance de conformité et une gestion complète de la flotte. Ce tutoriel fournit des solutions pour maintenir une efficacité énergétique optimale tout en respectant les exigences de sécurité et opérationnelles.
Comprendre la Gestion de l'Alimentation macOS
macOS fournit plusieurs outils et mécanismes de gestion de l'alimentation :
pmset
- Outil principal de paramètres de gestion d'alimentationcaffeinate
- Empêcher le sommeil du système pour des opérations spécifiquessystemsetup
- Configuration d'alimentation à l'échelle du système- Économiseur d'énergie - Interface de gestion d'alimentation via GUI
- Assertions d'alimentation - Prévention du sommeil au niveau application
Opérations de Gestion d'Alimentation de Base
Configurer le Minuteur de Sommeil Système
#!/bin/bash
# Définir le minuteur de sommeil système à 15 minutes
sudo pmset sleep 15
Configurer le Minuteur de Sommeil d'Écran
#!/bin/bash
# Définir le minuteur de sommeil d'écran à 15 minutes
sudo pmset displaysleep 15
Programmer les Événements de Réveil
#!/bin/bash
# Programmer le réveil tous les jours à 9h00
sudo pmset repeat wakeorpoweron MTWRFSU 9:00:00
Empêcher le Sommeil pour une Période Spécifique
#!/bin/bash
# Empêcher le sommeil du système pendant 300 secondes
caffeinate -u -t 300
Vérifier les Paramètres de Sommeil Système
#!/bin/bash
# Vérifier le temps d'inactivité de sommeil actuel
sudo systemsetup -getcomputersleep
Désactiver le Sommeil Système
#!/bin/bash
# Désactiver le sommeil système
sudo systemsetup -setcomputersleep Never
Activer le Redémarrage en Cas de Blocage
#!/bin/bash
# Redémarrer automatiquement en cas de blocage système
systemsetup -setrestartfreeze on
Système de Gestion d'Alimentation Entreprise
Outil de Gestion d'Alimentation Complet
#!/bin/bash
# Outil de Gestion du Sommeil et de l'Alimentation Entreprise MacFleet
# Politiques d'alimentation avancées et optimisation énergétique
# Configuration
CONFIG_FILE="/etc/macfleet/power_policy.conf"
LOG_FILE="/var/log/macfleet_power.log"
POLICIES_DIR="/Library/MacFleet/PowerPolicies"
AUDIT_LOG="/var/log/macfleet_power_audit.log"
# Créer les répertoires
mkdir -p "$(dirname "$CONFIG_FILE")" "$(dirname "$LOG_FILE")" "$POLICIES_DIR" "$(dirname "$AUDIT_LOG")"
# Politique de gestion d'alimentation par défaut
cat > "$CONFIG_FILE" 2>/dev/null << 'EOF' || true
# Politique de Gestion d'Alimentation Entreprise MacFleet
# Version : 2.0
# Application des Politiques d'Alimentation
ENFORCE_POWER_POLICIES=true
AUTO_APPLY_POLICIES=true
POWER_PROFILE="corporate_standard"
ENERGY_OPTIMIZATION=true
COMPLIANCE_MONITORING=true
# Paramètres de Sommeil (minutes)
SYSTEM_SLEEP_AC=30
SYSTEM_SLEEP_BATTERY=15
DISPLAY_SLEEP_AC=15
DISPLAY_SLEEP_BATTERY=5
DISK_SLEEP_AC=10
DISK_SLEEP_BATTERY=5
# Événements de Réveil et d'Alimentation
WAKE_ON_LAN=true
WAKE_ON_ADMINISTRATIVE_ACCESS=true
AUTOMATIC_RESTART_ON_POWER_LOSS=true
AUTOMATIC_RESTART_ON_FREEZE=true
SCHEDULED_WAKE_ENABLED=true
SCHEDULED_SLEEP_ENABLED=true
# Configuration des Heures de Bureau
BUSINESS_HOURS_START="09:00"
BUSINESS_HOURS_END="18:00"
BUSINESS_DAYS="MTWRF"
WEEKEND_POWER_PROFILE="energy_saver"
AFTER_HOURS_POWER_PROFILE="security_focused"
EOF
# Charger la configuration
source "$CONFIG_FILE" 2>/dev/null || true
# Fonction de journalisation
log_action() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Fonction de journalisation d'audit
audit_log() {
local action="$1"
local result="$2"
local details="$3"
echo "$(date '+%Y-%m-%d %H:%M:%S') - ACTION:$action RESULT:$result DETAILS:$details USER:$(whoami)" >> "$AUDIT_LOG"
}
# Obtenir l'état actuel de l'alimentation
get_power_status() {
echo "=== État Actuel de la Gestion d'Alimentation ==="
# Paramètres d'alimentation à l'échelle du système
echo "Paramètres d'Alimentation Système :"
pmset -g 2>/dev/null || echo " Paramètres d'alimentation indisponibles"
echo -e "\nSource d'Alimentation Actuelle :"
pmset -g ps 2>/dev/null | head -1
echo -e "\nMinuteurs de Sommeil :"
echo " Sommeil Système (AC) : $(pmset -g | grep -E '^\s*sleep\s' | awk '{print $2}') minutes"
echo " Sommeil Écran (AC) : $(pmset -g | grep -E '^\s*displaysleep\s' | awk '{print $2}') minutes"
echo " Sommeil Disque (AC) : $(pmset -g | grep -E '^\s*disksleep\s' | awk '{print $2}') minutes"
echo -e "\nAssertions d'Alimentation :"
pmset -g assertions 2>/dev/null | grep -E "(PreventUserIdleSystemSleep|PreventUserIdleDisplaySleep)" | head -5
echo -e "\nÉtat Thermique :"
pmset -g thermstate 2>/dev/null | head -3
return 0
}
# Appliquer un profil d'alimentation entreprise
apply_power_profile() {
local profile="${1:-$POWER_PROFILE}"
echo "=== Application du Profil d'Alimentation Entreprise : $profile ==="
case "$profile" in
"corporate_standard")
apply_corporate_standard_profile
;;
"energy_saver")
apply_energy_saver_profile
;;
"high_performance")
apply_high_performance_profile
;;
"security_focused")
apply_security_focused_profile
;;
"presentation_mode")
apply_presentation_mode_profile
;;
"kiosk_mode")
apply_kiosk_mode_profile
;;
*)
echo "Profil d'alimentation inconnu : $profile"
echo "Utilisation du profil corporate_standard par défaut"
apply_corporate_standard_profile
;;
esac
# Appliquer les paramètres de sécurité communs
apply_security_settings
# Configurer les événements programmés
configure_scheduled_events
echo "✅ Profil d'alimentation '$profile' appliqué avec succès"
log_action "Profil d'alimentation appliqué : $profile"
audit_log "POWER_PROFILE" "APPLIED" "Profil : $profile"
return 0
}
# Profil d'alimentation standard entreprise
apply_corporate_standard_profile() {
echo "=== Configuration du Profil Standard Entreprise ==="
# Paramètres alimentation secteur
sudo pmset -c sleep "$SYSTEM_SLEEP_AC" 2>/dev/null
sudo pmset -c displaysleep "$DISPLAY_SLEEP_AC" 2>/dev/null
sudo pmset -c disksleep "$DISK_SLEEP_AC" 2>/dev/null
# Paramètres batterie (si applicable)
sudo pmset -b sleep "$SYSTEM_SLEEP_BATTERY" 2>/dev/null
sudo pmset -b displaysleep "$DISPLAY_SLEEP_BATTERY" 2>/dev/null
sudo pmset -b disksleep "$DISK_SLEEP_BATTERY" 2>/dev/null
# Paramètres de réveil
if [[ "$WAKE_ON_LAN" == "true" ]]; then
sudo pmset -a womp 1 2>/dev/null
fi
if [[ "$WAKE_ON_ADMINISTRATIVE_ACCESS" == "true" ]]; then
sudo pmset -a acwake 1 2>/dev/null
fi
echo "Profil standard entreprise configuré"
log_action "Profil d'alimentation standard entreprise appliqué"
}
# Profil économiseur d'énergie
apply_energy_saver_profile() {
echo "=== Configuration du Profil Économiseur d'Énergie ==="
# Économie d'énergie agressive
sudo pmset -c sleep 10 2>/dev/null
sudo pmset -c displaysleep 5 2>/dev/null
sudo pmset -c disksleep 5 2>/dev/null
sudo pmset -b sleep 5 2>/dev/null
sudo pmset -b displaysleep 2 2>/dev/null
sudo pmset -b disksleep 3 2>/dev/null
# Activer les fonctionnalités d'économie d'énergie
sudo pmset -a reducebright 1 2>/dev/null
sudo pmset -a lessbright 1 2>/dev/null
echo "Profil économiseur d'énergie configuré"
log_action "Profil d'alimentation économiseur d'énergie appliqué"
}
# Profil haute performance
apply_high_performance_profile() {
echo "=== Configuration du Profil Haute Performance ==="
# Paramètres de sommeil minimaux
sudo pmset -c sleep 60 2>/dev/null
sudo pmset -c displaysleep 30 2>/dev/null
sudo pmset -c disksleep 30 2>/dev/null
sudo pmset -b sleep 30 2>/dev/null
sudo pmset -b displaysleep 15 2>/dev/null
sudo pmset -b disksleep 15 2>/dev/null
# Désactiver les fonctionnalités d'économie d'énergie
sudo pmset -a reducebright 0 2>/dev/null
sudo pmset -a lessbright 0 2>/dev/null
echo "Profil haute performance configuré"
log_action "Profil d'alimentation haute performance appliqué"
}
# Profil axé sécurité
apply_security_focused_profile() {
echo "=== Configuration du Profil Axé Sécurité ==="
# Minuteurs de sommeil courts pour la sécurité
sudo pmset -c sleep 5 2>/dev/null
sudo pmset -c displaysleep 3 2>/dev/null
sudo pmset -c disksleep 5 2>/dev/null
sudo pmset -b sleep 3 2>/dev/null
sudo pmset -b displaysleep 1 2>/dev/null
sudo pmset -b disksleep 3 2>/dev/null
echo "Profil axé sécurité configuré"
log_action "Profil d'alimentation axé sécurité appliqué"
}
# Profil mode présentation
apply_presentation_mode_profile() {
echo "=== Configuration du Profil Mode Présentation ==="
# Empêcher le sommeil pendant les présentations
sudo pmset -c sleep 0 2>/dev/null
sudo pmset -c displaysleep 0 2>/dev/null
# Maintenir le système actif
sudo pmset -a lidwake 1 2>/dev/null
sudo pmset -a acwake 1 2>/dev/null
echo "Profil mode présentation configuré"
log_action "Profil d'alimentation mode présentation appliqué"
}
# Profil mode kiosque
apply_kiosk_mode_profile() {
echo "=== Configuration du Profil Mode Kiosque ==="
# Paramètres jamais en sommeil pour les appareils kiosque
sudo pmset -c sleep 0 2>/dev/null
sudo pmset -c displaysleep 0 2>/dev/null
sudo pmset -c disksleep 0 2>/dev/null
# Assurer que le système reste actif
sudo pmset -a womp 1 2>/dev/null
sudo pmset -a autorestart 1 2>/dev/null
echo "Profil mode kiosque configuré"
log_action "Profil d'alimentation mode kiosque appliqué"
}
# Appliquer les paramètres de sécurité
apply_security_settings() {
echo "=== Application des Paramètres de Sécurité d'Alimentation ==="
# Mode d'hibernation sécurisé
sudo pmset -a hibernatemode 3 2>/dev/null
echo "✅ Mode d'hibernation défini à 3"
# Redémarrage automatique
if [[ "$AUTOMATIC_RESTART_ON_POWER_LOSS" == "true" ]]; then
sudo pmset -a autorestart 1 2>/dev/null
echo "✅ Redémarrage automatique en cas de perte d'alimentation activé"
fi
if [[ "$AUTOMATIC_RESTART_ON_FREEZE" == "true" ]]; then
sudo systemsetup -setrestartfreeze on 2>/dev/null
echo "✅ Redémarrage automatique en cas de blocage activé"
fi
log_action "Paramètres de sécurité d'alimentation appliqués"
}
# Configurer les événements programmés
configure_scheduled_events() {
echo "=== Configuration des Événements d'Alimentation Programmés ==="
# Effacer les événements programmés existants
sudo pmset repeat cancel 2>/dev/null
if [[ "$SCHEDULED_WAKE_ENABLED" == "true" ]]; then
# Programmer le réveil pour les heures de bureau
sudo pmset repeat wakeorpoweron "$BUSINESS_DAYS" "$BUSINESS_HOURS_START:00" 2>/dev/null
echo "✅ Réveil programmé configuré pour les heures de bureau"
log_action "Réveil programmé configuré : $BUSINESS_DAYS à $BUSINESS_HOURS_START"
fi
if [[ "$SCHEDULED_SLEEP_ENABLED" == "true" ]]; then
# Programmer le sommeil après les heures de bureau
local sleep_time="${BUSINESS_HOURS_END}:30:00"
sudo pmset repeat sleep "$BUSINESS_DAYS" "$sleep_time" 2>/dev/null
echo "✅ Sommeil programmé configuré pour après les heures"
log_action "Sommeil programmé configuré : $BUSINESS_DAYS à $sleep_time"
fi
}
# Vérifier la conformité de la gestion d'alimentation
check_power_compliance() {
echo "=== Vérification de Conformité de la Gestion d'Alimentation ==="
local compliance_issues=()
local compliance_score=100
# Vérifier si la gestion d'alimentation est correctement configurée
local current_settings
current_settings=$(pmset -g 2>/dev/null)
if [[ -z "$current_settings" ]]; then
compliance_issues+=("Impossible de lire les paramètres de gestion d'alimentation")
compliance_score=$((compliance_score - 50))
fi
# Vérifier les minuteurs de sommeil
local system_sleep
system_sleep=$(echo "$current_settings" | grep -E '^\s*sleep\s' | awk '{print $2}')
if [[ "$system_sleep" == "0" ]] && [[ "$POWER_PROFILE" != "kiosk_mode" ]] && [[ "$POWER_PROFILE" != "presentation_mode" ]]; then
compliance_issues+=("Sommeil système désactivé (risque de sécurité)")
compliance_score=$((compliance_score - 20))
fi
# Vérifier le sommeil d'écran
local display_sleep
display_sleep=$(echo "$current_settings" | grep -E '^\s*displaysleep\s' | awk '{print $2}')
if [[ "$display_sleep" == "0" ]] && [[ "$POWER_PROFILE" != "kiosk_mode" ]] && [[ "$POWER_PROFILE" != "presentation_mode" ]]; then
compliance_issues+=("Sommeil d'écran désactivé (gaspillage d'énergie)")
compliance_score=$((compliance_score - 15))
fi
# Rapporter l'état de conformité
echo "Score de Conformité : $compliance_score/100"
if [[ ${#compliance_issues[@]} -eq 0 ]]; then
echo "✅ La configuration de gestion d'alimentation est conforme"
audit_log "COMPLIANCE_CHECK" "PASSED" "Score : $compliance_score/100"
return 0
else
echo "❌ Problèmes de conformité trouvés :"
printf ' - %s\n' "${compliance_issues[@]}"
audit_log "COMPLIANCE_CHECK" "FAILED" "Problèmes : ${#compliance_issues[@]} Score : $compliance_score/100"
# Auto-remédiation si activée
if [[ "$AUTO_APPLY_POLICIES" == "true" ]]; then
echo "🔧 Auto-remédiation activée, application du profil d'alimentation correct..."
apply_power_profile "$POWER_PROFILE"
fi
return 1
fi
}
# Empêcher le sommeil système pour des opérations critiques
prevent_sleep_for_operation() {
local operation_name="$1"
local duration_seconds="$2"
local prevent_display="${3:-false}"
echo "=== Empêcher le Sommeil pour l'Opération : $operation_name ==="
local caffeinate_options="-i"
if [[ "$prevent_display" == "true" ]]; then
caffeinate_options="$caffeinate_options -d"
fi
if [[ -n "$duration_seconds" ]]; then
caffeinate_options="$caffeinate_options -t $duration_seconds"
fi
echo "Empêchement du sommeil système pour $operation_name..."
log_action "Prévention de sommeil démarrée pour l'opération : $operation_name (durée : ${duration_seconds:-indéfinie}s)"
# Exécuter caffeinate en arrière-plan et retourner le PID
caffeinate $caffeinate_options &
local caffeinate_pid=$!
echo "Prévention de sommeil active (PID : $caffeinate_pid)"
echo "$caffeinate_pid" > "/tmp/macfleet_caffeinate_$operation_name.pid"
audit_log "SLEEP_PREVENTION" "STARTED" "Opération : $operation_name PID : $caffeinate_pid"
return 0
}
# Arrêter la prévention de sommeil pour une opération
stop_sleep_prevention() {
local operation_name="$1"
local pid_file="/tmp/macfleet_caffeinate_$operation_name.pid"
if [[ -f "$pid_file" ]]; then
local caffeinate_pid
caffeinate_pid=$(cat "$pid_file")
if kill -0 "$caffeinate_pid" 2>/dev/null; then
kill "$caffeinate_pid"
echo "Prévention de sommeil arrêtée pour $operation_name (PID : $caffeinate_pid)"
log_action "Prévention de sommeil arrêtée pour l'opération : $operation_name"
audit_log "SLEEP_PREVENTION" "STOPPED" "Opération : $operation_name PID : $caffeinate_pid"
else
echo "Processus de prévention de sommeil non trouvé pour $operation_name"
fi
rm -f "$pid_file"
else
echo "Aucune prévention de sommeil active trouvée pour $operation_name"
fi
}
# Fonction principale avec gestion d'arguments
main() {
log_action "=== Outil de Gestion d'Alimentation MacFleet Démarré ==="
case "${1:-status}" in
"status")
get_power_status
;;
"profile")
apply_power_profile "$2"
;;
"compliance")
check_power_compliance
;;
"prevent-sleep")
prevent_sleep_for_operation "$2" "$3" "$4"
;;
"allow-sleep")
stop_sleep_prevention "$2"
;;
"schedule")
configure_scheduled_events
;;
*)
echo "Outil de Gestion d'Alimentation Entreprise MacFleet"
echo "Usage : $0 [commande] [options]"
echo ""
echo "Commandes :"
echo " status - Afficher l'état actuel de la gestion d'alimentation"
echo " profile [nom] - Appliquer un profil d'alimentation spécifique"
echo " compliance - Vérifier la conformité de la gestion d'alimentation"
echo " prevent-sleep [nom] [durée] [écran] - Empêcher le sommeil pour une opération"
echo " allow-sleep [nom] - Arrêter la prévention de sommeil pour une opération"
echo " schedule - Configurer les événements d'alimentation programmés"
echo ""
echo "Profils d'Alimentation :"
echo " corporate_standard - Gestion d'alimentation d'entreprise standard (défaut)"
echo " energy_saver - Efficacité énergétique maximale"
echo " high_performance - Paramètres axés performance"
echo " security_focused - Gestion d'alimentation optimisée sécurité"
echo " presentation_mode - Empêcher le sommeil pendant les présentations"
echo " kiosk_mode - Toujours actif pour les appareils kiosque"
;;
esac
log_action "=== Opération de gestion d'alimentation terminée ==="
}
# Exécuter la fonction principale
main "$@"
Notes de Configuration Importantes
Architecture de Gestion d'Alimentation macOS
- Unité de Gestion d'Alimentation (PMU) - Contrôle d'alimentation au niveau matériel
- IOPMrootDomain - Gestion d'alimentation du noyau
- PowerManagement.framework - APIs d'alimentation espace utilisateur
- pmset - Outil de gestion d'alimentation en ligne de commande
- Économiseur d'Énergie - Interface d'alimentation Préférences Système
Points d'Intégration Entreprise
- Profils de Configuration MDM - Déployer les politiques d'alimentation de manière centralisée
- Systèmes de Surveillance Énergétique - Intégration avec la gestion des installations
- Suivi d'Empreinte Carbone - Rapports de conformité environnementale
- Intelligence d'Affaires - Analytiques et optimisation de l'utilisation d'énergie
Bonnes Pratiques pour la Gestion d'Alimentation Entreprise
-
Stratégie d'Efficacité Énergétique
- Implémenter des profils d'alimentation échelonnés basés sur les modèles d'utilisation
- Surveiller et optimiser la consommation d'énergie à travers la flotte
- S'aligner avec les initiatives de développement durable d'entreprise
- Suivre les économies de coûts des politiques de gestion d'alimentation
-
Considérations de Sécurité
- Activer la destruction des clés FileVault en veille pour les données sensibles
- Configurer des modes d'hibernation appropriés pour la sécurité
- Implémenter des modes de sommeil sécurisés pour les appareils non surveillés
- Équilibrer les exigences de sécurité avec les besoins opérationnels
-
Optimisation des Performances
- Utiliser des profils haute performance pour les tâches intensives en ressources
- Implémenter des modes présentation pour les scénarios de réunion
- Configurer la gestion thermique pour les charges de travail soutenues
- Surveiller la santé de la batterie et optimiser les modèles de charge
-
Conformité et Rapports
- Générer des rapports d'utilisation d'énergie pour la conformité réglementaire
- Suivre l'adhérence aux politiques de gestion d'alimentation
- Documenter les initiatives d'optimisation d'alimentation
- Surveiller les métriques d'impact environnemental
N'oubliez pas de tester minutieusement les configurations de gestion d'alimentation dans votre environnement avant le déploiement à l'échelle de la flotte pour vous assurer qu'elles répondent aux exigences opérationnelles, de sécurité et d'efficacité énergétique de votre organisation.