バナー「互換性のないディスク」を表示しない、またはそもそも出ないようにしたい.あるいは……

こちらで既に質問があったようですが、返信の期限が切れてしまったようなので再質問です.

https://discussionsjapan.apple.com/thread/252929231

【稼働環境】Mac mini 2018 / macOS 10.14.6 Mojave (外部SATA-SSDからの起動)


普段は外部SSDに入れた Mojave で運用していますが、新しい OS での運用試験のため「内蔵SSD」 に Monterey をインストールしました.その後 OS を Mojave に戻し起動すると上記画像のようなバナーが出ます.そのバナーが出ること自体は特に気にしないのですが、起動の度に手動でバナーを閉じなければならない点は気に入りません.せめて一定時間が経過すると消える仕様だと良いのですが…….重要な告知なので「自動でバナーが消えない」仕様とすることもわかるのですが、はっきり言って、見た目のうえでも機能のうえでもとても邪魔です.何とか「手間なく=自動で」消す、もしくはそもそも表示させない方法はないでしょうか.


今のところ考えられる対策は「内蔵 SSD でなく外部 SSD に Monterey を入れ、必要な時だけそのディスクから起動する」ことですが、うちの環境が悪いのか(ディスプレイ3枚)、内蔵 SSD のスピードをもってしても何やら動作が緩慢というのか動きがもっさりするので、それよりも低速なディスク(SATA-SSD)を起動・稼働に用いるのは少し心許ない気もしています(まだ試していませんが).


まず試したことと言えば、ログイン項目に Monterey の入っているディスク(うちの環境では「XXX-Data」と「Update」となっています)をアンマウントするアプリケーション(AppleScript)を登録して起動後に実行させることでした(アンマウント自体は成功しています).けれどこれは、システムが既にディスクを「互換性のないディスク」と認識してバナーを出した後に作動するようで意味がありませんでした.だとすると、たとえばシステム終了または再起動をフックする時に使う Objective-C の NSWorkspaceWillPowerOffNotification のように、起動をフックする似たような何かの機能があったとしても(調べた限り見つかりませんでしたが)同じ結果になりそうな気はします.


もうひとつ試したことは、バナーが表示された後(正確には「既にバナーが出された後」)に「通知センター.app」を終了させたことです.終了直後はたしかにバナーも消えるのですが、すぐに同アプリケーションが自動で起動し、また表示されてしまいます.結局この方法もダメでした.


……いやはやなかなかお手上げです.どうにかならないものでしょうか.


(付記) ターミナルからコマンドを入力して「そもそもバナーを出さない仕様」に変えることもできるようですが、敷居が高いというよりできればそういう手段は採りたくないため他の方法を探しています.

* 一部編集いたしました。 Apple Inc.

Mac mini, macOS 12.1

投稿日 2022/02/03 08:43

返信
スレッドに付いたマーク ランキングトップの返信

投稿日 2022/02/07 05:52

「通知」の「閉じる」ボタンを押すための最小限のコードはこんな感じでしょうか。(ボタンが2つあるタイプの通知で試したので若干違うかもしれません。ダメな場合は適宜書き換えてください)


tell application "System Events"
    tell application process "NotificationCenter"
        -- set frontmost to true
        tell window 1
            click button "閉じる"
        end tell
    end tell
end tell



いくつかの機能 (通知ウインドウが出現するまで待つなど) を追加するとこんな感じ。


on run
    try
        main()
    on error errs number errn
        tell me
            activate
            display alert "Error!" message errs as critical
        end tell
    end try
end run

on main()
    set notification_title to "互換性のないディスク"
    set close_button to "閉じる"
    --
    tell application "System Events"
        tell application process "NotificationCenter"
            set n to 0
            repeat while true
                if n > 30 then error "timed out"
                set _windows_ to windows whose static text 1's value is notification_title
                if _windows_'s length > 0 then
                    set _window_ to _windows_'s item 1
                    exit repeat
                else
                    delay 1
                    set n to n + 1
                end if
            end repeat

            -- set frontmost to true

            tell _window_
                click button close_button
            end tell
        end tell
    end tell
end main


で、Automator か AppleScript でアプレットを作成し、ログイン項目に登録すると良いと思います。


# システム環境設定の「セキュリティとプライバシー > アクセシビリティ」へ登録後にアプレットを編集すると、不許可となってしまうようです。なので、アプレットを編集した際は登録し直す必要があるみたいです。(めんどくさい...)


類似の質問

返信: 22

2022/03/29 06:18 Hiro__S への返信

お返事が遅れまして、すいません.別件で調べ物をしているうちに(といってもかなり近しい内容ではありますが)たまたま再びたどり着き、このページを確認した次第です.ひとまずご提示いただいたサンプルコードを実行してみると、すばらしいですね、正しく結果が得られています.ここからウインドウIDを取り出し、その値を元にウインドウを閉じることができると思っているので、試してみます.もっとも、確証はありませんが……

すいません.あまり時間がないもので、またあらためてお返事を書かせていただきます.

2022/02/04 06:07 Rondo_1 への返信

いわゆる GUI スクリプティングの類いでしょうか.それならたしかに何とかなるかもしれませんね.ただそこは心得がないので少し勉強することになりそうです.まあたしかに、エレガントでないという点は同意です.けれど良い情報をいただきました.ありがとうございます。できることならアップルの売りであるスマートさで解決したものですがね.

2022/02/06 02:19 Rondo_1 への返信

loginHook を使うのやら vi を使って /etc/fstab を編集・改変するのやらだとか、まあいろいろ調べたのですが、結局解決に至りませんでした.いやはや、知識不足を痛感します.もっと深く調べると解決方法も見えてくると思うのですが、現状では残念ながらなんとも…….

そう考えると提示していただいた Automator を使った方法が今のところの現実的な解だと思います.

2022/02/09 09:07 light289 への返信

お役に立てたようで何よりです。


> この仕様はどうにかならなかったのかと今でも思いますが、まあ、そういう仕様なので諦めるしかないですねぇ.


GUI スクリプティングはセキュリティと正反対のところにあるので、まあ、仕方ないとは思いますが、それにしても面倒ですよね。


このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

バナー「互換性のないディスク」を表示しない、またはそもそも出ないようにしたい.あるいは……

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。