Gestire programmi avvio automatico macOS con launchctl
launchctl è lo strumento integrato in macOS per controllare i processi gestiti da launchd, il sistema che avvia servizi, agenti e demoni in automatico. Il comando permette di vedere quali elementi sono attivi, leggere i dettagli dei singoli processi e individuare i file .plist che ne definiscono l’avvio. Per gestire programmi avvio automatico macOS è importante distinguere tra elementi caricati da launchd, applicazioni presenti in “Elementi login” e processi in background autorizzati dalle versioni recenti del sistema. Le operazioni più invasive richiedono prudenza e, in alcuni casi, privilegi amministrativi.
Cosa controlla davvero launchctl su macOS
launchctl gestisce i lavori di launchd, cioè servizi eseguiti in background senza una normale finestra applicativa. Questi lavori possono appartenere all’utente corrente, all’interfaccia grafica, al sistema oppure a software installati da applicazioni di terze parti.
Gli elementi di avvio automatico di macOS sono generalmente descritti da file con estensione .plist, archiviati in cartelle diverse in base al loro livello di esecuzione:
~/Library/LaunchAgentscontiene gli agenti avviati per l’utente corrente./Library/LaunchAgentscontiene agenti disponibili per gli utenti del Mac./Library/LaunchDaemonscontiene demoni di sistema eseguiti senza interfaccia grafica./System/Library/LaunchAgentscontiene componenti forniti da macOS./System/Library/LaunchDaemonscontiene demoni Apple protetti dal sistema.
Un file .plist presente in una di queste cartelle non indica necessariamente che il processo sia attivo in quel momento. launchd può caricare il lavoro soltanto quando serve, quando un’applicazione lo richiede o quando si verifica un evento definito nel file di configurazione.
macOS Ventura e versioni successive mostrano inoltre molti elementi in Impostazioni di Sistema > Generali > Elementi login. Quella schermata non coincide completamente con l’elenco di launchctl, perché comprende anche applicazioni aperte al login e attività in background gestite dal sistema.
Come visualizzare i programmi caricati con launchctl
Il comando più rapido per vedere i lavori caricati nel contesto dell’utente è il seguente:
launchctl list
L’output presenta normalmente tre colonne: identificativo del processo, codice di uscita e nome del servizio. Un trattino nella colonna del processo significa che il lavoro è caricato ma non sta eseguendo in quel preciso momento; un numero indica invece un processo attivo.
Per esaminare i lavori collegati alla sessione grafica dell’utente, usa:
launchctl print gui/$(id -u)
$(id -u) restituisce l’identificativo numerico dell’utente attualmente collegato. Il dominio gui/UID è particolarmente utile per gli agenti che interagiscono con il desktop, mentre user/UID identifica il dominio utente più generale:
launchctl print user/$(id -u)
I servizi di sistema appartengono al dominio system e possono essere consultati con:
sudo launchctl print system
L’uso di sudo è necessario soltanto per leggere o amministrare alcuni elementi del dominio di sistema. Non è consigliabile usare sudo con i comandi destinati al dominio grafico dell’utente, perché si rischia di interrogare il contesto dell’utente root invece della propria sessione.
Per cercare rapidamente un nome specifico nell’elenco, puoi combinare launchctl con grep:
launchctl list | grep -i nomeprogramma
Il risultato non è una prova assoluta che un’applicazione si avvii al login: mostra soltanto i lavori caricati nel dominio interrogato. Un agente configurato per essere avviato su richiesta può non comparire come processo in esecuzione.
Come trovare i file plist che avviano i programmi
Per elencare i file di configurazione presenti nelle cartelle più comuni, esegui:
find ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons -maxdepth 1 -type f -name '*.plist' -print 2>/dev/null
Il comando esclude le cartelle protette di macOS e può richiedere sudo per visualizzare tutti i file presenti in /Library/LaunchDaemons:
sudo find /Library/LaunchAgents /Library/LaunchDaemons -maxdepth 1 -type f -name '*.plist' -print
Per leggere il contenuto di un file .plist in una forma comprensibile, utilizza plutil:
plutil -p ~/Library/LaunchAgents/com.esempio.servizio.plist
Nel file sono particolarmente importanti le chiavi seguenti:
Labelidentifica il nome del lavoro registrato dalaunchd.ProgramoProgramArgumentsindica il programma o il comando da eseguire.RunAtLoadsegnala se il lavoro deve essere avviato quando viene caricato.KeepAlivepuò ordinare alaunchddi mantenerlo attivo o riavviarlo.StartIntervaleStartCalendarIntervaldefiniscono avvii periodici.WatchPathseQueueDirectoriescollegano l’avvio alla modifica di file o cartelle.
Il valore RunAtLoad impostato su true è un indizio importante, ma non è l’unico modo con cui un servizio può partire automaticamente. Anche KeepAlive, eventi di sistema e richieste provenienti da altre applicazioni possono causare l’avvio.
Dopo aver individuato il valore Label, puoi stampare i dettagli del singolo lavoro:
launchctl print gui/$(id -u)/com.esempio.servizio
Se il servizio appartiene al dominio utente ma non all’interfaccia grafica, prova:
launchctl print user/$(id -u)/com.esempio.servizio
Un errore come “Could not find service” indica generalmente che il lavoro non è caricato in quel dominio, non necessariamente che il file .plist sia assente.
Come disattivare o ricaricare un agente con cautela
Per gestire programmi avvio automatico macOS, è preferibile intervenire prima sull’applicazione che ha installato l’agente. Molti software offrono infatti un’opzione interna per disabilitare l’avvio, evitando modifiche manuali ai file di sistema.
Per rimuovere temporaneamente un agente dell’utente dalla sessione corrente, il comando moderno è bootout. Il percorso deve corrispondere esattamente al file .plist:
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.esempio.servizio.plist
Per caricare nuovamente lo stesso agente nella sessione grafica:
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.esempio.servizio.plist
Questi comandi modificano lo stato del lavoro caricato, ma non cancellano il file .plist. Un nuovo login, un riavvio o il meccanismo di caricamento dell’applicazione potrebbero quindi registrare nuovamente il servizio.
Per un demone installato a livello di sistema, il dominio e il percorso cambiano:
sudo launchctl bootout system /Library/LaunchDaemons/com.esempio.servizio.plist
Non modificare o rimuovere file dentro /System/Library/LaunchAgents e /System/Library/LaunchDaemons: sono componenti di macOS e possono essere protetti da System Integrity Protection. Disabilitare un demone Apple può causare malfunzionamenti, impedire l’avvio di funzioni integrate o generare errori dopo un aggiornamento.
Per controllare se un servizio è stato marcato come disabilitato, puoi interrogare lo stato del dominio:
launchctl print-disabled user/$(id -u)
La sintassi e il contenuto dell’output possono variare tra le versioni di macOS. Prima di intervenire, annota il percorso originale del file, il nome del servizio e l’applicazione che lo ha installato.
Quando l’obiettivo è soltanto impedire l’apertura di un’app al login, usa anche Impostazioni di Sistema > Generali > Elementi login. In macOS, questa schermata è il metodo più sicuro per gestire le applicazioni visibili all’utente, mentre launchctl è più adatto per analizzare agenti e demoni tecnici.
Potrebbe interessarti anche:
- Cos'è un Computer, Come Funziona e quali sono i suoi componenti principali
- Windows lento: cosa fare quando il PC diventa inutilizzabile
- Il Notebook Acer Che Sta Rivoluzionando il Mercato: Potenza, Stile e Prezzo Imbattibile!
- Domina il Tuo Gameplay: Sblocca le Massime Prestazioni su Windows!
FAQ
No. launchctl list mostra i lavori caricati nel dominio interrogato. Gli elementi login, le estensioni e alcuni processi in background possono essere gestiti da componenti diversi.
Leggi le chiavi Program, ProgramArguments e Label con plutil -p. Il percorso del programma o degli argomenti indica normalmente il software responsabile.
È possibile, ma non è la scelta più sicura. Prima disattiva l’agente, crea una copia del file e verifica quale applicazione lo ha installato; non eliminare componenti presenti nelle cartelle di sistema.
bootout rimuove il lavoro dalla sessione corrente, ma non cancella il file .plist. L’applicazione proprietaria o un nuovo accesso a macOS può caricarlo di nuovo.
Un LaunchAgent opera nel contesto di un utente e può interagire con la sessione grafica. Un LaunchDaemon opera a livello di sistema e normalmente non dispone di un’interfaccia visibile.
Altri articoli di questa serie:
- Mostrare file nascosti macOS Terminale: comando rapido
- Disattivare riapertura finestre macOS: metodo rapido
- Personalizzare anteprime icone Finder con defaults
- Percorso completo Finder macOS nella barra del titolo
- Disattivare DS_Store unità di rete Mac: metodo rapido
- Ricerca metadati Spotlight Terminale con mdls e mdfind
- Ricostruire indice Spotlight macOS Terminale
- Controllare consumo energetico Mac Terminale con powermetrics
- Trovare i processi che rallentano il Mac da Terminale
- Controllare la pressione memoria macOS Terminale
- Come misurare l’avvio lento delle app su Mac
- Leggere log macOS da Terminale: comandi utili
- Rapporto processi bloccati macOS spindump: come crearlo
- Verificare firma applicazioni macOS Terminale
- Permessi privacy delle app Mac: come controllarli
- Creare servizio launchd macOS per attività periodiche
- Confrontare cartelle macOS Terminale con diff
- Rinominare file in massa su macOS dal Terminale
- Proteggere file sensibili su macOS dal Terminale
