←→ Underneath: Background Apps · Wszystkie poradniki dla Maca

Jak bezpiecznie wyłączyć agenty uruchamiania na Macu

Najczęstsza rada to usunąć plik .plist z LaunchAgents. To także najgorszy sposób: zadanie działa dalej aż do ponownego uruchomienia, a usunięcia nie da się cofnąć. Oto bezpieczny i odwracalny sposób.

Krótka odpowiedź: znajdź etykietę zadania, a potem wykonaj

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

Pierwsze polecenie zatrzymuje je teraz. Drugie sprawia, że pozostaje wyłączone po ponownych uruchomieniach. launchctl enable to cofa.

Zanim zaczniesz: nie ruszaj niczego w /System/Library ani żadnej etykiety zaczynającej się od com.apple.. Należą do macOS. Zostaw w spokoju VPN, narzędzia do kopii zapasowych, zabezpieczeń i sterowniki, chyba że odinstalowujesz dane narzędzie.

Krok 1: Znajdź zadanie

Agenty i demony uruchamiania znajdują się w trzech folderach, które możesz zmieniać:

Wyświetl to, co jest teraz załadowane, bez zadań samego Apple:

launchctl list | grep -v com.apple

Kolumny to identyfikator procesu (-, jeśli nie działa), ostatni kod wyjścia i etykieta. Potrzebujesz etykiety.

Krok 2: Sprawdź, co robi

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

Jeśli ścieżka programu prowadzi do aplikacji, którą usunąłeś, zadanie jest pozostałością i można je bezpiecznie usunąć. Jeśli to program aktualizujący, po wyłączeniu aplikacja nie będzie sama się uaktualniać.

Krok 3: Zrób kopię zapasową

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

Krok 4: Zatrzymaj je teraz

Dla agenta (w dowolnym folderze LaunchAgents):

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

Dla demona w /Library/LaunchDaemons:

sudo launchctl bootout system/com.example.label

To wyładowuje zadanie i kończy jego proces. To nie przetrwa ponownego uruchomienia, jeśli zadanie ma RunAtLoad.

Krok 5: Utrzymaj je wyłączone

Wybierz jedną opcję.

Opcja A: launchctl disable (zalecana)

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

Dla demona: sudo launchctl disable system/com.example.label.

macOS zapisuje etykietę na własnej liście wyłączonych, więc zadanie pozostaje wyłączone, nawet jeśli aplikacja znowu zapisze swój plik plist. Sprawdź listę poleceniem:

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

Opcja B: przenieś plik plist w inne miejsce

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

launchd czyta tylko pliki leżące bezpośrednio w folderze LaunchAgents, a nie w podfolderach, więc przy następnym logowaniu zadanie się nie załaduje. Plik nadal istnieje, gdyby był Ci potrzebny. Jeśli aplikacja ponownie utworzy plik plist, zadanie wróci; opcja A tego unika.

Opcja C: Ustawienia systemowe

Wiele zadań widać też w Ustawieniach systemowych › Ogólne › Rzeczy otwierane podczas logowania i rozszerzenia › Pozwalaj w tle. Wyłączenie tam przełącznika też działa, ale jeden przełącznik może obejmować kilka zadań tego samego dewelopera. Zobacz, co oznacza „Pozwalaj w tle”.

Krok 6: Sprawdź, czy zadziałało

launchctl list | grep com.example.label

Brak wyniku oznacza, że zadanie nie jest załadowane. Dla pewności uruchom Maca ponownie i wykonaj polecenie jeszcze raz.

Cofanie

Jeśli użyłeś opcji A:

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

Jeśli użyłeś opcji B, przenieś plik z powrotem i wykonaj ten sam wiersz z bootstrap. W przypadku demonów użyj sudo i system zamiast gui/$(id -u).

Stare polecenia, które spotkasz w internecie

launchctl unload -w file.plist i launchctl load -w file.plist nadal działają, ale Apple nazywa je przestarzałymi. bootout, bootstrap, disable i enable to aktualne polecenia i dają czytelniejsze komunikaty o błędach.

FAQ

Czy usuwanie plików z LaunchAgents jest bezpieczne?

Bezpieczniej jest wyłączyć niż usunąć. Usunięcie pliku plist nie zatrzymuje już załadowanego zadania, a jeśli plik będzie Ci potrzebny, stracisz go. Użyj launchctl bootout i launchctl disable albo przenieś plik do folderu z kopią zapasową.

Czy używać launchctl unload -w?

Nadal działa, ale Apple oznacza load i unload jako przestarzałe. W aktualnym macOS używaj launchctl bootout, aby zatrzymać zadanie, i launchctl disable, aby pozostało wyłączone.

Czy mogę wyłączyć agenty uruchamiania Apple w /System/Library?

Nie rób tego. Są częścią macOS, pliki chroni System Integrity Protection, a ich wyłączenie może zepsuć funkcje takie jak iCloud, Spotlight czy uaktualnienia.

Jak cofnąć launchctl disable?

Wykonaj launchctl enable gui/$(id -u)/<label>, a potem launchctl bootstrap gui/$(id -u) ze ścieżką do pliku plist albo wyloguj się i zaloguj ponownie.

Aplikacja przywróciła swojego agenta uruchamiania. Co teraz?

Użyj launchctl disable. Wyłącza ono etykietę, więc zadanie pozostaje wyłączone, nawet jeśli aplikacja znowu zapisze plik plist. Wyłącz też własne ustawienie aplikacji „Uruchamiaj podczas logowania”.