261 lines
7.6 KiB
Markdown
261 lines
7.6 KiB
Markdown
# 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) |