Creé una aplicación, que se configura para iniciarse al iniciar sesión usando SMLoginItemSetEnabled
. Aquí está el código que utiliza. Mi pregunta es, ¿cómo puedo eliminar manualmente esta aplicación para que no se inicie al iniciar sesión ?
La aplicación no se muestra en "Elementos de inicio de sesión", /Library/LaunchAgents
ni /Library/LaunchDaemons
en las carpetas /Users/username/Library/LaunchAgents
o . /Users/username/Library/LaunchDaemons
Miré alrededor en /Library/Preferences
y PreferecePanes
, pero no encontré nada. La aplicación se carga al iniciar sesión.
Puede detener el lanzamiento del elemento con .launchctl disable gui/$UID/bundle-id
Si no conoce el ID del paquete, puede encontrarlo escribiendo launchctl list
. Eso enumerará todos los procesos que se ejecutan bajo su usuario, con sus PID en la primera columna. Entonces, si viste esto:
$ launchctl list
- 0 com.apple.SafariHistoryServiceAgent
277 0 com.apple.Finder
- 0 com.apple.quicklook
- 0 com.apple.parentalcontrols.check
[…]
189 0 com.example.ExampleDaemon
- 0 com.apple.java.InstallOnDemand
… podría usar el Monitor de actividad para confirmar que el PID de la aplicación no deseada es 189, lo que hace que su ID de paquete sea com.example.ExampleDaemon
. Entonces:
launchctl disable gui/$UID/com.example.ExampleDaemon
Eso es todo. Todavía hay un registro del elemento de inicio de sesión en el disco, simplemente deshabilitado. Si desea purgarlo, o simplemente desea obtener más información, siga leyendo.
Contrariamente a la intuición (¿pero divertidamente?), la lista se guarda aquí:
/var/db/com.apple.xpc.launchd/disabled.$UID.plist
Ese archivo se verá así:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.example.ExampleDaemon</key>
<false/>
</dict>
</plist>
Sí, significa que se debefalse
iniciar una aplicación con esa identificación de paquete al inicio. Después de ejecutar , cambiará a . (Por lo que puedo decir, launchd no escribe estos archivos de inmediato, por lo que es posible que no vea esto hasta que reinicie). Puede ver los elementos deshabilitados con este comando:launchctl disable
false
true
launchctl print-disabled gui/$UID
También hay información adicional sobre cada elemento de inicio de sesión almacenado aquí, pero eliminarlo no detendrá el inicio del elemento:
/var/db/com.apple.xpc.launchd/loginitems.$UID.plist
Cualquier cambio que realice mientras el sistema está funcionando se sobrescribirá cuando apague o reinicie. Entonces, por lo que puedo decir, la única forma de eliminar completamente un elemento disabled.$UID.plist
es reiniciar en modo de usuario único y realizar las ediciones allí. Incluso sin haber ejecutado launchctl disable
, la eliminación de un key
/ false
par de este archivo impide que la aplicación se inicie al iniciar sesión. No voy a incluir instrucciones para editar estos archivos en modo de usuario único en esta respuesta.
Debería poder detener y eliminar el ayudante desde launchd
la línea de comandos. Abra Terminal.app y haga
launchctl list | grep -i com.your.helper
Mire una vez que haya ubicado job_label en la tercera columna, puede ejecutar
sudo launchctl stop com.your.helper
sudo launchctl remove com.your.helper
El manual para launchctl
se puede encontrar aquí
Y si lo agregó con un ayudante, como dijo, entonces debería poder verlo en el plist (creo).
Mira esto:
-(BOOL)appIsPresentInLoginItems
{
NSString *bundleID = @"com.madebynotion.myLoginHelper";
NSArray * jobDicts = nil;
jobDicts = (NSArray *)SMCopyAllJobDictionaries( kSMDomainUserLaunchd );
// Note: Sandbox issue when using SMJobCopyDictionary()
if ( (jobDicts != nil) && [jobDicts count] > 0 ) {
BOOL bOnDemand = NO;
for ( NSDictionary * job in jobDicts ) {
if ( [bundleID isEqualToString:[job objectForKey:@"Label"]] ) {
bOnDemand = [[job objectForKey:@"OnDemand"] boolValue];
break;
}
}
CFRelease((CFDictionaryRef)jobDicts); jobDicts = nil;
return bOnDemand;
}
return NO;
}
fuente: http://blog.mcohen.me/2012/01/12/login-items-in-the-sandbox/
Los elementos de inicio de sesión se almacenan en ~/Library/Preferences/com.apple.loginitems.plist, y se pueden administrar manualmente en Preferencias del sistema -> Usuarios y grupos -> su cuenta de usuario en la barra lateral -> pestaña Elementos de inicio de sesión.
~/Library/Preferences/com.apple.loginitems.plist
!Si elimino la aplicación (incluso cuando no se está ejecutando), puedo moverla a la Papelera, pero cuando intento vaciar la Papelera, no se elimina la aplicación.
Cuando esté en la papelera, reinicie la mac en modo de usuario único (comience mientras mantiene presionado cmd+ s): esto se abrirá en una ventana de Terminal, ejecute
sudo rm -Rf ~/.Trash/*
y presione enter, luego reinicie normalmente.
Martín Marconcini
branquia tarandepep
Klaas
Klaas