NOTES

9分で読めます

ARグラスを使うとMacの画面が隣から丸見えになる — 本体だけ消す方法が無かったので作った

新幹線でMacBook AirにARグラスをつないで作業していると、グラスに映した内容が本体のパネルにもそのまま出ます。自分は見ていないのに隣の席からは読める。macOSに「本体画面だけ消す」設定は無く、クラムシェルではキーボードも使えません。本体画面を時計で覆う常駐アプリを作って公開するまでと、3回の作り直しの記録です。

ARグラス(Xreal One)を、移動中に画面を増やす道具として使っています。 新幹線でMacBook Airにつなぐと、グラス側に大きな画面が出るので、 狭い座席でもClaudeとVivaldiを並べて作業できる。 膝の上の13インチにウィンドウを全部詰め込まなくてよくなります。

移動時間が長いほど効きます。仙台と福島を行き来していると新幹線の中が そこそこの作業時間になるので、その環境が良くなるかどうかは地味に生活の質に関わります。

この記事で分かること
  • ARグラスをMacにつなぐと、グラスの内容が本体画面にも出て周囲から読めてしまうこと
  • macOSには「本体画面だけ消す」設定がないこと、クラムシェルでは代用できない理由
  • 本体画面を時計で覆う自作アプリ(Veil)と、作る過程で3回作り直した話

使い始めてすぐ気づいたのがこれです。 MacにARグラスをつなぐと、グラスに映した内容がMac本体のパネルにもそのまま出ます。 ミラーリングでも拡張表示でも同じで、本体側は本体側で普通に表示され続けます。

自分はグラスを見ているので本体画面は見ていません。 でも新幹線の隣の席からは中身が読める。 しかもグラスをかけている人は、周囲を見ていないぶん、 誰かが画面を覗いていても気づきません。作業内容が見えるのは普通に困ります。

macOSには「本体画面だけ消す」設定がない

先に手段を探しました。結論として、標準の方法では解決できません。

やり方結果
本体の輝度を最低まで下げる完全には消えない。暗いだけで内容は読める
クラムシェル(本体を閉じる)本体画面は消えるが、キーボードとトラックパッドも使えなくなる
スクリーンセーバーを出す操作するたびに解除される。作業しながらは無理
覗き見防止フィルム常時暗くなる。グラスを使わないときも見づらい

やりたいのは「グラスを使っている間だけ、本体画面を隠す。キーボードは使えるまま」という状態です。これに当たる機能が見つからなかったので、作ることにしました。

Veilという常駐アプリを作りました。 ARグラスの接続を検知して、Mac本体の画面を時計だけのカバー画面で覆います。 見た目はmacOSのロック画面に寄せてあるので、 隣から見えるのは時刻と日付とバッテリー残量だけです。

内容
自動カバーグラスを検知して、それ以外の画面を時計で覆う
自動配置グラスの表示位置をMacの真上・中央に移動する
解除カバーをダブルクリック。またはグラスを抜く
復帰ボタン解除中は画面の隅にボタンが出る。押せば再び覆う
自動再カバー解除したまま忘れても、5分後に自動で覆い直す

キーボードとトラックパッドはそのまま使えます。覆っているのは表示だけなので、 グラス側の画面で作業を続けながら、本体のパネルは時計になっている、という状態になります。

ついでに、グラスの位置をMacの真上へ

作っているうちに気づいたのですが、macOSの初期状態ではグラスの画面がMacの右横に配置されます。これだと視線を横に振ることになって不自然でした。

そこでグラスの表示領域を本体の真上・中央揃えに自動で動かすようにしました。 視線を上げればグラス、下ろせば手元のキーボード、という並びになって、 座席でも仰向けでも自然に使えます。クラムシェルのとき(本体画面が無効なとき)は何もしません。

Swift + SwiftUI + AppKitで作っていますが、Xcodeは使っていません。 コマンドラインツールに入っているSwift Package Managerでビルドして、 スクリプトでアプリの形(.app)に包んでいます。 Xcodeは容量も起動時間も重いので、この規模なら無くても足ります。

仕組み自体は単純です。macOSが「画面の構成が変わった」と通知してくるので、 それを受けて対象のディスプレイを判定し、その上に全画面のウィンドウを重ねる。 カバーはスクリーンセーバーと同じ階層に置いてあるので、 誤ってクリックしても背後のアプリには落ちません。

つまずき: 作ったものを自分で見られない

開発中に困ったのが検証手段でした。 画面収録の権限がないためスクリーンショットが撮れず、 カバー画面のデザインを確認できません。

そこで、画面に出さずに直接PNGとして描き出すモードを実装して見た目を確認しました。 ただしこの方法にも限界があって、後述のLiquid Glassだけは実画面でしか描画されないため、最後は実機の目視に頼るしかありませんでした。

動くものができてから、実際に使ってみて3回直しています。どれも実装の話ではなく、使う人の側の事情で直したものでした。

① ショートカットキーは覚えられない

最初、カバーを解除したあと復帰させる手段としてショートカットキー(⌥⌘V)を実装しました。 返ってきた反応は「オリジナルのショートカットキーは覚えられない、だるい」。 そのとおりです。月に数回しか使わない機能のキーを覚えていられるわけがありません。

