Guide

Nouvelles mises à jour et améliorations de Roundfleet.

Avis important

Les exemples de code et scripts fournis dans ces tutoriels sont uniquement à des fins éducatives. Roundfleet n'est pas responsable des problèmes, dommages ou vulnérabilités de sécurité qui pourraient survenir lors de l'utilisation, modification ou implémentation de ces exemples. Toujours vérifier et tester le code dans un environnement sécurisé avant de l'utiliser dans des systèmes de production.

Gestion d'Entreprise du Bluetooth sur macOS

Contrôlez et gérez les paramètres Bluetooth sur vos appareils Roundfleet en utilisant des outils en ligne de commande avancés. Ce tutoriel couvre la surveillance du statut Bluetooth, la gestion des états d'alimentation, et le contrôle de flotte de niveau entreprise avec journalisation complète et fonctionnalités de sécurité.

Comprendre la Gestion Bluetooth de macOS

macOS fournit un contrôle Bluetooth complet via plusieurs mécanismes :

  • defaults - Manipulation directe des préférences Bluetooth via les fichiers plist
  • bluetoothd - Le daemon Bluetooth central qui gère toutes les opérations Bluetooth
  • launchctl - Gestion des services pour démarrer/arrêter les services Bluetooth
  • blued - Nom du daemon Bluetooth hérité utilisé dans les anciennes versions de macOS

Le fichier de configuration principal est situé à /Library/Preferences/com.apple.Bluetooth avec la clé ControllerPowerState contrôlant l'état d'alimentation.

Gestion de Base du Statut Bluetooth

Vérifier le Statut Bluetooth

#!/bin/bash

# Vérifier l'état d'alimentation Bluetooth actuel
check_bluetooth_status() {
    local status
    status=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
    
    if [[ "$status" == "1" ]]; then
        echo "Bluetooth est ACTIVÉ"
        return 0
    elif [[ "$status" == "0" ]]; then
        echo "Bluetooth est DÉSACTIVÉ"
        return 1
    else
        echo "Statut Bluetooth inconnu ou non configuré"
        return 2
    fi
}

# Exécuter la vérification du statut
check_bluetooth_status

Activer le Bluetooth

#!/bin/bash

# Activer le Bluetooth en utilisant defaults et redémarrage du daemon
turn_bluetooth_on() {
    echo "Activation du Bluetooth..."
    
    # Définir l'état d'alimentation Bluetooth sur ACTIVÉ
    sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 1
    
    # Redémarrer le daemon Bluetooth (essayer les noms de daemon moderne et hérité)
    if pgrep bluetoothd >/dev/null 2>&1; then
        sudo killall -HUP bluetoothd
        echo "Daemon Bluetooth (bluetoothd) redémarré"
    elif pgrep blued >/dev/null 2>&1; then
        sudo killall -HUP blued
        echo "Daemon Bluetooth (blued) redémarré"
    else
        echo "Attention : Daemon Bluetooth non trouvé"
    fi
    
    # Attendre que les changements prennent effet
    sleep 3
    
    # Vérifier le changement
    if check_bluetooth_status >/dev/null; then
        echo "✅ Bluetooth activé avec succès"
        return 0
    else
        echo "❌ Échec de l'activation du Bluetooth"
        return 1
    fi
}

# Fonction d'aide pour la vérification du statut
check_bluetooth_status() {
    local status
    status=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
    [[ "$status" == "1" ]]
}

# Exécuter
turn_bluetooth_on

Désactiver le Bluetooth

#!/bin/bash

# Désactiver le Bluetooth en utilisant defaults et redémarrage du daemon
turn_bluetooth_off() {
    echo "Désactivation du Bluetooth..."
    
    # Définir l'état d'alimentation Bluetooth sur DÉSACTIVÉ
    sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 0
    
    # Redémarrer le daemon Bluetooth
    if pgrep bluetoothd >/dev/null 2>&1; then
        sudo killall -HUP bluetoothd
        echo "Daemon Bluetooth (bluetoothd) redémarré"
    elif pgrep blued >/dev/null 2>&1; then
        sudo killall -HUP blued
        echo "Daemon Bluetooth (blued) redémarré"
    else
        echo "Attention : Daemon Bluetooth non trouvé"
    fi
    
    # Attendre que les changements prennent effet
    sleep 3
    
    # Vérifier le changement
    if ! check_bluetooth_status >/dev/null; then
        echo "✅ Bluetooth désactivé avec succès"
        return 0
    else
        echo "❌ Échec de la désactivation du Bluetooth"
        return 1
    fi
}

