Onde as variáveis ​​de ambiente do sistema são definidas no Mountain Lion?

46

No Lion (e versões anteriores), ele estava dentro .MacOSX/environment.plist. Após a atualização para 10.8, o arquivo ainda está lá, mas as variáveis ​​não estão sendo aceitas.

Eu também tentei adicioná-los /etc/launchd.confe eles aparecerão no Terminal, mas não nos aplicativos da GUI (como meu IDE).

Felix
fonte
Você reiniciou após a alteração /etc/launchd.conf?
nohillside
Eu fiz, e todas as variáveis ​​nele estão agora disponíveis em qualquer terminal, mas não estão presentes no meu IDE.
Felix
Talvez o IDE não exponha o ambiente para você (veja minha resposta )? Que IDE é esse? é iniciado diretamente pelo Finder ou Spotlight?
Halloleo

Respostas:

22

Também fiz essa pergunta nos fóruns de desenvolvedores da Apple e recebi de volta essa resposta oficial.

Altere o Info.plist do .app para conter um dicionário "LSEnvironment" com as variáveis ​​de ambiente que você deseja.
~ / .MacOSX / environment.plist não é mais suportado.

Felix
fonte
2
Onde está localizado?
Orome 12/12/12
Seria útil fornecer um link para um exemplo mais específico.
Blaisorblade 02/02
1
Atualização: tentei alterar esse arquivo, depois de descobrir a sintaxe (acho), mas não funciona para mim.
Blaisorblade 02/02
4
Haverá um Info.plist por aplicativo no WhatEver.app/Content/Info.plist. Você pode editá-lo com o XCode. Clique no "+" na lista de propriedades de informações e adicione um dicionário chamado LSEnvironment. Se você digitar corretamente, ele será renomeado para variáveis ​​de ambiente. Depois, clique no "+" correspondente a cada variável de ambiente que você deseja adicionar.
Felix
2
Esta é uma boa solução, mas não funciona mais a partir do Yosemite 10.10.5.
Dalmazio
21

Sei que essa é uma pergunta antiga, mas pensei em apontar que em Yosemite /etc/launchd.confnão funciona mais (conforme confirmado pela página de manual). Então aqui está uma alternativa.

Inicie o AppleScript Editor, digite um comando como este:

do shell script "launchctl setenv variablename value"

(adicione quantas linhas desejar)

Agora salve (⌘S) como formato de arquivo: Aplicativo . Por fim, abra Configurações do sistemaUsuários e gruposItens de login e adicione seu novo aplicativo.

ruario
fonte
Note-se que ele pode nem trabalhar com outros aplicativos que são abertos como itens de Login e talvez aqueles que você abrir rapidamente após o login
user151019
Isso funcionou para mim. Muito obrigado. Isso tem enlouquecido o dia todo!
wholladay
2
Parece a única solução real e universal até agora. Mas precisa de mais 9 votos positivos para subir e se tornar a primeira resposta. : c
Sarge Borsch
Isso funcionou para mim no El Capitan. Conforme observado acima pelo @Mark, há problemas com a encomenda (por exemplo, aplicativos retomados podem ou não ter o ambiente), mas uma vez logado, isso funciona como seria de esperar. Ou seja, os aplicativos iniciados no Spotlight ou no Dock têm o ambiente correto.
Alec Thomas
@ Mark Você pode tentar esta resposta , utilizando o Launch Agent. No meu caso, o Launch Agent inicia após os Itens de Login, então movo o aplicativo de destino (como Eclipse) do Item de Login para o Launch Agent, para que eles sejam iniciados após este aplicativo especial definindo variáveis ​​de ambiente.
Franklin Yu
10

Como você descobriu, o uso do arquivo environment.plist não é mais seguido, as variáveis ​​armazenadas no Info.plist como strings LSEnvironment são definidas apenas pelo launchd .

Você não pode depender deles para definir uma variável de ambiente geral que o terminal definirá se você chamar seu programa diretamente do terminal / shell. A boa notícia é que o open -acomando aciona o launchd para fazer o lançamento; portanto, as variáveis ​​serão definidas de forma consistente no ambiente do aplicativo, se não no ambiente do shell local.

bmike
fonte
4

Definir as variáveis ​​de ambiente /etc/launchd.confé o caminho a seguir: todo aplicativo iniciado após uma reinicialização por shells locais, o Finder ou o Spotlight herda essas variáveis ​​- testei isso extensivamente com o Mountain Lion 10.8.3.

2 advertências:

halloleo
fonte
1
/etc/launchd.confnão é mais suportado desde Yosemite. Veja apple.stackexchange.com/questions/106355/…
Franklin Yu
3

Tente launchctl setenv NAME VALUE. Não sei se / o que faz de maneira diferente da edição do launchd.conf, mas funciona para mim nos aplicativos Terminal e GUI. Mais detalhes.

Observe que isso não sobrevive durante uma reinicialização. Aqui está uma maneira de consertar isso .

ryan
fonte
3
Essa é uma página bastante longa para a qual você está vinculando aqui. Onde exatamente é a parte relevante? Você poderia incluí-lo diretamente em sua resposta para facilitar a todos?
nohillside
2
oops, bom ponto, pensei que eu tinha incluído mais um fragmento nesse URL. fixo.
ryan
1
A maneira de sobreviver através de uma reinicialização lá mencionado usa o environment.plist que parou de funcionar sob Lion
user151019