見えているものを押すだけに変えました。 解除中は画面の隅に小さな復帰ボタンが出ていて、押せば覆い直す。覚えることがゼロになります。 加えて、解除したまま忘れる事故に備えて5分で自動的に覆い直すようにしました。 ショートカットは残していますが、前面には出していません。

② メニューバーのアイコンが見えない

「メガネのアイコンが見当たらない」という指摘があって調べたところ、 常駐アイコンが33個あり、画面の幅を使い切っていました。 macOSは入りきらない項目を何の表示もなく隠します。 アプリ側からはどうにもできません。

これは直しようがないのですが、「アプリの入口がメニューバーだけ」という設計は危ういと分かりました。 ①の復帰ボタンを画面上に出す判断は、この件とも噛み合っています。

③ Liquid Glassの使い方を間違えていた

macOS 26の新しい意匠であるLiquid Glassを適用してみて、 時計を角丸のガラスカードに載せたところ、「角丸カード絶対にいらない。Liquid Glassのデザインじゃない」と即座に否定されました。

調べ直すと、そのとおりでした。Liquid Glassはボタンやツールバーなどコントロールのための素材であって、 コンテンツを板に載せるための装飾ではありません。 浮いているコントロールが背後のコンテンツを屈折させることで階層を表現する意匠なので、 主役のコンテンツ自身にガラスを敷くのは用法が逆になります。 ロック画面の時計は素のまま置くのが正解でした。

教訓: APIが使えることと、使ってよいことは別

新しい意匠が出ると、つい「対応した」と言いたくて広く適用しがちです。 でも意匠には成立する条件があって、それを外すと新しいAPIを使っているのに古臭く見えるという結果になります。 ガラスは下部のチップと復帰ボタンだけに限定して、この原則をコードのコメントに残しました。

自分のMacでしか動かない状態だったものを、汎用化して公開しました。無料です。

ri719/veil— ARグラス接続中、Mac本体の画面を時計で覆うメニューバー常駐アプリ。

汎用化して分かった「自分の環境への癒着」

公開用に直していると、自分の環境を前提にした作りがいくつも見つかりました。

元の実装何が問題か直し方
内蔵ディスプレイだけを覆う内蔵画面を持たないMac(mini・Studio)で何も起きないグラス以外の有効な画面を全部覆う形に一般化
グラスの名前を決め打ち他社製グラスで動かない設定可能に。空欄なら外部ディスプレイを自動採用
日本語のみ海外の人が使えない英語を既定にし、日本語環境で切り替え

面白かったのが、一般化したことでそれまで暗黙に成立していた前提が静かに壊れたことです。 「覆う対象=グラス以外」に変えた結果、グラスが繋がっていないときに手動でカバーを呼ぶと何も起きなくなりました。自動カバーは呼び出し側でグラスの有無を見ているので 問題ないのですが、メニューから明示的に押したときだけ無反応になる。 押したのに何も起きないのは操作として不可解なので、 グラスが無い場合は全画面を対象にするよう直しました。

同じ日に、Galaxy側で起きていた別の困りごと(ARグラスをつなぐと イヤホンの音が奪われる)を解決するアプリも作っています。そちらはARグラスをつなぐとイヤホンの音が奪われるに書きました。LE Audioとは何か、という話もそちらに入れてあります。

検証環境: MacBook Air(macOS 26)・Xreal One。 挙動はmacOSのバージョンや接続するARグラスによって変わる可能性があります。

PR

よくある質問

ARグラスを使うとき、Mac本体の画面だけを消すことはできますか?

macOSに標準の設定はありません。輝度を最低まで下げても完全には消えず、内容は読めてしまいます。クラムシェル(本体を閉じる)にすると本体画面は消えますが、キーボードとトラックパッドも使えなくなるため、作業しながらは使えません。

ミラーリングと拡張のどちらでも、本体画面に内容は出ますか?

どちらでも出ます。ミラーリングは同じ内容が両方に出ますし、拡張表示でも本体側は本体側で通常どおり表示され続けます。ARグラスを見ている間、本体のパネルは自分は見ていないのに周囲からは読める状態になります。

Veilは普段使いの外部モニターにも反応してしまいませんか?

対象にするディスプレイの表示名を指定できるようにしてあります(既定はARグラス側の名前)。名前が一致したときだけ動くので、デスクの外部モニターにつないでも通常どおり作業できます。

対応しているARグラスとMacを教えてください。

USB-Cで外部ディスプレイとして認識されるARグラス(XREAL・VITURE・Rokidなど)と、macOSを搭載したMacで動きます。内蔵画面を持たないMac(mini・Studio・Mac Pro)でも、ARグラス以外の接続中ディスプレイを覆う形で動作します。

本記事のデータについて

本記事の店舗数・分布などの数値は、当サイトが継続運営する全国セルフ写真館ディレクトリ (全国セルフ写真館 完全ガイド) の調査に基づく「GENICA調べ」の一次データです。出典として「セルフ写真館GENICA調べ (genica-photo.com)」と明記いただければ、メディア・ブログ・資料への引用を歓迎します。

ほかの記録


← 記録の一覧へ