# Fonction d'aide pour la vérification du statut
check_bluetooth_status() {
    local status
    status=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
    [[ "$status" == "1" ]]
}

# Exécuter
turn_bluetooth_off

Gestion Avancée du Bluetooth avec launchctl

Utilisation de launchctl pour la Gestion des Services

#!/bin/bash

# Contrôle Bluetooth avancé utilisant la gestion des services launchctl
bluetooth_service_control() {
    local action="$1"  # on, off, restart, status
    local daemon_name
    
    # Déterminer le nom du daemon correct basé sur la version macOS
    if launchctl list | grep -q "com.apple.bluetoothd"; then
        daemon_name="com.apple.bluetoothd"
    elif launchctl list | grep -q "com.apple.blued"; then
        daemon_name="com.apple.blued"
    else
        echo "❌ Daemon Bluetooth non trouvé dans launchctl"
        return 1
    fi
    
    case "$action" in
        "on")
            echo "Activation du Bluetooth..."
            sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 1
            sudo launchctl stop "$daemon_name"
            sleep 2
            sudo launchctl start "$daemon_name"
            sleep 3
            echo "✅ Bluetooth activé avec launchctl"
            ;;
        "off")
            echo "Désactivation du Bluetooth..."
            sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 0
            sudo launchctl stop "$daemon_name"
            sleep 2
            sudo launchctl start "$daemon_name"
            sleep 3
            echo "✅ Bluetooth désactivé avec launchctl"
            ;;
        "restart")
            echo "Redémarrage du service Bluetooth..."
            sudo launchctl stop "$daemon_name"
            sleep 2
            sudo launchctl start "$daemon_name"
            sleep 3
            echo "✅ Service Bluetooth redémarré"
            ;;
        "status")
            echo "Statut du daemon Bluetooth : $daemon_name"
            if launchctl list | grep -q "$daemon_name"; then
                echo "✅ Service Bluetooth en cours d'exécution"
                
                # Vérifier l'état d'alimentation
                local power_state
                power_state=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
                echo "État d'alimentation : $([[ "$power_state" == "1" ]] && echo "ACTIVÉ" || echo "DÉSACTIVÉ")"
            else
                echo "❌ Service Bluetooth non en cours d'exécution"
            fi
            ;;
        *)
            echo "Usage : bluetooth_service_control {on|off|restart|status}"
            return 1
            ;;
    esac
}

# Exemples
bluetooth_service_control "status"
# bluetooth_service_control "on"
# bluetooth_service_control "off"
# bluetooth_service_control "restart"

Système de Gestion Bluetooth d'Entreprise

#!/bin/bash

# Système de Gestion Bluetooth d'Entreprise Roundfleet
# Contrôle Bluetooth complet avec journalisation, surveillance, et gestion de flotte

# Configuration
LOG_FILE="/var/log/roundfleet_bluetooth.log"
CONFIG_FILE="/etc/roundfleet/bluetooth_config.conf"
BACKUP_DIR="/var/backups/roundfleet/bluetooth"
API_ENDPOINT="https://api.roundfleet.com/v1/bluetooth"

# Créer la structure des répertoires
setup_directories() {
    mkdir -p "$(dirname "$LOG_FILE")" "$BACKUP_DIR" "$(dirname "$CONFIG_FILE")"
    touch "$LOG_FILE"
}

