LockDown Browser は Mac で 2 枚目のモニターを検出できるか? (はい、その仕組み)
検出の仕組み
LDB は起動時に 2 つの呼び出しを行います。
uint32_t count;
CGDisplayActiveDisplayCount(&count);
// count is the number of currently-active displays
// LDB blocks if count >= 2 (default Dashboard config)
これは システム情報 → グラフィックス / ディスプレイ が表示する内容と同じです。隠し API はなく、検出は単純明快です。
「アクティブなディスプレイ」として数えられるもの
| ディスプレイソース | 数えられるか | 備考 |
|---|---|---|
| MacBook 内蔵ディスプレイ (ふた開き) | ✓ | 常に #1 として数えられる |
| HDMI 外部 | ✓ | 標準 |
| DisplayPort 外部 | ✓ | 標準 |
| USB-C からディスプレイへ直結 | ✓ | 標準 |
| Thunderbolt 4 外部 | ✓ | 標準 |
| HDMI / DisplayPort 出力付きの USB-C ドック | ✓ | 各出力ポートが独立して数えられる |
| Sidecar の iPad | ✓ | 仮想 CGDisplay として登録される |
| Apple TV / Vizio / Roku TV への AirPlay | ✓ | ミラーリングまたは拡張、どちらも数えられる |
| iPhone ミラーリング (Sequoia 15+) | ✓ | Mac 側で数えられる |
| Continuity で入力ソースとして表示された iPad | ✓ Sidecar 有効時 | Sidecar が数えられる原因になる |
数えられないもの
| 構成 | 数えられない理由 |
|---|---|
| クラムシェルモードで外部ディスプレイのみ | 内蔵ディスプレイがスリープ、CGDisplay 数 = 1 |
| ノート PC の隣に iPad があるが Sidecar ではない | 別デバイスで macOS のディスプレイシステムに登録されていない |
| 外部ディスプレイが物理的に接続されているがシステム設定で無効化 | macOS 内で非アクティブのため数えられない |
| Universal Control (カーソルが iPad 上に) | Universal Control は Sidecar ではない。iPad は CGDisplay ではない |
| ノート PC の隣に電話、Continuity Camera 利用時も | カメラはディスプレイではない |
| 同じ部屋にスマート TV、AirPlay / HDMI で接続なし | Mac のディスプレイシステムに接続なし |
端ケース
何も接続されていないのに「仮想」ディスプレイを追加する USB-C ドック
一部の USB-C ドック (CalDigit、OWC) は、モニターが接続されていなくてもドックがディスプレイポートをアドバタイズする癖があります。macOS はこれを物理スクリーンのないアクティブなディスプレイとしてまれに登録します。症状: 何も接続されていないように見えるのに、LDB がマルチディスプレイエラーでブロックします。
解決方法: ドック全体を取り外してください (試験のあいだだけで構いません)。ファントムディスプレイが CGDisplay リストから消えます。
ワイヤレスディスプレイ (Miracast、サードパーティ)
サードパーティのワイヤレスディスプレイプロトコルは AirPlay と同様に CGDisplay として登録されます。無効化してください。
ツインディスプレイのノート PC (まれ)
一部の Asus / Acer の Windows ノート PC はキーボードの上に副スクリーンを備えています。Mac にはこのハードウェアはありません。関係しません。
CGDisplay 数の確認方法
ターミナルを開いて次を実行してください。
system_profiler SPDisplaysDataType | grep -i "Resolution"
各行が 1 つの検出されたディスプレイです。数えてください。>1 なら LDB はブロックします。
または AppleScript を使います。
osascript -e 'tell application "System Events" to get count of displays of (get display preferences)'
バイパスして起動を試みた場合の挙動
バイパスはできません。チェックは起動時、試験が読み込まれる前に行われます。ブロックは一貫しており再現可能です。2 枚目のディスプレイを切断するか無効化し、LDB を再起動してください。
Frequently asked questions
外部モニターを段ボールで覆ったら、LDB はそれでも検出しますか?
はい。物理的にスクリーンを覆っても macOS のディスプレイ状態は変わりません。ディスプレイは接続によって「アクティブ」なのであって、ピクセルが見えているからではありません。抜くか無効化してください。
macOS の配置を変更して単一ディスプレイに切り替えできますか?
いいえ。システム設定 → ディスプレイ → 配置 はレイアウトのみを変更し、アクティブなディスプレイの数は変更しません。ディスプレイごとの歯車アイコンでディスプレイを無効化するか、抜いてください。
MacBook のふたを閉じて外部のみを使っていますが、なぜ LDB はまだブロックしますか?
クラムシェルモードが正しく有効になっていれば、その構成ではブロックしないはずです。ブロックされる場合: ふた開き → ふたを完全に閉じる → 10 秒待つ → 外部が唯一のディスプレイになる → LDB を起動。それでもブロックされる場合、内蔵がスリープしていない可能性があります (充電ケーブルが切断されている、ふたが完全に閉じていないなど)。