LockDown Browser peut-il détecter un deuxième moniteur sur Mac ? (Oui - voici comment)
Le mécanisme de détection
LDB fait deux appels au lancement :
uint32_t count;
CGDisplayActiveDisplayCount(&count);
// count est le nombre d'écrans actuellement actifs
// LDB bloque si count >= 2 (config Dashboard par défaut)
C'est identique à ce que Informations système → Graphismes/Moniteurs affiche. Il n'y a pas d'API cachée ; la détection est directe.
Choses qui comptent comme « écrans actifs »
| Source d'écran | Comptée ? | Notes |
|---|---|---|
| Écran intégré MacBook (capot ouvert) | ✓ | Toujours compté comme #1 |
| HDMI externe | ✓ | Standard |
| DisplayPort externe | ✓ | Standard |
| USB-C-vers-écran direct | ✓ | Standard |
| Thunderbolt 4 externe | ✓ | Standard |
| Dock USB-C avec sortie HDMI/DisplayPort | ✓ | Chaque port de sortie compte indépendamment |
| Sidecar iPad | ✓ | Enregistré comme CGDisplay virtuel |
| AirPlay vers Apple TV / Vizio / Roku TV | ✓ | Recopie ou extension - les deux comptés |
| Recopie iPhone (Sequoia 15+) | ✓ | Compté côté Mac |
| iPad affiché via Continuity comme source d'entrée | ✓ quand Sidecar actif | Sidecar est ce qui le fait compter |
Choses qui NE comptent PAS
| Configuration | Pourquoi ça ne compte pas |
|---|---|
| Mode capot fermé avec écran externe seulement | L'écran intégré dort ; comptage CGDisplay = 1 |
| iPad à côté du laptop, PAS en Sidecar | Appareil séparé, non enregistré dans le système d'écrans macOS |
| Écran externe physiquement connecté mais DÉSACTIVÉ via Réglages Système | Inactif dans macOS, donc pas compté |
| Universal Control (curseur sur iPad) | Universal Control != Sidecar ; iPad n'est pas un CGDisplay |
| Téléphone à côté du laptop, même avec Continuity Camera | Caméra != écran |
| Smart TV dans la même pièce, non connectée via AirPlay/HDMI | Pas de connexion au système d'écrans Mac |
Cas limites
Dock USB-C qui ajoute un écran « virtuel » quand rien n'est branché
Certains docks USB-C (CalDigit, OWC) ont une particularité où le dock annonce un port d'écran même sans moniteur connecté. macOS enregistre occasionnellement cela comme écran actif sans écran physique. Symptôme : LDB bloque avec erreur multi-écran mais vous ne voyez rien de connecté.
Solution : débranchez le dock entièrement (brièvement, pour l'examen). L'écran fantôme disparaît de la liste CGDisplay.
Écran sans fil (Miracast, tiers)
Les protocoles d'écran sans fil tiers s'enregistrent comme CGDisplays comme AirPlay. Désactivez.
Laptops à double écran (rares)
Certains laptops Asus / Acer Windows ont un écran secondaire au-dessus du clavier. Les Macs n'ont pas ce matériel. Pas pertinent.
Comment vérifier votre comptage CGDisplay
Ouvrez Terminal et exécutez :
system_profiler SPDisplaysDataType | grep -i "Resolution"
Chaque ligne est un écran détecté. Comptez-les. Si >1, LDB bloquera.
Ou utilisez AppleScript :
osascript -e 'tell application "System Events" to get count of displays of (get display preferences)'
Que se passe-t-il si vous essayez de contourner et lancer
Vous ne pouvez pas contourner - la vérification se passe au lancement, avant le chargement de tout examen. Le blocage est cohérent et reproductible. Déconnectez ou désactivez le deuxième écran, redémarrez LDB.
Questions fréquentes
Si je couvre mon moniteur externe d'un morceau de carton, LDB le détecte-t-il quand même ?
Oui - couvrir physiquement l'écran ne change pas l'état d'écran macOS. L'écran est « actif » à cause de la connexion, pas parce que les pixels sont visibles. Débranchez ou désactivez.
Puis-je passer en écran unique en changeant l'arrangement macOS ?
Non - Réglages Système → Moniteurs → Arrangement change seulement la disposition, pas le comptage d'écrans actifs. Désactivez un écran via l'icône d'engrenage par écran, ou débranchez.
Le capot de mon MacBook est fermé et j'utilise seulement un externe. Pourquoi LDB bloque-t-il quand même ?
Ne devrait pas bloquer dans cette configuration si le mode capot fermé est correctement actif. Si LDB bloque : capot ouvert → fermez le capot complètement → attendez 10 secondes → externe devient seul écran → lancez LDB. Si toujours bloquant, l'intégré peut ne pas dormir (câble de charge déconnecté, capot pas complètement fermé).