# Fonction de journalisation
log_action() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# Obtenir des informations Bluetooth détaillées
get_bluetooth_info() {
    local info_json="{"
    
    # État d'alimentation
    local power_state
    power_state=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null || echo "unknown")
    info_json+="\"power_state\": \"$power_state\","
    
    # Statut du daemon
    local daemon_running=false
    if pgrep bluetoothd >/dev/null 2>&1 || pgrep blued >/dev/null 2>&1; then
        daemon_running=true
    fi
    info_json+="\"daemon_running\": $daemon_running,"
    
    # Version macOS
    local macos_version
    macos_version=$(sw_vers -productVersion)
    info_json+="\"macos_version\": \"$macos_version\","
    
    # Matériel système
    local hardware_model
    hardware_model=$(system_profiler SPHardwareDataType | grep "Model Name" | awk -F': ' '{print $2}' | xargs)
    info_json+="\"hardware_model\": \"$hardware_model\","
    
    # Informations du contrôleur Bluetooth
    local bt_controller=""
    if system_profiler SPBluetoothDataType >/dev/null 2>&1; then
        bt_controller=$(system_profiler SPBluetoothDataType | grep -A5 "Apple Bluetooth Software" | grep "Version" | awk -F': ' '{print $2}' | xargs)
    fi
    info_json+="\"bluetooth_version\": \"$bt_controller\","
    
    # Horodatage
    info_json+="\"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\""
    info_json+="}"
    
    echo "$info_json"
}

# Sauvegarder la configuration Bluetooth actuelle
backup_bluetooth_config() {
    local backup_file="$BACKUP_DIR/bluetooth_backup_$(date +%Y%m%d_%H%M%S).plist"
    
    if [[ -f "/Library/Preferences/com.apple.Bluetooth.plist" ]]; then
        cp "/Library/Preferences/com.apple.Bluetooth.plist" "$backup_file"
        log_action "Configuration Bluetooth sauvegardée dans : $backup_file"
        echo "$backup_file"
    else
        log_action "ATTENTION : Fichier de préférences Bluetooth non trouvé pour la sauvegarde"
        return 1
    fi
}

# Définir l'état Bluetooth avec validation complète
set_bluetooth_state() {
    local desired_state="$1"  # "on" ou "off"
    local force_restart="${2:-false}"
    
    # Valider l'entrée
    if [[ "$desired_state" != "on" && "$desired_state" != "off" ]]; then
        log_action "ERREUR : État spécifié invalide. Utilisez 'on' ou 'off'"
        return 1
    fi
    
    # Obtenir l'état actuel
    local current_state
    current_state=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
    
    local target_value
    if [[ "$desired_state" == "on" ]]; then
        target_value=1
    else
        target_value=0
    fi
    
    # Vérifier si un changement est nécessaire
    if [[ "$current_state" == "$target_value" && "$force_restart" == "false" ]]; then
        log_action "Bluetooth déjà dans l'état désiré : $desired_state"
        return 0
    fi
    
    # Créer une sauvegarde avant les changements
    backup_bluetooth_config
    
    # Définir le nouvel état
    log_action "Définition de l'état Bluetooth à : $desired_state"
    sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int "$target_value"
    
    # Redémarrer le daemon Bluetooth
    restart_bluetooth_daemon
    
    # Attendre que les changements se propagent
    sleep 5
    
    # Vérifier le changement
    local new_state
    new_state=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
    
    if [[ "$new_state" == "$target_value" ]]; then
        log_action "✅ Bluetooth défini avec succès à : $desired_state"
        return 0
    else
        log_action "❌ Échec de la définition du Bluetooth à : $desired_state"
        return 1
    fi
}

# Redémarrer le daemon Bluetooth avec gestion d'erreurs
restart_bluetooth_daemon() {
    log_action "Redémarrage du daemon Bluetooth..."
    
    # Essayer d'abord bluetoothd moderne
    if pgrep bluetoothd >/dev/null 2>&1; then
        if sudo killall -HUP bluetoothd 2>/dev/null; then
            log_action "Daemon Bluetooth (bluetoothd) redémarré avec succès"
            return 0
        else
            log_action "ATTENTION : Échec du redémarrage de bluetoothd avec le signal HUP"
        fi
    fi
    
    # Essayer blued hérité
    if pgrep blued >/dev/null 2>&1; then
        if sudo killall -HUP blued 2>/dev/null; then
            log_action "Daemon Bluetooth (blued) redémarré avec succès"
            return 0
        else
            log_action "ATTENTION : Échec du redémarrage de blued avec le signal HUP"
        fi
    fi
    
    # Essayer l'approche launchctl
    local daemon_service=""
    if launchctl list | grep -q "com.apple.bluetoothd"; then
        daemon_service="com.apple.bluetoothd"
    elif launchctl list | grep -q "com.apple.blued"; then
        daemon_service="com.apple.blued"
    fi
    
    if [[ -n "$daemon_service" ]]; then
        log_action "Tentative de redémarrage launchctl pour : $daemon_service"
        sudo launchctl stop "$daemon_service" 2>/dev/null
        sleep 2
        sudo launchctl start "$daemon_service" 2>/dev/null
        log_action "Service Bluetooth redémarré via launchctl"
        return 0
    fi
    
    log_action "ERREUR : Impossible de redémarrer le daemon Bluetooth"
    return 1
}

