←→ Underneath: Background Apps · Všechny návody pro Mac

Jak na Macu bezpečně vypnout spouštěcí agenty

Nejčastější rada zní: smažte .plist z LaunchAgents. Je to ale také nejhorší způsob: úloha běží dál až do restartu a smazání nejde vrátit. Tady je bezpečný a vratný postup.

Stručná odpověď: najděte štítek úlohy a spusťte

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

První příkaz ji zastaví hned. Druhý zajistí, že zůstane vypnutá i po restartech. launchctl enable to vrátí.

Než začnete: nesahejte na nic v /System/Library ani na žádný štítek, který začíná na com.apple.. Ty patří macOS. VPN, zálohovací, bezpečnostní nástroje a ovladače nechte na pokoji, pokud daný nástroj neodinstalováváte.

Krok 1: Najděte úlohu

Spouštěcí agenti a démoni jsou ve třech složkách, které smíte měnit:

Vypište, co je teď načtené, bez vlastních úloh Apple:

launchctl list | grep -v com.apple

Sloupce jsou ID procesu (-, pokud neběží), poslední návratový kód a štítek. Potřebujete štítek.

Krok 2: Ověřte, co dělá

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

Pokud cesta k programu vede k aplikaci, kterou jste smazali, je úloha pozůstatek a můžete ji bezpečně odstranit. Pokud jde o aktualizátor, po vypnutí se aplikace nebude sama aktualizovat.

Krok 3: Zálohujte ji

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

Krok 4: Zastavte ji hned

Pro agenta (v kterékoli složce LaunchAgents):

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

Pro démona v /Library/LaunchDaemons:

sudo launchctl bootout system/com.example.label

Tím se úloha uvolní a její proces skončí. Restart to nepřežije, pokud má úloha RunAtLoad.

Krok 5: Nechte ji vypnutou

Vyberte jednu možnost.

Možnost A: launchctl disable (doporučeno)

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

Pro démona: sudo launchctl disable system/com.example.label.

macOS uloží štítek do vlastního seznamu vypnutých, takže úloha zůstane vypnutá, i když aplikace svůj plist znovu zapíše. Seznam zkontrolujete takto:

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

Možnost B: přesuňte plist jinam

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

launchd čte jen soubory přímo ve složce LaunchAgents, ne v podsložkách, takže se úloha při příštím přihlášení nenačte. Soubor tam pořád je, kdybyste ho potřebovali. Pokud aplikace plist vytvoří znovu, úloha se vrátí; možnost A tomu předejde.

Možnost C: Nastavení systému

Mnoho úloh se zobrazuje také v Nastavení systému › Obecné › Položky otevírané po přihlášení a rozšíření › Povolit na pozadí. Vypnutí přepínače tam funguje také, ale jeden přepínač může zahrnovat několik úloh od stejného vývojáře. Viz co znamená „Povolit na pozadí“.

Krok 6: Ověřte, že to zabralo

launchctl list | grep com.example.label

Žádný výstup znamená, že úloha není načtená. Pro jistotu Mac restartujte a příkaz spusťte znovu.

Vrácení změn

Pokud jste použili možnost A:

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

Pokud jste použili možnost B, přesuňte soubor zpět a spusťte stejný řádek s bootstrap. U démonů použijte sudo a system místo gui/$(id -u).

Staré příkazy, na které narazíte na internetu

launchctl unload -w file.plist a launchctl load -w file.plist pořád fungují, ale Apple je označuje jako zastaralé. bootout, bootstrap, disable a enable jsou současné příkazy a mají srozumitelnější chybové zprávy.

FAQ

Je bezpečné mazat soubory v LaunchAgents?

Bezpečnější je vypnout než smazat. Smazání plistu nezastaví úlohu, která je už načtená, a když soubor budete znovu potřebovat, přijdete o něj. Použijte launchctl bootout a launchctl disable, nebo soubor přesuňte do záložní složky.

Mám použít launchctl unload -w?

Pořád funguje, ale Apple označuje load a unload jako zastaralé. V současném macOS použijte launchctl bootout k zastavení úlohy a launchctl disable, aby zůstala vypnutá.

Můžu vypnout spouštěcí agenty Apple v /System/Library?

Nedělejte to. Jsou součástí macOS, soubory chrání System Integrity Protection a jejich vypnutí může rozbít funkce jako iCloud, Spotlight nebo aktualizace.

Jak vrátit launchctl disable?

Spusťte launchctl enable gui/$(id -u)/<label>, potom launchctl bootstrap gui/$(id -u) s cestou k plistu, nebo se odhlaste a znovu přihlaste.

Aplikace vrátila svého spouštěcího agenta. Co teď?

Použijte launchctl disable. Vypne samotný štítek, takže úloha zůstane vypnutá, i když aplikace plist znovu zapíše. Vypněte také vlastní nastavení aplikace „Spouštět po přihlášení“.