Cosa sono LaunchAgents e LaunchDaemons su Mac e quali si possono rimuovere
LaunchAgents e LaunchDaemons sono cartelle di piccoli file .plist che dicono a launchd di macOS cosa avviare in background e quando. Un agent gira per un singolo utente connesso e può mostrare cose a schermo; un daemon gira per l'intero sistema, senza interfaccia utente. Di solito puoi rimuovere gli elementi di terze parti di un'app che non hai più. Lascia stare /System/Library e ferma un job prima di spostare il suo file.
Le cinque cartelle
La guida a launchd di Apple elenca queste posizioni:
| Cartella | Cosa contiene | Si può toccare |
|---|---|---|
~/Library/LaunchAgents |
Agent di terze parti solo per il tuo account | Sì, con attenzione |
/Library/LaunchAgents |
Agent di terze parti per tutti gli utenti | Sì, con la password da amministratore |
/Library/LaunchDaemons |
Daemon di sistema di terze parti | Sì, con la password da amministratore |
/System/Library/LaunchAgents |
Gli agent di Apple | No |
/System/Library/LaunchDaemons |
I daemon di Apple | No |
La pagina man launchd traccia il confine: un daemon è un servizio di sistema con una sola istanza per tutti i client e non dovrebbe mostrare un'interfaccia utente. Un agent gira per utente, e il lavoro che interagisce con un utente va lì. In pratica, un helper della barra dei menu o un programma di aggiornamento tende a essere un agent, mentre un servizio VPN, l'helper di un driver audio o un motore di backup tende a essere un daemon.
Non ogni elemento in background ha un file qui. Le app possono tenere il proprio plist dentro il loro bundle, quindi Impostazioni di Sistema › Generali › Elementi login ed estensioni può elencare qualcosa che queste cartelle non contengono. Come impedire alle app di aprirsi all'avvio tratta quella schermata.
Leggine uno prima di giudicarlo
ls -la ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons
plutil -p ~/Library/LaunchAgents/com.example.helper.plist
Quattro chiavi raccontano quasi tutta la storia:
| Chiave | Cosa significa |
|---|---|
Label |
Il nome del job, quello che usa launchctl |
Program o ProgramArguments |
Cosa esegue. È il percorso da controllare |
RunAtLoad |
Parte appena il job viene caricato, di solito al login o all'avvio |
KeepAlive |
launchd lo riavvia se si ferma, quindi chiuderlo non dura |
com.example.helper qui sopra è un segnaposto, quindi usa il nome del tuo file. Se ProgramArguments punta a un'app che hai rimosso, quel file è un residuo e si può togliere senza rischi. Se punta a un'app che usi ancora, rimuoverlo può rompere gli aggiornamenti, la sincronizzazione, la licenza, la VPN o l'audio di quell'app.
Come rimuoverne uno
Ferma prima il job. Spostare il file non ferma un job già in esecuzione, che resta caricato fino al logout o al riavvio.
Per un agent nel tuo account:
launchctl bootout gui/$(id -u)/com.example.helper
mv ~/Library/LaunchAgents/com.example.helper.plist ~/.Trash/
Per un daemon in /Library/LaunchDaemons:
sudo launchctl bootout system/com.example.helper
sudo mv /Library/LaunchDaemons/com.example.helper.plist ~/.Trash/
Un agent in /Library/LaunchAgents si carica nella sessione di ogni utente, quindi fermalo con la forma gui/$(id -u)/ e sposta il file con sudo mv. In quei comandi usa il valore di Label, che può essere diverso dal nome del file.
Conferma che sia sparito con launchctl print gui/$(id -u)/com.example.helper o sudo launchctl print system/com.example.helper, che dovrebbe riferire che il servizio non è stato trovato. Poi usa l'app per un giorno. Se qualcosa si è rotto, rimetti il file al suo posto e riavvia.
Per tenere il file e impedire solo che il job si carichi:
launchctl disable gui/$(id -u)/com.example.helper
launchctl print-disabled gui/$(id -u)
launchctl enable con lo stesso target lo annulla.
Cosa non fare
- Non toccare
/System/Library/LaunchAgentso/System/Library/LaunchDaemons. Stanno sul volume di sistema di sola lettura e appartengono a macOS. - Non eliminare in base al solo nome dell'azienda. Un file con il nome di un prodotto di sicurezza o di un driver può essere il modo in cui quel prodotto continua a funzionare, e su un Mac gestito può essere una politica aziendale.
- Non rimuovere il plist di un'app che usi ancora aspettandoti che sparisca solo la notifica di aggiornamento. Controlla prima l'impostazione dell'app stessa.
- Non usare vecchie guide che dicono
launchctl unload. Il manuale di Apple lo elenca come sottocomando legacy, ebootoutè la forma attuale.
Dove entra Mole
La scheda App di Mole ha un segmento Avvio che elenca questi elementi, legge il Label di ogni plist e dà agli helper il nome dell'app a cui appartengono. Li raggruppa sotto titoli come Elementi login e Servizi in background, e segnala Programma assente quando un job punta a qualcosa che non esiste più, il segno consueto di un residuo. Per un plist launchd controllato in ~/Library/LaunchAgents, /Library/LaunchAgents o /Library/LaunchDaemons, puoi disattivarlo con l'interruttore della riga, riattivarlo o spostarlo nel Cestino, e Mole ferma prima il job. I prodotti di sicurezza e di gestione restano bloccati, e gli elementi che non può modificare in sicurezza aprono invece Impostazioni di Sistema. Quando un processo in Stato ti sembra sconosciuto, Perché è in esecuzione? indica il servizio launchd e il suo plist. Anche disinstallare un'app con Mole propone i suoi elementi di avvio da rivedere.
Domande frequenti
È sicuro eliminare i file in LaunchAgents?
Sì per il residuo di un'app che hai rimosso, e a volte no per un'app che usi ancora. Leggi prima ProgramArguments con plutil -p, e ferma il job con launchctl bootout prima di spostare il file nel Cestino, così puoi rimetterlo al suo posto.
Qual è la differenza tra un LaunchAgent e un LaunchDaemon?
Un agent gira per ogni utente connesso e può interagire con quell'utente. Un daemon gira a livello di sistema con una sola istanza, di solito prima che qualcuno acceda, e non ha interfaccia utente.
Perché un LaunchAgent rimosso è tornato?
L'app che lo ha installato è ancora sul Mac e lo ha riscritto alla successiva apertura o al successivo aggiornamento. Disattiva la funzione nell'app, o disinstalla l'app, perché rimuovere solo il file non dura.
Un LaunchAgent può essere un malware?
Sì. L'adware persistente si installa spesso qui, perché sopravvive al riavvio. Un Label sconosciuto che esegue qualcosa da una cartella nascosta o da un percorso temporaneo merita un esame più attento: cerca il percorso esatto e controlla chi ha firmato il programma.
Devo riavviare dopo averne rimosso uno?
Non se hai usato launchctl bootout, che lo ferma subito. Se hai solo spostato il file, il job resta caricato finché non esci dalla sessione o riavvii.