# Surveiller la connectivité Bluetooth et les appareils appairés
monitor_bluetooth_devices() {
    log_action "Démarrage de la surveillance des appareils Bluetooth..."
    
    # Obtenir l'état d'alimentation actuel
    local power_state
    power_state=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
    
    if [[ "$power_state" != "1" ]]; then
        log_action "Bluetooth est DÉSACTIVÉ - pas d'appareils à surveiller"
        return 0
    fi
    
    # Vérifier la disponibilité de system_profiler
    if ! command -v system_profiler >/dev/null 2>&1; then
        log_action "ATTENTION : system_profiler non disponible pour la surveillance des appareils"
        return 1
    fi
    
    # Obtenir les informations des appareils Bluetooth
    local bt_devices
    bt_devices=$(system_profiler SPBluetoothDataType 2>/dev/null | grep -A10 "Devices:" || echo "Aucun appareil trouvé")
    
    log_action "Statut des appareils Bluetooth :"
    echo "$bt_devices" | while IFS= read -r line; do
        log_action "  $line"
    done
    
    # Compter les appareils connectés
    local connected_count
    connected_count=$(echo "$bt_devices" | grep -c "Connected: Yes" || echo "0")
    log_action "Total d'appareils Bluetooth connectés : $connected_count"
    
    return 0
}

# Générer un rapport Bluetooth complet
generate_bluetooth_report() {
    local report_file="/tmp/bluetooth_report_$(date +%Y%m%d_%H%M%S).json"
    
    log_action "Génération du rapport Bluetooth : $report_file"
    
    {
        echo "{"
        echo "  \"report_type\": \"bluetooth_status\","
        echo "  \"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\","
        echo "  \"hostname\": \"$(hostname)\","
        echo "  \"device_info\": $(get_bluetooth_info),"
        
        # Informations système
        echo "  \"system_info\": {"
        echo "    \"macos_version\": \"$(sw_vers -productVersion)\","
        echo "    \"build_version\": \"$(sw_vers -buildVersion)\","
        echo "    \"hardware_uuid\": \"$(system_profiler SPHardwareDataType | grep 'Hardware UUID' | awk -F': ' '{print $2}' | xargs)\""
        echo "  },"
        
        # Préférences Bluetooth
        echo "  \"bluetooth_preferences\": {"
        if [[ -f "/Library/Preferences/com.apple.Bluetooth.plist" ]]; then
            echo "    \"preferences_file_exists\": true,"
            echo "    \"file_size\": $(stat -f%z "/Library/Preferences/com.apple.Bluetooth.plist"),"
            echo "    \"last_modified\": \"$(stat -f%Sm -t%Y-%m-%dT%H:%M:%SZ "/Library/Preferences/com.apple.Bluetooth.plist")\""
        else
            echo "    \"preferences_file_exists\": false"
        fi
        echo "  }"
        echo "}"
    } > "$report_file"
    
    log_action "Rapport Bluetooth généré avec succès"
    echo "$report_file"
}

