(EDITADO EL 06/02/2023 : El título anterior era Las variables establecidas con launchctl setenv no forman parte del entorno en Mac OS 12 )
Soy un usuario diario de Linux y decidí probar Mac recientemente. Tengo un Macbook pro 13" principios de 2015 que actualmente ejecuta MacOS Monterey (12.6.3).
Estoy luchando desde hace unos días para configurar SSH_AUTH_SOCK variable de entorno para toda mi sesión
Me basé en el siguiente archivo plist en $HOME/Library/LaunchAgents/
:
<?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>com.mooltipass.mc-agent</string>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/mc-agent.log</string>
<key>StandardErrorPath</key>
<string>/tmp/mc-agent.err</string>
<key>Debug</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/opt/local/bin/mc-agent</string>
<string>-n</string>
<string>--address=/tmp/moolticute-ssh-agent.sock</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>AUTH_SSH_SOCK</key>
<string>/tmp/moolticute-ssh-agent.sock</string>
<key>TOTO</key>
<string>test</string>
</dict>
</dict>
</plist>
A continuación, activo el agente mediante launchctl bootstrap gui/501/com.moolticute.mc-agent
(o algo parecido, no recuerdo bien) y reiniciar mi sesión.
El binario mc-agent
está funcionando como se esperaba pero:
- cuando compruebo
SSH_AUTH_SOCK
todavía contiene el valor por defecto, no el que ha sido suplantado por mi script. - cuando corro
virt-manager
(que hacen uso de esta variable) desde el Launchpad, obviamente no tiene el valor correcto. - cuando corro
launchctl getenv SSH_AUTH_SOCK
el valor de la variable es el esperado.
¿me he perdido algo?
06/02/2023 : EDICIÓN PARA ACLARACIONES
Después de la primera respuesta, que es correcta pero no satisface mis necesidades, me di cuenta de que mi pregunta no era lo suficientemente clara.
Al final, quiero imitar el comportamiento de regular ssh-agent
. En la instalación de MacOS sin procesar, ssh-agent
se lanza utilizando un plist
al iniciar la sesión GUI, fuera de cualquier shell.
Quiero que mi agente se ejecute al inicio de la sesión GUI y que la variable de entorno se establezca para toda la sesión, dentro o fuera del shell.
El objetivo es, cuando lance virt-manager
(que es una aplicación gráfica) directamente desde el finder o launchpad, no se genera ningún shell para lanzarla, virt-manager
no heredará la variable establecida en mi .zshenv
o .bashrc
¿Verdad? Esto es lo mismo supongo que para cualquier IDE con conectividad git.
Por ejemplo, en Linux, esto se conseguiría modificando Xsession
para su DM favorito o utilizando el modo de inicio heredado para xsession
y estableciendo un .xinitrd o .Xsession. Entonces, cada variable establecida de esta manera será heredada por cualquier aplicación lanzada desde el gestor de ventanas como parte de su entorno.
He leído este fin de semana varios métodos para hacerlo con launchctl
/ launchd
pero parece que todos ellos dejaron de funcionar en versiones posteriores de MacOS...