¿Cómo controlar el orden de los elementos de inicio para los usuarios al iniciar sesión?

He visto algunas aplicaciones con críticas mixtas que permitirán a un usuario cambiar el orden de los elementos de inicio. Simplemente preferiría el método "bare metal" y seguiría usando el shell o el editor Open Directory/netinfo para hacer esto. Me doy cuenta de que esto no se controla a través de launchd, ¿cuál es el mecanismo y dónde está la ubicación de preferencia para la definición de inicio de la aplicación?

Descubrí que el proceso de restauración de la aplicación/ventana de OS X es menos que mediocre y necesito garantizar que ciertas aplicaciones se inicien primero antes que otras (como ScreenRecycler, ya que necesito que las aplicaciones se abran en la otra pantalla cuando se encienden).

FYI, hasta ahora, y no estoy contento con esta solución, pero salté y compré un programa que maneja esto por mí. No mencionaré el nombre hasta ahora hasta que pueda obtener alguna información aquí o si alguien quiere una recomendación, ya que no quiero que me vean publicando un anuncio. Hasta ahora funciona bien, pero preferiría una solución que coincida con mi solicitud inicial y que pueda modificar los servicios de inicio correctamente sin tener que depender de una muleta de una aplicación que se encuentra en el inicio y solo habilita el inicio de la aplicación (aunque debo decir que el los retrasos de tiempo y las adiciones de dependencia de este pequeño tonto son hábiles).
Solo pedimos que las personas divulguen cualquier relación con un programa que recomienden (y que no sea la única razón por la que participa en el sitio). Las recomendaciones honestas están bien siempre y cuando estén en el tema y no parezcan un reportaje nocturno.

Respuestas (2)

Si está utilizando un script de shell para abrir aplicaciones, intente algo como esto:

osascript -e 'launch app "ScreenRecycler"'
pgrep -qx Alfred||open -jga Alfred
sleep 10
pgrep -qx Mail||open -jga Mail
pgrep -qx Transmission||open -jga Transmission

Puede ejecutar el script al iniciar sesión, por ejemplo, guardando el plist a continuación como ~/Library/LaunchAgents/some.label.plist.

<?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>Label</key>
  <string>some.label</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-c</string>
    <string>osascript -e 'launch app "ScreenRecycler"'
pgrep -qx Alfred||open -jga Alfred
sleep 10
pgrep -qx Mail||open -jga Mail
pgrep -qx Transmission||open -jga Transmission</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

osascript -e 'launch app "AppName"y osascript -e 'activate app "AppName"quedan bloqueados hasta que la aplicación termine de abrirse. launchno hace una aplicación al frente, pero activatelo hace. Si una aplicación como TextEdit o Mail no se está ejecutando, launchabra activateuna nueva ventana predeterminada visible. osascript -e 'tell app "TextEdit"' -e reopen -e activate -e endtambién vuelve a abrir una ventana predeterminada si TextEdit se está ejecutando pero no tiene ventanas abiertas.

open -jgnormalmente abre una aplicación oculta ( -j) y sin ponerla al frente ( -g). Para algunas aplicaciones como TextEdit y Mail, abre una nueva ventana visible si la aplicación se está ejecutando pero no tiene ventanas abiertas. Para evitar eso, verifique si la aplicación ya se está ejecutando con, por ejemplo pgrep, . La -jopción para opense agregó en 10.8 y solo se muestra en el mensaje de ayuda y no en la página de manual.

lsappinfo launch launchandhide=true nofront=true /Applications/TextEdit.apptambién siempre abre TextEdit oculto y sin ponerlo al frente. lsappinfose agregó en 10.9. No sé cómo usar lsappinfopara esperar hasta que una aplicación termine de abrirse.

La configuración de los elementos de inicio de sesión se almacena en archivos ~/Library/Preferences/com.apple.loginitems.plist. Puede agregar un elemento de inicio de sesión con AppleScript:

osascript -e 'tell application "System Events" to make new login item at end with properties {path:"/Applications/TextEdit.app", name:"TextEdit", hidden:true}'

Algunas aplicaciones y procesos se inician a través de listas de propiedades en ~/Library/LaunchAgents/, /Library/LaunchAgents/o /Library/LaunchDaemons/. _com.apple.SMLoginItemBookmarksin /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plistse usa para configurar elementos de inicio de sesión para aplicaciones auxiliares utilizadas por aplicaciones de espacio aislado como ScreenFlow, DayOne y TuneUp.

Desde 10.7 ha habido un retraso relativamente largo antes de que se inicien algunos elementos de inicio de sesión o trabajos de lanzamiento. No conozco ninguna forma de reducirlo, pero las preguntas frecuentes de KeyRemap4MacBook dicen que es causado por Resume:

KeyRemap4MacBook no funciona después del arranque en OS X 10.7. ¿Qué tengo que hacer?

La función "Reanudar" introducida por Lion retrasa el lanzamiento de aplicaciones al iniciar sesión.

Hasta que se inicie KeyRemap4MacBook.app al iniciar sesión, la distribución del teclado no cambiará. Espere un minuto hasta que se muestre el menú de KeyRemap4MacBook.

Esta es, con mucho, la forma más fácil de secuenciar los programas de inicio en lugar de colocarlos todos en la preferencia de inicio o dejar que el sistema operativo los restaure automáticamente. Debería desenterrar un enlace sobre cómo evitar la apertura automática y luego esta podría ser una gran plantilla para cualquiera que no le gusten las decisiones de dependencia y el algoritmo de carga de launchd.

Entonces, dado que no he visto ninguna recomendación, continuaré y presentaré la respuesta con la que he avanzado hasta ahora.

La solución hasta ahora para mí ha sido Startupizer . Obviamente, no es óptimo, ya que es una solución paga y no es un método que esté directamente disponible desde el sistema operativo, pero funciona y me ha permitido crear condiciones de dependencia y varios otros retrasos en el pedido que ha sido útil y cumplido. mis necesidades.

Espero que esto ayude a alguien y ciertamente espero que alguien recomiende una solución más integral del sistema operativo pronto.

No es probable que haya ningún pedido de Apple. Prefieren lanzar y dejar que el sistema decida en qué orden / qué tan rápido lanzar elementos como parte del diseño de ese subsistema. Las cosas no necesariamente comenzarán en el mismo orden en cada arranque.