# Vérification de conformité de sécurité
check_bluetooth_security() {
    log_action "Exécution de la vérification de conformité de sécurité Bluetooth..."
    
    local security_issues=()
    
    # Vérifier si Bluetooth est activé quand il devrait être désactivé
    if [[ -f "$CONFIG_FILE" ]] && grep -q "BLUETOOTH_POLICY=disabled" "$CONFIG_FILE"; then
        local current_state
        current_state=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
        
        if [[ "$current_state" == "1" ]]; then
            security_issues+=("Bluetooth activé malgré une politique exigeant l'état désactivé")
        fi
    fi
    
    # Vérifier la découvrabilité Bluetooth (si system_profiler disponible)
    if command -v system_profiler >/dev/null 2>&1; then
        local discoverable
        discoverable=$(system_profiler SPBluetoothDataType 2>/dev/null | grep -i "discoverable" || echo "unknown")
        
        if echo "$discoverable" | grep -qi "yes"; then
            security_issues+=("Bluetooth est découvrable - risque de sécurité potentiel")
        fi
    fi
    
    # Rapporter le statut de sécurité
    if [[ ${#security_issues[@]} -eq 0 ]]; then
        log_action "✅ Vérification de conformité de sécurité Bluetooth réussie"
        return 0
    else
        log_action "⚠️  Problèmes de sécurité Bluetooth trouvés :"
        for issue in "${security_issues[@]}"; do
            log_action "  - $issue"
        done
        return 1
    fi
}

# Fonction de gestion principale
main() {
    local action="${1:-status}"
    local parameter="$2"
    
    setup_directories
    log_action "Gestion Bluetooth Roundfleet démarrée avec l'action : $action"
    
    case "$action" in
        "on"|"enable")
            set_bluetooth_state "on"
            ;;
        "off"|"disable")
            set_bluetooth_state "off"
            ;;
        "restart"|"reload")
            restart_bluetooth_daemon
            ;;
        "status"|"info")
            get_bluetooth_info | python3 -m json.tool 2>/dev/null || get_bluetooth_info
            ;;
        "monitor")
            monitor_bluetooth_devices
            ;;
        "report")
            generate_bluetooth_report
            ;;
        "security")
            check_bluetooth_security
            ;;
        "backup")
            backup_bluetooth_config
            ;;
        "force-on")
            set_bluetooth_state "on" true
            ;;
        "force-off")
            set_bluetooth_state "off" true
            ;;
        *)
            echo "Usage : $0 {on|off|restart|status|monitor|report|security|backup|force-on|force-off}"
            echo ""
            echo "Commandes :"
            echo "  on/enable    - Activer le Bluetooth"
            echo "  off/disable  - Désactiver le Bluetooth"
            echo "  restart      - Redémarrer le daemon Bluetooth"
            echo "  status       - Afficher le statut Bluetooth détaillé"
            echo "  monitor      - Surveiller les appareils connectés"
            echo "  report       - Générer un rapport complet"
            echo "  security     - Exécuter la vérification de conformité de sécurité"
            echo "  backup       - Sauvegarder la configuration actuelle"
            echo "  force-on     - Forcer l'activation du Bluetooth (redémarrer daemon)"
            echo "  force-off    - Forcer la désactivation du Bluetooth (redémarrer daemon)"
            exit 1
            ;;
    esac
    
    log_action "Gestion Bluetooth Roundfleet terminée avec l'action : $action"
}

# Exécuter la fonction principale avec tous les arguments
main "$@"

Fonctions de Gestion Rapide

Vérification Rapide du Statut

#!/bin/bash

# Vérification rapide du statut Bluetooth avec sortie colorée
bluetooth_quick_status() {
    local status
    status=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
    
    case "$status" in
        "1")
            echo "🔵 Bluetooth : ACTIVÉ"
            ;;
        "0")
            echo "⚪ Bluetooth : DÉSACTIVÉ"
            ;;
        *)
            echo "❓ Bluetooth : INCONNU"
            ;;
    esac
}

bluetooth_quick_status

Basculer l'État Bluetooth

#!/bin/bash

# Basculer le Bluetooth entre les états ACTIVÉ et DÉSACTIVÉ
toggle_bluetooth() {
    local current_state
    current_state=$(defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 2>/dev/null)
    
    if [[ "$current_state" == "1" ]]; then
        echo "Bluetooth est ACTIVÉ, désactivation..."
        sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 0
        sudo killall -HUP bluetoothd 2>/dev/null || sudo killall -HUP blued 2>/dev/null
        echo "✅ Bluetooth désactivé"
    else
        echo "Bluetooth est DÉSACTIVÉ, activation..."
        sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 1
        sudo killall -HUP bluetoothd 2>/dev/null || sudo killall -HUP blued 2>/dev/null
        echo "✅ Bluetooth activé"
    fi
}

toggle_bluetooth

Modèles de Configuration

Configuration de Politique Bluetooth

# /etc/roundfleet/bluetooth_config.conf
# Configuration de Gestion Bluetooth Roundfleet

