←→ Underneath: Background Apps · Όλοι οι οδηγοί για Mac

Πώς να απενεργοποιήσετε με ασφάλεια launch agents σε ένα Mac

Η διαγραφή ενός .plist από το LaunchAgents είναι η συμβουλή που συναντάτε πιο συχνά. Είναι όμως και ο χειρότερος τρόπος: η εργασία συνεχίζει να εκτελείται μέχρι την επανεκκίνηση, και δεν μπορείτε να την αναιρέσετε. Δείτε τον ασφαλή, αναστρέψιμο τρόπο.

Σύντομη απάντηση: βρείτε την ετικέτα της εργασίας και εκτελέστε

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

Η πρώτη εντολή τη σταματά τώρα. Η δεύτερη την κρατά ανενεργή και μετά από επανεκκινήσεις. Το launchctl enable την αναιρεί.

Πριν ξεκινήσετε: μην αγγίζετε τίποτα στο /System/Library ούτε καμία ετικέτα που ξεκινά με com.apple.. Ανήκουν στο macOS. Αφήστε ήσυχα τα εργαλεία VPN, αντιγράφων ασφαλείας, ασφάλειας και προγραμμάτων οδήγησης, εκτός αν αφαιρείτε το εργαλείο.

Βήμα 1: Βρείτε την εργασία

Τα launch agents και daemons βρίσκονται σε τρεις φακέλους που επιτρέπεται να αλλάξετε:

Εμφανίστε τι είναι φορτωμένο τώρα, χωρίς τις εργασίες της ίδιας της Apple:

launchctl list | grep -v com.apple

Οι στήλες είναι αναγνωριστικό διεργασίας (- αν δεν εκτελείται), τελευταία κατάσταση εξόδου και ετικέτα. Χρειάζεστε την ετικέτα.

Βήμα 2: Ελέγξτε τι κάνει

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

Αν η διαδρομή του προγράμματος δείχνει σε εφαρμογή που διαγράψατε, η εργασία είναι υπόλειμμα και μπορείτε να την αφαιρέσετε με ασφάλεια. Αν είναι πρόγραμμα ενημέρωσης, η απενεργοποίησή του σημαίνει ότι η εφαρμογή δεν θα ενημερώνεται μόνη της.

Βήμα 3: Κρατήστε αντίγραφο ασφαλείας

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

Βήμα 4: Σταματήστε την τώρα

Για ένα agent (σε οποιονδήποτε από τους δύο φακέλους LaunchAgents):

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

Για ένα daemon στο /Library/LaunchDaemons:

sudo launchctl bootout system/com.example.label

Αυτό αποφορτώνει την εργασία και τερματίζει τη διεργασία της. Δεν διατηρείται μετά από επανεκκίνηση αν η εργασία έχει RunAtLoad.

Βήμα 5: Κρατήστε την ανενεργή

Διαλέξτε μία επιλογή.

Επιλογή Α: launchctl disable (συνιστάται)

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

Για ένα daemon: sudo launchctl disable system/com.example.label.

Το macOS αποθηκεύει την ετικέτα στη δική του λίστα απενεργοποιημένων, οπότε η εργασία μένει ανενεργή ακόμα κι αν η εφαρμογή γράψει ξανά το plist της. Ελέγξτε τη λίστα με:

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

Επιλογή Β: μετακινήστε το plist

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

Το launchd διαβάζει μόνο αρχεία απευθείας στον φάκελο LaunchAgents, όχι σε υποφακέλους, οπότε η εργασία δεν θα φορτωθεί στην επόμενη σύνδεση. Το αρχείο υπάρχει ακόμα αν το χρειαστείτε. Αν η εφαρμογή δημιουργήσει ξανά το plist, η εργασία επιστρέφει· η Επιλογή Α το αποφεύγει αυτό.

Επιλογή Γ: Ρυθμίσεις συστήματος

Πολλές εργασίες εμφανίζονται επίσης στις Ρυθμίσεις συστήματος › Γενικά › Στοιχεία σύνδεσης και επεκτάσεις › Να επιτρέπεται στο παρασκήνιο. Η απενεργοποίηση του διακόπτη εκεί λειτουργεί επίσης, αλλά ένας διακόπτης μπορεί να καλύπτει πολλές εργασίες του ίδιου προγραμματιστή. Δείτε τι σημαίνει το «Να επιτρέπεται στο παρασκήνιο».

Βήμα 6: Ελέγξτε ότι λειτούργησε

launchctl list | grep com.example.label

Αν δεν εμφανιστεί τίποτα, η εργασία δεν είναι φορτωμένη. Κάντε επανεκκίνηση και εκτελέστε την ξανά για σιγουριά.

Αναίρεση

Αν χρησιμοποιήσατε την Επιλογή Α:

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

Αν χρησιμοποιήσατε την Επιλογή Β, μετακινήστε το αρχείο πίσω και εκτελέστε την ίδια γραμμή bootstrap. Για daemons χρησιμοποιήστε sudo και system αντί για gui/$(id -u).

Παλιές εντολές που θα δείτε στο διαδίκτυο

Οι launchctl unload -w file.plist και launchctl load -w file.plist λειτουργούν ακόμα, αλλά η Apple τις χαρακτηρίζει παλαιού τύπου (legacy). Οι bootout, bootstrap, disable και enable είναι οι τρέχουσες και δίνουν σαφέστερα σφάλματα.

Συχνές ερωτήσεις

Είναι ασφαλές να διαγράψω αρχεία στο LaunchAgents;

Η απενεργοποίηση είναι ασφαλέστερη από τη διαγραφή. Η διαγραφή ενός plist δεν σταματά μια εργασία που έχει ήδη φορτωθεί, και χάνετε το αρχείο αν το χρειαστείτε ξανά. Χρησιμοποιήστε launchctl bootout και launchctl disable ή μετακινήστε το αρχείο σε φάκελο αντιγράφων ασφαλείας.

Να χρησιμοποιήσω το launchctl unload -w;

Λειτουργεί ακόμα, αλλά η Apple χαρακτηρίζει τα load και unload ως παλαιού τύπου (legacy). Στο τρέχον macOS χρησιμοποιήστε launchctl bootout για να σταματήσετε μια εργασία και launchctl disable για να την κρατήσετε ανενεργή.

Μπορώ να απενεργοποιήσω launch agents της Apple στο /System/Library;

Μην το κάνετε. Είναι μέρος του macOS, η Προστασία ακεραιότητας συστήματος (SIP) φυλάσσει τα αρχεία, και η απενεργοποίησή τους μπορεί να χαλάσει λειτουργίες όπως το iCloud, το Spotlight ή τις ενημερώσεις.

Πώς αναιρώ το launchctl disable;

Εκτελέστε launchctl enable gui/$(id -u)/<label>, έπειτα launchctl bootstrap gui/$(id -u) με τη διαδρομή του plist, ή αποσυνδεθείτε και συνδεθείτε ξανά.

Η εφαρμογή επανέφερε το launch agent της. Τι κάνω τώρα;

Χρησιμοποιήστε launchctl disable. Απενεργοποιεί την ετικέτα, οπότε η εργασία μένει ανενεργή ακόμα κι αν η εφαρμογή γράψει ξανά το plist. Απενεργοποιήστε επίσης τη ρύθμιση «Εκκίνηση κατά τη σύνδεση» της ίδιας της εφαρμογής.