Files
docs/FMD-doc.md

7.6 KiB

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.


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 :

# 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

adb shell dumpsys deviceidle whitelist +de.nulide.findmydevice

Installation du serveur FMD

Docker (recommandé)

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

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

# 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

# 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 :

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