「セキュア入力がオンです」:Comoji のアイコンに付く鍵の意味
Comoji は、Mac のすべてのアプリに Slack 風の :emoji: 補完を無料で追加します。
:fire と入力しても急に何も起きなくなって Comoji のメニューを開いたら、1 行目に セキュア入力がオンです と表示され、メニューバーのアイコンに小さな鍵が付いていた。そんな方のための説明がこのページです。要点を言うと、macOS が意図的に Comoji へのキー入力の受け渡しを止めていて、Comoji は黙っている代わりにそれを知らせています。ほとんどの場合、鍵は数秒で自然に消えます。ときどき解除されないまま残ることがあり、その場合は必ず効く方法がひとつあります。Mac からログアウトして、もう一度ログインすることです。詳しくは以下で説明します。鍵が表示されるのは私たちのアイコンなので、最初にはっきり言っておきます。これは Comoji のバグではなく、Apple のセキュアなテキスト入力のバグです。 Comoji は状態を伝えているだけで、それを引き起こすことも解除することもできません。

セキュア入力とは
セキュア入力は、Apple が「セキュアキーボード入力」やセキュアイベント入力とも呼ぶ、macOS のウインドウサーバのモードです。オンの間、キー入力はそれを要求した App にだけ届き、他には一切届きません。システム上のキーボードイベントタップはすべて止まります。絵文字の自動補完、テキスト展開ツール、クリップボードマネージャ、キーのリマップツール、スクリーンリーダーの入力読み上げ、そのすべてです。Safari に入力したパスワードを他のソフトウェアから見えないようにしているのがこの仕組みで、優れた設計です。
App はパスワード欄にフォーカスが移るとこれをオンにし、フォーカスが外れるとオフにします。ロック画面も、ロック解除の間はオンにします。ターミナルと iTerm2 には セキュアキーボード入力 というメニュー項目があり、そのウインドウが最前面にある間ずっとオンのままになります。パスワードマネージャは、ロック解除の入力画面の前後でオンにします。
Comoji が鍵を表示する理由
Comoji は、コロンのあとに数文字が続くのを検知して、カーソル位置に候補を表示する仕組みです。セキュア入力がオンだと、この検知部分には何も届かないので、何を入力してもポップアップは出ません。このリリースより前は、その沈黙が、Comoji の故障、使用中の App で無効になっている状態、権限の不足と見分けがつきませんでした。そのため、アプリを再起動したり、権限を付け直したり、問い合わせたりする方がいたのも無理はありません。現在は、セキュア入力がオンの間だけアイコンに鍵のバッジが付き、メニューの先頭項目にそれを保持している App の名前が表示されるので、謎だった状態が目に見えるようになりました。
このバッジは、Comoji が意図して行っていることを思い出させるものでもあります。Comoji はパスワード欄の中では決して補完しません。これはバッジができる前からそうでした。システムレベルのブロックに加えて、Comoji はフォーカスのある欄がセキュアテキストフィールドかどうかを確認し、そうであれば手を出しません。鍵の表示は動作の変更ではなく、見える情報が変わっただけです。
通常の場合:鍵は付いたり消えたりする
ブラウザでパスワード欄をクリックしてメニューバーを見てみてください。鍵が表示されます。ユーザ名の欄やページ本文をクリックすると消えます。セキュアキーボード入力を有効にしたターミナルを開くと、別の App に切り替えるかオプションをオフにするまで鍵は表示されたままです。どのケースでも問題は起きていません。メニュー項目はどの App が原因かを伝えているだけで、App が解除した瞬間に Comoji は動作を再開します。
解除されない場合:鍵が消えない
ごく普通の入力欄に入力しているのに鍵が消えないことや、すでに終了した App がセキュア入力を保持しているとメニューに表示されることがあります。画面のロックを解除して何分も経つのに loginwindow と表示されることもあります。これがセキュア入力が解除されない状態で、macOS のバグです。Comoji にも、表示されている App にも、外側から元に戻すことはできません。
Comoji にはセキュア入力をオンにする手段がありませんし、Comoji を含めどの App も、別の App に代わってそれをオフにすることはできません。キーボードを監視しているものはすべて同時に止まり、Comoji はそれを知らせる役目を担っているだけです。
何が起きているかを説明します。ウインドウサーバはプロセスごとにカウントを持っています。App がセキュア入力を有効にするたびにカウントが増え、無効にするたびに減り、すべての App のカウントがゼロに戻るまでセッションはセキュアモードのままです。有効にする回数が無効にする回数より多い App や、カウントが正のまま終了した App があると、ログインセッション全体がロックされたままになります。私たちは、パスワード欄を含むタブを復元したあとの Chrome がこれを起こすのを見ましたし、最近の macOS ビルドのロック画面が、1 回のロック解除で何度もセキュア入力を有効にして 1 回だけ無効にするのも見ました。他の App は、自分のものではないカウントを減らせません。それはセキュリティ上の保証が設計どおりに働いているということで、だからこそカウントが漏れたときにやっかいなのです。
解除の手順(手軽な順)
- Comoji のメニューで セキュア入力がオンです の下にある App 名を確認します(メニューバーのアイコンにポインタを重ねても確認できます)。ブラウザなら、そのブラウザで普通のテキスト欄をクリックするか、タブを切り替えます。それだけで解除されることがよくあります。
- ターミナルや iTerm2 なら、その App 自身のメニューを開いて セキュアキーボード入力 をオフにします。
- 表示されている App を
Command-Qで完全に終了して、もう一度開きます。終了時にカウントが正だった場合は鍵が残ることがあるので、次の手順に進んでください。 - 保持している App がすでに終了しているとメニューに表示される場合や、画面のロックを解除しているのに loginwindow と表示される場合は、アップルメニューから ログアウトしてもう一度ログイン します。ログアウトすると漏れたカウントを抱えたセッションが終了します。再起動でも直りますが、時間がかかります。ロックとロック解除のたびにまた漏れることがあるので、それまでは画面をロックしないでください。
前後の状態はターミナルで確認できます。1 つ目のコマンドはセッションが所有者として記録しているプロセスを表示し、2 つ目はその番号を名前に変換します:
ioreg -l -w 0 | grep -o '"kCGSSessionSecureInputPID"=[0-9]*'
ps -p <that number> -o comm=1 つ目のコマンドが何も出力しなければ、セキュア入力はオフで、Comoji は再びキー入力を受け取っています。ps で見つからないプロセスの番号が出てきたら、それこそが解除されない状態の典型です。
必ず効く方法:ログアウトしてもう一度ログイン
上の手順はどれも、効くこともある近道です。必ず効くのはログアウトです。漏れたカウントはログインセッションの中にあり、ログアウトするとそのセッションが終了するからです。作業を保存し、アップルメニューから ログアウト を選んで、もう一度サインインすれば鍵は消えています。Comoji はログイン項目とともに起動し、すぐに反応します。ここにたどり着くまでに、解除されない Chrome、解除されないロック画面、そして午前中いっぱいの試行錯誤が必要でした。原因の App が終了しても鍵が残っているなら、迷わずここから始めてください。完全な再起動でも同じ効果がありますが、時間がかかります。
Comoji ができること、できないこと
Comoji は 1 秒に 1 回このフラグを確認しています。測定できるほどの負荷はかからない問い合わせで、所有しているプロセスも ioreg と同じ方法で調べています。セキュア入力をオフにすることはできませんし、もしできたら深刻なセキュリティ上の問題です。鍵が付いている間に入力した内容も一切見えません。それがこのモードの存在意義そのものだからです。Comoji にできるのは、沈黙を故障のように見せないことと、どの App を確認すればよいかを伝えることです。
Comoji が持っている 2 つの権限で何をしているか気になる方は、セキュリティのページ でネットワーク通信の全体像と、それを担保するテストを公開しています。機能ページのセキュア入力の検出 はこの内容の短い版です。同じページでは App ごと、サイトごとのオフ設定も紹介していますが、それは鍵とは別物です。オフ設定はあなたが選ぶもので、鍵は macOS によるものです。
バッジがひとつ、メニューの項目が 1 行、そしてシステムの調子が悪いときはログインし直す。Comoji は、見当違いのものを責めさせるより、はっきり伝えるほうを選びます。
よくある質問
Comoji のメニューバーに鍵のアイコンが表示されるのはなぜですか?
鍵は macOS のセキュア入力がオンであることを示しています。キー入力はそれを要求した App にだけ届き、Comoji からは見えません。パスワード欄やロック画面にフォーカスがある間や、ターミナルでセキュアキーボード入力が有効な間に表示され、その App が解除するとすぐに消えます。「セキュア入力がオンです」のメニュー項目に、原因の App 名が表示されます。
Mac でセキュアキーボード入力をオフにするには?
ターミナルや iTerm2 では、App のメニューを開いてセキュアキーボード入力のチェックを外します。ブラウザやパスワードマネージャの場合は、パスワード以外の欄をクリックするか、App を終了します。原因の App を終了してもオンのままなら、macOS からログアウトしてもう一度ログインしてください。漏れた状態を抱えたセッションがリセットされます。
App を終了したのにセキュア入力がオンのままなのはなぜですか?
macOS のウインドウサーバはセキュア入力の要求をプロセスごとにカウントしていて、カウントが正のまま App が終了すると、誰も解除できないままセッションがロックされます。パスワード欄を含むタブを復元したあとの Chrome や、一部の macOS ビルドのロック画面でこれが起きることがわかっています。ログアウトしてもう一度ログインすれば解消します。
Comoji はパスワード欄で使えますか?
いいえ、意図的にそうしています。パスワード欄にフォーカスがある間、macOS はすべてのキーボード監視をブロックします。さらに Comoji は独自に、フォーカスのある欄がセキュアテキストフィールドかどうかを確認し、そうであれば手を出しません。鍵のバッジはそのシステムの状態を見えるようにして、ポップアップが出ないのを故障と勘違いしないようにするためのものです。
Mac 版 Comoji を無料でダウンロード
Slack や Discord と同じ :emoji: 補完を、Mac のどこでも。無料。