# Paramètres de politique
BLUETOOTH_POLICY="enabled"  # enabled, disabled, user_controlled
AUTO_DISABLE_ON_IDLE="false"
IDLE_TIMEOUT_MINUTES="30"

# Paramètres de sécurité
ALLOW_DISCOVERABLE="false"
REQUIRE_PAIRING_CONFIRMATION="true"
LOG_DEVICE_CONNECTIONS="true"

# Paramètres de surveillance
MONITOR_INTERVAL_SECONDS="300"
ALERT_ON_NEW_DEVICES="true"
COMPLIANCE_CHECK_ENABLED="true"

# Paramètres de sauvegarde
AUTO_BACKUP_ENABLED="true"
BACKUP_RETENTION_DAYS="30"

Dépannage des Problèmes Courants

Daemon Bluetooth qui ne Répond Pas

#!/bin/bash

# Dépanner et corriger les problèmes de daemon Bluetooth
fix_bluetooth_daemon() {
    echo "Diagnostic des problèmes de daemon Bluetooth..."
    
    # Vérifier si le daemon fonctionne
    if ! pgrep bluetoothd >/dev/null 2>&1 && ! pgrep blued >/dev/null 2>&1; then
        echo "❌ Aucun daemon Bluetooth trouvé en cours d'exécution"
        
        # Essayer de démarrer via launchctl
        if launchctl list | grep -q "com.apple.bluetoothd"; then
            echo "Démarrage de bluetoothd via launchctl..."
            sudo launchctl start com.apple.bluetoothd
        elif launchctl list | grep -q "com.apple.blued"; then
            echo "Démarrage de blued via launchctl..."
            sudo launchctl start com.apple.blued
        else
            echo "❌ Service Bluetooth non trouvé dans launchctl"
            return 1
        fi
    fi
    
    # Forcer le redémarrage en cas de problèmes persistants
    echo "Redémarrage forcé du système Bluetooth..."
    sudo pkill -f bluetooth
    sleep 3
    
    # Redémarrer via launchctl
    for service in "com.apple.bluetoothd" "com.apple.blued"; do
        if launchctl list | grep -q "$service"; then
            sudo launchctl stop "$service" 2>/dev/null
            sleep 2
            sudo launchctl start "$service" 2>/dev/null
            echo "Service redémarré : $service"
        fi
    done
    
    # Vérifier la récupération
    sleep 5
    if pgrep bluetoothd >/dev/null 2>&1 || pgrep blued >/dev/null 2>&1; then
        echo "✅ Récupération du daemon Bluetooth réussie"
        return 0
    else
        echo "❌ Récupération du daemon Bluetooth échouée"
        return 1
    fi
}

fix_bluetooth_daemon

Réinitialiser la Configuration Bluetooth

#!/bin/bash

# Réinitialiser le Bluetooth aux paramètres d'usine
reset_bluetooth_config() {
    echo "⚠️  Réinitialisation de la configuration Bluetooth aux paramètres par défaut..."
    
    # Créer une sauvegarde
    if [[ -f "/Library/Preferences/com.apple.Bluetooth.plist" ]]; then
        cp "/Library/Preferences/com.apple.Bluetooth.plist" "/tmp/bluetooth_backup_$(date +%s).plist"
        echo "Sauvegarde créée dans /tmp/"
    fi
    
    # Arrêter les services Bluetooth
    sudo launchctl stop com.apple.bluetoothd 2>/dev/null
    sudo launchctl stop com.apple.blued 2>/dev/null
    
    # Supprimer les fichiers de configuration
    sudo rm -f "/Library/Preferences/com.apple.Bluetooth.plist"
    sudo rm -f "/Library/Preferences/ByHost/com.apple.Bluetooth.*.plist"
    
    # Redémarrer les services
    sudo launchctl start com.apple.bluetoothd 2>/dev/null
    sudo launchctl start com.apple.blued 2>/dev/null
    
    # Définir l'état par défaut
    sleep 3
    sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 1
    sudo killall -HUP bluetoothd 2>/dev/null || sudo killall -HUP blued 2>/dev/null
    
    echo "✅ Réinitialisation de la configuration Bluetooth terminée"
}

# Décommenter pour exécuter
# reset_bluetooth_config

Notes Techniques Importantes

