Wat zijn LaunchAgents en LaunchDaemons op een Mac en welke kun je verwijderen
LaunchAgents en LaunchDaemons zijn mappen met kleine .plist-bestanden die launchd van macOS vertellen wat er op de achtergrond moet starten en wanneer. Een agent draait voor één ingelogde gebruiker en kan dingen op het scherm tonen; een daemon draait voor het hele systeem zonder gebruikersinterface. Meestal kun je de items van derden van een app die je niet meer hebt verwijderen. Blijf van /System/Library af en stop een taak voordat je het bestand verplaatst.
De vijf mappen
Apples launchd-handleiding noemt deze locaties:
| Map | Wat erin staat | Aanraken |
|---|---|---|
~/Library/LaunchAgents |
Agents van derden alleen voor jouw account | Ja, voorzichtig |
/Library/LaunchAgents |
Agents van derden voor alle gebruikers | Ja, met een beheerderswachtwoord |
/Library/LaunchDaemons |
Systeemdaemons van derden | Ja, met een beheerderswachtwoord |
/System/Library/LaunchAgents |
Apples agents | Nee |
/System/Library/LaunchDaemons |
Apples daemons | Nee |
De pagina man launchd trekt de grens: een daemon is een systeembrede service met één instantie voor alle clients en hoort geen gebruikersinterface te tonen. Een agent draait per gebruiker, en werk dat met een gebruiker communiceert hoort daar. In de praktijk is een hulpprogramma in de menubalk of een updater meestal een agent, en een vpn-service, een hulpprogramma voor een audiodriver of een back-upengine meestal een daemon.
Niet elk achtergrondonderdeel heeft hier een bestand. Apps kunnen hun plist in hun eigen bundel bewaren, dus Systeeminstellingen › Algemeen › Inlogonderdelen en extensies kan iets tonen wat deze mappen niet hebben. Zo stop je dat apps bij het opstarten openen behandelt dat scherm.
Lees er een voordat je oordeelt
ls -la ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons
plutil -p ~/Library/LaunchAgents/com.example.helper.plist
Vier sleutels vertellen het meeste van het verhaal:
| Sleutel | Wat het betekent |
|---|---|
Label |
De naam van de taak, die launchctl gebruikt |
Program of ProgramArguments |
Wat er draait. Dit is het pad dat je controleert |
RunAtLoad |
Het start zodra de taak wordt geladen, meestal bij het inloggen of opstarten |
KeepAlive |
launchd start het opnieuw als het stopt, dus afsluiten houdt niet stand |
com.example.helper hierboven is een plaatshouder, gebruik dus de naam van je eigen bestand. Als ProgramArguments wijst naar een app die je hebt verwijderd, is dat bestand een restant en kun je het veilig weghalen. Wijst het naar een app die je nog gebruikt, dan kan weghalen de updates, synchronisatie, licentie, vpn of audio van die app breken.
Zo verwijder je er een
Stop eerst de taak. Het bestand verplaatsen stopt een taak niet die al draait, en die blijft geladen tot je uitlogt of opnieuw opstart.
Voor een agent in je account:
launchctl bootout gui/$(id -u)/com.example.helper
mv ~/Library/LaunchAgents/com.example.helper.plist ~/.Trash/
Voor een daemon in /Library/LaunchDaemons:
sudo launchctl bootout system/com.example.helper
sudo mv /Library/LaunchDaemons/com.example.helper.plist ~/.Trash/
Een agent in /Library/LaunchAgents wordt in de sessie van elke gebruiker geladen, dus stop hem met de vorm gui/$(id -u)/ en verplaats het bestand met sudo mv. Gebruik in die commando's de waarde van Label, die kan afwijken van de bestandsnaam.
Controleer of hij weg is met launchctl print gui/$(id -u)/com.example.helper of sudo launchctl print system/com.example.helper, wat moet melden dat de service niet gevonden kon worden. Gebruik de app daarna een dag. Als er iets stuk is gegaan, zet je het bestand terug en start je opnieuw op.
Om het bestand te bewaren en alleen te voorkomen dat de taak laadt:
launchctl disable gui/$(id -u)/com.example.helper
launchctl print-disabled gui/$(id -u)
launchctl enable met hetzelfde doel draait het terug.
Wat je niet moet doen
- Blijf van
/System/Library/LaunchAgentsen/System/Library/LaunchDaemonsaf. Ze staan op het alleen-lezen systeemvolume en horen bij macOS. - Verwijder niet op bedrijfsnaam alleen. Een bestand dat is vernoemd naar een beveiligingsproduct of apparaatdriver kan de manier zijn waarop dat product blijft werken, en op een beheerde Mac kan het bedrijfsbeleid zijn.
- Haal de plist van een app die je nog gebruikt niet weg in de verwachting dat alleen de updatemelding verdwijnt. Kijk eerst naar de eigen instelling van de app.
- Gebruik geen oude handleidingen die
launchctl unloadnoemen. Apples handleiding noemt het een legacy-subcommando, enbootoutis de huidige vorm.
Waar Mole past
Het tabblad Apps van Mole heeft een segment Opstarten dat deze items toont, de eigen Label van elke plist leest en hulpprogramma's noemt naar de app die ze bezit. Het groepeert ze onder koppen zoals Inlogonderdelen en Achtergronddiensten, en markeert Programma ontbreekt wanneer een taak naar iets wijst dat niet meer bestaat, het gebruikelijke teken van een restant. Voor een gecontroleerde launchd-plist in ~/Library/LaunchAgents, /Library/LaunchAgents of /Library/LaunchDaemons kun je hem uitzetten met de schakelaar van de rij, weer aanzetten of naar de prullenmand verplaatsen, en Mole stopt eerst de taak. Beveiligings- en beheerproducten blijven vergrendeld, en items die het niet veilig kan wijzigen openen in plaats daarvan Systeeminstellingen. Als een proces in Status onbekend lijkt, noemt Waarom draait dit? de launchd-service en zijn plist. Een app verwijderen via Mole biedt ook de startitems ervan ter controle aan.
Veelgestelde vragen
Is het veilig om bestanden in LaunchAgents te verwijderen?
Ja voor een restant van een app die je hebt verwijderd, en soms nee voor een app die je nog gebruikt. Lees eerst ProgramArguments met plutil -p, en stop de taak met launchctl bootout voordat je het bestand naar de prullenmand verplaatst, zodat je het kunt terugzetten.
Wat is het verschil tussen een LaunchAgent en een LaunchDaemon?
Een agent draait voor elke ingelogde gebruiker en kan met die gebruiker communiceren. Een daemon draait systeembreed met één instantie, meestal voordat iemand inlogt, en heeft geen gebruikersinterface.
Waarom kwam een verwijderde LaunchAgent terug?
De app die hem installeerde staat nog op de Mac en heeft hem opnieuw geschreven toen hij weer openging of bijwerkte. Zet de functie uit in de app, of verwijder de app, want het bestand alleen weghalen houdt niet stand.
Kan een LaunchAgent malware zijn?
Ja. Hardnekkige adware installeert zich vaak hier, omdat ze een herstart overleeft. Een onbekende Label die iets uitvoert vanuit een verborgen map of een tijdelijk pad verdient een nadere blik: zoek op het exacte pad en controleer wie het programma heeft ondertekend.
Moet ik opnieuw opstarten na het verwijderen van een?
Niet als je launchctl bootout hebt gebruikt, want dat stopt de taak meteen. Als je alleen het bestand hebt verplaatst, blijft de taak geladen tot je uitlogt of opnieuw opstart.