# FindMyDevice (FMD) — Documentation Alternative open source et auto-hébergeable à Google Find My Device, conçue pour fonctionner **sans Google Play Services**. Idéale pour GrapheneOS. - **Licence** : GPLv3 - **Source** : [gitlab.com/fmd-foss/fmd-android](https://gitlab.com/fmd-foss/fmd-android) - **Serveur** : [gitlab.com/fmd-foss/fmd-server](https://gitlab.com/fmd-foss/fmd-server) - **F-Droid** : [de.nulide.findmydevice](https://f-droid.org/packages/de.nulide.findmydevice/) --- ## Fonctionnalités | Fonction | Description | |---|---| | Localisation | GPS, cellules, ou dernière position connue | | Sonnerie | Faire sonner le téléphone à distance | | Verrouillage | Verrouiller l'écran avec un message personnalisé | | Photos | Capturer une photo avec la caméra avant ou arrière | | Audio | Enregistrer un son ambiant | | Réseau | Voir les Wi-Fi visibles, infos cellules | | Effacement | Réinitialisation usine à distance | | GPS/BT/DND | Activer/désactiver le GPS, Bluetooth, Ne pas déranger | --- ## Canaux de communication ### 1. SMS (fonctionne sans internet) Envoyer un SMS au téléphone avec une commande : ``` fmd locate fmd ring fmd camera front ``` **Modes d'authentification :** - **Contacts de confiance** : numéros whitelistés, pas besoin de PIN - **PIN** : pour les numéros inconnus, inclure le PIN : `fmd 1234 locate` - Le PIN accorde une fenêtre de 10 minutes après utilisation ### 2. Applications de messagerie (Telegram, WhatsApp) Via le service d'écoute des notifications. Le PIN est obligatoire pour chaque commande : ``` fmd 1234 locate fmd 1234 ring ``` ### 3. FMD Server (interface web auto-hébergée) - Carte avec position en temps réel - Visualisation des photos capturées - Envoi de commandes à distance - Notifications push via ntfy/UnifiedPush --- ## Commandes SMS complètes | Commande | Action | |---|---| | `fmd locate` | Position GPS + cellules | | `fmd locate last` | Dernière position connue | | `fmd locate gps` | Position GPS uniquement | | `fmd locate cell` | Position par cellules uniquement | | `fmd ring` | Sonner pendant 15 secondes | | `fmd ring long` | Sonner pendant 3 minutes | | `fmd lock` | Verrouiller l'écran | | `fmd lock ton message` | Verrouiller avec un message | | `fmd camera front` | Photo avec la caméra avant | | `fmd camera back` | Photo avec la caméra arrière | | `fmd stats` | Infos réseau et Wi-Fi visibles | | `fmd bluetooth` | Activer/désactiver le Bluetooth | | `fmd gps` | Activer/désactiver le GPS | | `fmd nodisturb` | Activer/désactiver Ne pas déranger | | `fmd delete` | Réinitialisation usine (PIN requis + activation manuelle dans les paramètres) | | `fmd help` | Afficher la liste des commandes | Le préfixe `fmd` est personnalisable dans les paramètres de l'application. --- ## Installation sur GrapheneOS ### 1. Installer depuis F-Droid L'application est disponible directement dans F-Droid. Rechercher « Find My Device ». ### 2. Accorder les permissions via ADB Certaines permissions ne peuvent pas être accordées depuis l'interface Android et nécessitent ADB : ```bash # Permissions critiques adb shell pm grant de.nulide.findmydevice android.permission.READ_SMS adb shell pm grant de.nulide.findmydevice android.permission.RECEIVE_SMS adb shell pm grant de.nulide.findmydevice android.permission.SEND_SMS adb shell pm grant de.nulide.findmydevice android.permission.ACCESS_BACKGROUND_LOCATION adb shell pm grant de.nulide.findmydevice android.permission.RECORD_AUDIO adb shell pm grant de.nulide.findmydevice android.permission.READ_PHONE_STATE # Permet à FMD d'activer le GPS à distance même s'il est désactivé adb shell pm grant de.nulide.findmydevice android.permission.WRITE_SECURE_SETTINGS ``` ### 3. Configurer dans l'application - Définir un **PIN** dans les paramètres FMD - Ajouter les **contacts de confiance** (numéros autorisés sans PIN) - Activer **l'optimisation batterie ignorée** pour FMD - Activer **l'accès aux notifications** (pour les commandes via Telegram/WhatsApp) - Configurer le **serveur FMD** si vous utilisez l'interface web ### 4. Désactiver l'optimisation batterie ```bash adb shell dumpsys deviceidle whitelist +de.nulide.findmydevice ``` --- ## Installation du serveur FMD ### Docker (recommandé) ```bash docker run -d \ --name fmd-server \ -p 8080:8080 \ -v fmd-data:/data \ registry.gitlab.com/fmd-foss/fmd-server:0.15.0 ``` ### Docker Compose ```yaml version: "3" services: fmd-server: image: registry.gitlab.com/fmd-foss/fmd-server:0.15.0 ports: - "8080:8080" volumes: - fmd-data:/data restart: unless-stopped volumes: fmd-data: ``` ### Construction depuis les sources ```bash # Compiler le frontend React cd web && npm install && npm run build # Compiler et lancer le serveur Go go run . serve ``` --- ## Sécurité | Mécanisme | Description | |---|---| | Chiffrement E2E | RSA-2048 + AES-256-GCM entre le téléphone et le serveur | | PIN | Obligatoire pour les numéros non whitelistés | | Whitelist | Contacts de confiance sans besoin de PIN | | Préfixe personnalisable | Remplacer `fmd` par un mot de votre choix pour masquer les commandes | | Effacement distant | `fmd delete` nécessite un PIN ET une activation manuelle dans les paramètres | --- ## Flux de commande typique ``` Téléphone perdu │ ▼ Envoyer SMS : "fmd 1234 locate" │ ▼ FMD reçoit le SMS ──► Vérifie PIN/whitelist │ ▼ Active le GPS (WRITE_SECURE_SETTINGS) │ ▼ Récupère la position │ ▼ Répond par SMS avec les coordonnées │ ▼ (optionnel) Envoie aussi au serveur FMD ``` --- ## Dépannage ### Les commandes SMS ne fonctionnent pas - Vérifier que `RECEIVE_SMS` et `SEND_SMS` sont accordées - Vérifier que l'appli est exemptée de l'optimisation batterie - Vérifier que les notifications sont activées pour FMD ### La localisation ne fonctionne pas ```bash # Vérifier les permissions adb shell dumpsys package de.nulide.findmydevice | grep -E "LOCATION|WRITE_SECURE" # Accorder si nécessaire adb shell pm grant de.nulide.findmydevice android.permission.ACCESS_BACKGROUND_LOCATION adb shell pm grant de.nulide.findmydevice android.permission.WRITE_SECURE_SETTINGS ``` ### Les photos ne se prennent pas - Vérifier que `CAMERA` est accordée - Sur GrapheneOS, vérifier que l'appli a accès aux capteurs : Paramètres → Apps → Find My Device → Capteurs ### Le GPS ne s'active pas à distance La permission `WRITE_SECURE_SETTINGS` est obligatoire. Sans elle, FMD ne peut pas activer le GPS quand il est éteint : ```bash adb shell pm grant de.nulide.findmydevice android.permission.WRITE_SECURE_SETTINGS ``` --- ## Comparaison avec Google Find My Device | Critère | Google FMD | FMD (open source) | |---|---|---| | Dépendance Google | Oui | Non | | Fonctionne sur GrapheneOS | Non (Play Integrity requis) | Oui | | Localisation SMS | Non | Oui | | Photos à distance | Non | Oui | | Serveur auto-hébergé | Non | Oui | | Chiffrement E2E | Non documenté | Oui (RSA-256 + AES-256) | | Effacement à distance | Oui | Oui | | Code source | Fermé | Ouvert (GPLv3) | | Coût | Gratuit (avec compte Google) | Gratuit | --- ## Références - [FMD Android — GitLab](https://gitlab.com/fmd-foss/fmd-android) - [FMD Server — GitLab](https://gitlab.com/fmd-foss/fmd-server) - [FMD sur F-Droid](https://f-droid.org/packages/de.nulide.findmydevice/) - [Documentation FMD — rigacci.org](https://rigacci.org/wiki/doku.php/doc/appunti/android/android_findmydevice_fdroid) - [Serveur FMD — Installation](https://fmd-foss.org/docs/fmd-server/installation/overview)