←→ Underneath: Background Apps · すべてのMacガイド

MacのLaunchAgentを安全に無効にする方法

よく見かけるアドバイスは、.plistをLaunchAgentsから削除することです。しかしそれは最悪の方法です。ジョブは再起動するまで動き続け、しかも元に戻せません。ここでは安全で、元に戻せる方法を紹介します。

結論:ジョブのラベルを調べて、次を実行します

launchctl bootout gui/$(id -u)/com.example.label
launchctl disable gui/$(id -u)/com.example.label

1つ目のコマンドでいますぐ停止します。2つ目のコマンドで再起動後もオフのままにします。元に戻すにはlaunchctl enableを使います。

始める前に:/System/Library内のものや、com.apple.で始まるラベルには触らないでください。これらはmacOSのものです。VPN、バックアップ、セキュリティ、ドライバのツールは、そのツールを削除する場合を除き、そのままにしておいてください。

ステップ1:ジョブを見つける

LaunchAgentとLaunchDaemonは、変更してもよい次の3つのフォルダにあります:

Apple自身のジョブを除いて、いま読み込まれているものを一覧表示します:

launchctl list | grep -v com.apple

列はプロセスID(実行中でなければ-)、最後の終了ステータス、ラベルです。必要なのはラベルです。

ステップ2:何をしているか確認する

plutil -p ~/Library/LaunchAgents/com.example.label.plist

プログラムのパスが削除済みのアプリを指しているなら、そのジョブは残り物で、削除しても安全です。アップデータの場合、無効にするとアプリは自動でアップデートされなくなります。

ステップ3:バックアップする

mkdir -p ~/LaunchAgents-backup
cp ~/Library/LaunchAgents/com.example.label.plist ~/LaunchAgents-backup/

ステップ4:いますぐ停止する

エージェントの場合(どちらのLaunchAgentsフォルダでも):

launchctl bootout gui/$(id -u)/com.example.label

/Library/LaunchDaemons内のデーモンの場合:

sudo launchctl bootout system/com.example.label

これでジョブの読み込みが解除され、プロセスが終了します。ただしこの状態は再起動後には続きません(ジョブにRunAtLoadがある場合)。

ステップ5:オフのままにする

次のどれか1つを選びます。

オプションA:launchctl disable(推奨)

launchctl disable gui/$(id -u)/com.example.label

デーモンの場合:sudo launchctl disable system/com.example.label

macOSはラベルを独自の無効リストに保存するので、アプリがplistを書き直してもジョブはオフのままです。リストは次のコマンドで確認できます:

launchctl print-disabled gui/$(id -u)

オプションB:plistを移動する

mkdir -p ~/Library/LaunchAgents/Disabled
mv ~/Library/LaunchAgents/com.example.label.plist ~/Library/LaunchAgents/Disabled/

launchdが読むのはLaunchAgentsフォルダ直下のファイルだけで、サブフォルダは読まないので、次回ログイン時にジョブは読み込まれません。ファイルは残っているので、必要なときに使えます。アプリがplistを作り直すとジョブは戻ってきます。オプションAならそれを防げます。

オプションC:システム設定

多くのジョブはシステム設定 › 一般 › ログイン項目と機能拡張 › バックグラウンドでの実行を許可にも表示されます。そこでスイッチをオフにしても効果がありますが、1つのスイッチが同じ開発元の複数のジョブをまとめて制御していることがあります。「バックグラウンドでの実行を許可」とはをご覧ください。

ステップ6:うまくいったか確認する

launchctl list | grep com.example.label

何も出力されなければ、読み込まれていません。念のため、再起動してからもう一度実行してください。

元に戻す

オプションAを使った場合:

launchctl enable gui/$(id -u)/com.example.label
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.label.plist

オプションBを使った場合は、ファイルを元に戻して同じbootstrapの行を実行します。デーモンの場合は、sudoを付け、systemをgui/$(id -u)の代わりに使います。

ネットでよく見る古いコマンド

launchctl unload -w file.plistとlaunchctl load -w file.plistはまだ動作しますが、Appleはこれらをレガシーとしています。現在のコマンドはbootout、bootstrap、disable、enableで、エラーもよりわかりやすくなっています。

よくある質問

LaunchAgents内のファイルを削除しても安全ですか?

削除するより無効にするほうが安全です。plistを削除しても、すでに読み込まれているジョブは止まりません。また、あとで必要になってもファイルは失われています。launchctl bootoutとlaunchctl disableを使うか、ファイルをバックアップフォルダに移動してください。

launchctl unload -wを使うべきですか?

まだ動作しますが、Appleはloadとunloadをレガシーとしています。現在のmacOSでは、ジョブの停止にlaunchctl bootout、オフのままにするにはlaunchctl disableを使ってください。

/System/LibraryにあるAppleのLaunchAgentを無効にできますか?

やめてください。これらはmacOSの一部で、ファイルはシステム整合性保護で守られています。無効にすると、iCloud、Spotlight、アップデートなどの機能が動かなくなることがあります。

launchctl disableを元に戻すには?

launchctl enable gui/$(id -u)/<label>を実行し、次にplistのパスを指定してlaunchctl bootstrap gui/$(id -u)を実行します。または、いったんログアウトしてログインし直します。

アプリがLaunchAgentを元に戻してしまいました。どうすればいいですか?

launchctl disableを使ってください。これはラベル自体を無効にするので、アプリがplistを書き直してもオフのままです。あわせて、アプリ自体の「ログイン時に起動」の設定もオフにしてください。