Gestion des Daemons

  • bluetoothd : Daemon Bluetooth moderne (macOS 10.10+)
  • blued : Daemon Bluetooth hérité (anciennes versions macOS)
  • killall -HUP : Envoie un signal de raccrochage pour redémarrer le daemon gracieusement
  • launchctl : Méthode préférée pour la gestion des services

Détails de Configuration

  • Emplacement du fichier : /Library/Preferences/com.apple.Bluetooth
  • Clé d'état d'alimentation : ControllerPowerState
  • Valeurs : 1 (ACTIVÉ), 0 (DÉSACTIVÉ)
  • Persistance : Les changements persistent après redémarrage

Considérations de Sécurité

  1. Privilèges Administratifs : Toutes les modifications Bluetooth nécessitent sudo
  2. Redémarrage du Daemon : Les changements ne prennent effet qu'après redémarrage du daemon
  3. Impact Utilisateur : Désactiver le Bluetooth déconnecte tous les appareils appairés
  4. Conformité Politique : Surveiller les changements Bluetooth non autorisés

Meilleures Pratiques

  1. Toujours sauvegarder les configurations avant d'apporter des modifications
  2. Tester les méthodes de redémarrage du daemon pour votre version macOS
  3. Surveiller les délais - le redémarrage du daemon peut prendre plusieurs secondes
  4. Implémenter la journalisation pour les pistes d'audit et le dépannage
  5. Utiliser launchctl pour une gestion des services plus fiable
  6. Valider les changements après avoir appliqué les modifications
  7. Considérer l'impact utilisateur lors de la désactivation du Bluetooth à distance
  8. Tester les scripts minutieusement avant le déploiement de flotte

N'oubliez pas de valider tous les scripts sur des appareils de test avant de les déployer sur votre environnement Roundfleet, et soyez conscient que les changements Bluetooth peuvent prendre quelques minutes pour se propager complètement dans le système.

Related Tutorials

Gestion de Réseau Wi-Fi sur macOS

Gérez les réseaux Wi-Fi, configurez les paramètres proxy, serveurs DNS et implémentez les politiques de réseau d'entreprise sur les appareils macOS en utilisant les commandes networksetup avancées et la gestion de flotte centralisée.

7 juil. 2025

Gestion d'Entreprise des Proxies sur macOS

Guide complet pour configurer et gérer les proxies web, web sécurisé, streaming, Gopher et SOCKS firewall sur les appareils macOS avec les commandes networksetup pour les environnements d'entreprise.

7 juil. 2025

Gestion Entreprise du Client Itinérant Cisco Umbrella sur macOS

Guide complet pour le déploiement et la gestion du client itinérant Cisco Umbrella en entreprise sur les appareils Roundfleet avec protection DNS de sécurité automatisée, surveillance et contrôle centralisé.

7 juil. 2025

Gérer le menu Bluetooth dans la barre d'état sur macOS

Apprenez à afficher ou masquer le menu Bluetooth dans la barre d'état des appareils macOS à l'aide de scripts shell pour la gestion de flotte Mac.

7 juil. 2025

Gestion d'AirDrop sur macOS

Apprenez à activer, désactiver et gérer la fonctionnalité AirDrop sur les appareils macOS en utilisant les outils en ligne de commande. Guide complet pour la sécurité AirDrop en entreprise, le contrôle des transferts de fichiers sans fil et l'application des politiques réseau.

7 juil. 2025

Contrôle Wi-Fi d'Entreprise sur macOS

Guide complet pour contrôler les paramètres Wi-Fi sur les appareils macOS en utilisant les commandes networksetup pour la gestion sans fil d'entreprise, les politiques de sécurité et l'optimisation énergétique dans les déploiements de flotte.

7 juil. 2025

Suppression de Comptes Utilisateur et Gestion du Cycle de Vie sur macOS

Apprenez à supprimer en toute sécurité les comptes utilisateur, gérer la rétention des données, implémenter des procédures de départ sécurisées et traiter la gestion du cycle de vie des utilisateurs d'entreprise sur les appareils macOS.

7 juil. 2025

Gestion Entreprise des Fuseaux Horaires sur macOS

Guide complet pour la gestion des fuseaux horaires et des paramètres de date/heure en entreprise sur les appareils Roundfleet avec synchronisation automatisée, conformité géographique, application de politiques et contrôle centralisé.

7 juil. 2025