¿Cómo impedir que una aplicación se inicie al iniciar sesión?

5

He creado una aplicación, que se configura para iniciarse al iniciar sesión usando SMLoginItemSetEnabled . Aquí es 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", o /Library/LaunchAgents , o /Library/LaunchDaemons o en las carpetas /Users/username/Library/LaunchAgents o /Users/username/Library/LaunchDaemons . Miré a mi alrededor en /Library/Preferences y PreferecePanes , pero no encontré nada. La aplicación se carga al iniciar sesión.

    
pregunta Tarandeep Gill 12.02.2013 - 02:42

5 respuestas

2

Debería poder detener y eliminar el helper de launchd desde la línea de comandos. Abre Terminal.app y hazlo

launchctl list | grep -i com.your.helper

Mire una vez que haya localizado la etiqueta de trabajo 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í / a>

    
respondido por el forquare 26.05.2015 - 09:29
0

Y si lo agregaste con un ayudante, como dijiste, entonces deberías poder verlo en el plist (creo).

Echa un vistazo a 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: enlace

    
respondido por el Martin Marconcini 12.02.2013 - 02:51
0

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 & Grupos - > su cuenta de usuario en la barra lateral - > Pestaña de elementos de inicio de sesión.

    
respondido por el Gordon Davisson 12.02.2013 - 03:49
0
  

Si elimino la aplicación (incluso cuando no se está ejecutando), puedo moverla a la Papelera, pero cuando intento vaciar la Papelera, no se eliminará la Aplicación.

Cuando esté en la papelera, reinicie el mac en modo de usuario único (iniciar mientras mantiene cmd + s ): esto se abrirá en una ventana de Terminal, ejecute

sudo rm -Rf ~/.Trash/*

y presione ingresar , luego reinicie normalmente.

    
respondido por el LexS 26.05.2015 - 14:50
0

Puedes detener el inicio del elemento con launchctl disable gui/$UID/bundle-id .

Si no conoce el ID del paquete, puede encontrarlo escribiendo launchctl list . Eso mostrará una lista de los procesos todos 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 com.example.ExampleDaemon . Entonces:

launchctl disable gui/$UID/com.example.ExampleDaemon

Eso es todo. Hay es todavía un registro del elemento de inicio de sesión en el disco, simplemente desactivado. Si desea purgarlo, o simplemente desea obtener más información, siga leyendo.

Contraintuitivamente (¿pero divertido?), 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í, false significa que una aplicación con esa id. de paquete debería debe iniciarse al inicio. Después de ejecutar launchctl disable , false cambiará a true . (Por lo que sé, 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 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 se está ejecutando se sobrescribirá cuando apague / reinicie. Así que, por lo que puedo decir, la única forma de eliminar por completo un elemento de disabled.$UID.plist es reiniciar en modo de usuario único y realizar las modificaciones allí. Incluso sin haber ejecutado launchctl disable , la eliminación de un par key / false 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.

    
respondido por el s4y 31.07.2017 - 03:25

Lea otras preguntas en las etiquetas