Configuración de variables de entorno en OS X para aplicaciones GUI

Configuración de variables de entorno en OS X para aplicaciones GUI

¿Cómo se configuran las variables de entorno en Mac OS X de modo que estén disponibles para aplicaciones GUI sin usar?~/.MacOSX/environment.plistoGanchos de inicio de sesión(ya que estos sonobsoleto)?

Respuesta1

¡En Mountain Lion todo el proceso /etc/pathsy /etc/launchd.confla edición no tienen ningún efecto!

Los foros de desarrolladores de Apple dicen:

"Cambie la lista de información de la aplicación .app para que contenga un diccionario"LSEnvironment" con las variables de entorno que desee.

~/.MacOSX/environment.plist ya no es compatible."

Así que edité directamente las aplicaciones Info.plist(haga clic derecho en "AppName.app" (en este caso SourceTree) y luego en " Show package contents")

Mostrar el contenido del paquete

y agregó un nuevo par clave/dict llamado:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(ver:Documentación de LaunchServicesKeys en Apple)

ingrese la descripción de la imagen aquí

ahora la aplicación (en mi caso SourceTree) usa la ruta proporcionada y funciona con git 1.9.3 :-)

PD: Por supuesto, debe ajustar la entrada Ruta a sus necesidades de ruta específicas.

Respuesta2

La solución utiliza la funcionalidad de launchctl, combinada con unAgente de lanzamientopara imitar los ganchos de inicio de sesión de antaño. Para otras soluciones usando la tienda de launchd, consulteesta comparación. El agente de lanzamiento utilizado aquí se encuentra en/Biblioteca/Agents de lanzamiento/:

<?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>user.conf.launchd</string>
    <key>Program</key>
    <string>/Users/Shared/conflaunchd.sh</string>
    <key>ProgramArguments</key>
    <array>
        <string>~/.conf.launchd</string>
    </array>
    <key>EnableGlobbing</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
    <key>LimitLoadToSessionType</key>
    <array>
        <string>Aqua</string>
        <string>StandardIO</string>
    </array>
</dict>
</plist>

Una cosa importante es laEjecutar al cargarclave para que el agente de lanzamiento se ejecute lo antes posible. El verdadero trabajo se realiza en el script de shell./Usuarios/Compartido/conflaunchd.sh, que dice~/.conf.launchdy lo alimenta a launchctl:

#! /bin/bash

#filename="$1"
filename="$HOME/.conf.launchd"

if [ ! -r "$filename" ]; then
    exit
fi

eval $(/usr/libexec/path_helper -s)

while read line; do
    # skip lines that only contain whitespace or a comment
    if [ ! -n "$line" -o `expr "$line" : '#'` -gt 0 ]; then continue; fi

    eval launchctl $line
done <"$filename"

exit 0

Note el llamado de path_helperobtenerCAMINOconfigurado correctamente. Finalmente,~/.conf.launchdtiene este aspecto

setenv PATH ~/Applications:"${PATH}"

setenv TEXINPUTS .:~/Documents/texmf//:
setenv BIBINPUTS .:~/Documents/texmf/bibtex//:
setenv BSTINPUTS .:~/Documents/texmf/bibtex//:

# Locale
setenv LANG en_US.UTF-8

Estos son launchctlcomandos; consulte su página de manual para obtener más información. Funciona bien para mí (debo mencionar que todavía soy un tipo de Snow Leopard), aplicaciones GUI comoestudio de textoyTeXShopPuedo ver mi propio árbol de tex. Cosas que se pueden mejorar:

  1. El script de shell tiene un #filename="$1". Esto no es accidental, ya que el agente de lanzamiento debe introducir el nombre del archivo en el script como argumento, pero eso no funciona.

  2. Como se mencionóaquí(¡Alemán y detrás de un muro de pago!), es posible colocar el script en el propio agente de lanzamiento.

  3. No estoy seguro de qué tan segura es esta solución, ya que se utiliza evalcon cadenas proporcionadas por el usuario.

  4. Creo recordar que la definición de MANPATH usando este método no funcionó bien, pero no estoy seguro.

Cabe mencionar que Apple pretendía un enfoque algo similar al poner cosas en∼/launchd.conf, pero actualmente no es compatible con esta fecha y sistema operativo (consulte la página de manual de launchd.conf). Supongo que cosas como el globbing no funcionarían como lo hacen en esta propuesta. Y, por supuesto, uno puede colocar estos archivos en cualquier otro lugar, excepto en el agente de lanzamiento, que debe residir en/Biblioteca/Agents de lanzamiento/o~/Biblioteca/Agents de lanzamiento/.

Finalmente, debo mencionar las fuentes que utilicé como información sobre Launch Agents: 1,2,3,4.

Actualizar: Esto no funciona en la versión 10.8 por el momento. Se describen soluciones alternativas por aplicación.aquíyaquí.

Respuesta3

La respuesta proporcionada por @flori me funciona en Maverick siempre que ejecute los siguientes comandos en la Terminal después de cambiar el archivo plist

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user 

killall Finder

Respuesta4

Otra opción es utilizar /etc/launchd.conf. Por ejemplo, cambié el valor predeterminado PATHagregando esta línea a /etc/launchd.conf:

setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin

Puede aplicar cambios /etc/launchd.confreiniciando o ejecutando launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf, finalizando y reiniciando procesos.

La configuración se /etc/launchd.confaplica tanto al proceso de inicio raíz como a los procesos de inicio por usuario. Las variables de entorno configuradas con setenvin /etc/launchd.confse muestran mediante sudo launchctl exporty launchctl export.

información relacionada