Como defino o PATH ou outras variáveis ​​de ambiente para que os aplicativos X possam acessá-lo?


16

Como posso definir variáveis ​​env para que o KDE as reconheça?

Como você define o caminho em um ambiente não shell (KDE)?

Diferente das duas perguntas acima, quero saber como fazer isso no GNOME. Ou, melhor ainda, existe um método independente do gerenciador de janelas. Para o shell / terminal, eu costumo editar ~/.bashrc. Onde posso colocar instruções de exportação para que variáveis ​​de ambiente estejam disponíveis para todos os aplicativos X, independentemente do gerenciador de janelas usado?

Respostas:


12

O módulo PAM pam_env permite que você os defina dentro /etc/environmentou dentro ~/.pam_environment, dependendo se você deseja para todos os usuários (em todo o sistema) ou apenas para o usuário (em toda a sessão).

Variáveis ​​de ambiente em todo o sistema

As configurações de variáveis ​​de ambiente que afetam o sistema como um todo (e não apenas um usuário específico) não devem ser colocadas em nenhum dos muitos scripts em nível de sistema que são executados quando o sistema ou a sessão da área de trabalho são carregados, mas em

/etc/environment- Este arquivo é destinado especificamente para configurações de variáveis ​​de ambiente em todo o sistema. Não é um arquivo de script, mas consiste em expressões de atribuição, uma por linha. Especificamente, esse arquivo armazena as configurações de local e de caminho em todo o sistema.

Variáveis ​​de ambiente para toda a sessão

As configurações de variáveis ​​de ambiente que devem afetar apenas um usuário específico (em vez do sistema como um todo) devem ser definidas em:

~/.pam_environment- Este arquivo é especificamente destinado à configuração do ambiente de um usuário. Não é um arquivo de script, mas consiste em expressões de atribuição, uma por linha.

Nota: O uso .pam_environmentrequer um novo login para inicializar as variáveis. Reiniciar apenas o terminal não é suficiente para poder usar as variáveis.

Veja mais no wiki do Ubuntu sobre Variáveis ​​de Ambiente .


2
O problema com a ~/.pam_environmentsolução é que, por padrão, o módulo pam_env não o lê, a menos que a distribuição o configure de outra forma. No Fedora 20, não é lido, por exemplo.
Cristian Ciupitu

@CristianCiupitu está certo. ~/.xsessioncarregará variáveis ​​de ambiente para aplicativos X. Veja unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek

@CristianCiupitu: Muito obrigado pelo seu comentário, que me levou a pam_env. Atualizei meus arquivos pam do Fedora 24 para ativar o ambiente do usuário. Agora, todas as minhas sessões em Wayland têm um PATH personalizado novamente.
Zan Lynx

@CristianCiupitu isso é verdade? A documentação linux-pam.org/Linux-PAM-html/sag-pam_env.html implica que ~ / .pam_environment é o arquivo padrão a ser lido, a menos que seja especificado de outra forma. Veja a linha user_envfile=filename. Meu problema com o pam_env é que a variável HOME pode não estar disponível, dependendo do aplicativo PAM. O que limita seu uso a apenas variáveis ​​absolutas.
CMCDragonkai

2
@CMCDragonkai, a página de manual pam_env (8) do Fedora costumava dizer: " Por padrão, esta opção está desativada, pois as variáveis ​​de ambiente fornecidas pelo usuário no ambiente PAM podem afetar o comportamento dos módulos subseqüentes na pilha sem o consentimento do administrador do sistema" . Portanto, enquanto o módulo PAM upstream possui algumas configurações padrão, algumas distribuições os substituem.
Cristian Ciupitu 21/09/16

1

/etc/X11/Xsession.d/... ou ao longo das linhas desse diretório, dependendo do seu Linux (?). Eu escrevi um pouco sobre isso aqui .

O conceito é que, após o login, um gerente de exibição inicia uma "Xsession" e origina (!) Tudo nesse diretório em ordem alfabética. Você pode simplesmente adicionar um script que modifique o PATH. A Xsession será unicamente sua DE e, geralmente, todos os processos são filhos dessa Xsession, portanto, herdam o ambiente PATH.


Existe um equivalente que eu possa definir no meu diretório $ HOME? Como .Xsession?
Code-Guru

De acordo com Xession (5): Varie /etc/X11/Xsession.d/40x11-common_xsessionrc as variáveis ​​de ambiente global. Este script irá originar qualquer coisa em $ HOME / .xsessionrc se o arquivo estiver presente. Isso permite que o usuário defina variáveis ​​de ambiente global para sua sessão X, como informações de localidade.
Bananguin 04/07/2013

1

Um processo herda um ambiente do processo pai que o inicia. Para alterar o PATH ou outros valores de ambiente em um filho, podemos definir uma variável para um valor no pai, exportar a variável se estiver em um shell e iniciar o processo filho. A criança também pode ler um ou mais arquivos de inicialização para alterar seu próprio ambiente ao iniciar.

Portanto, há mais duas perguntas para obter uma resposta:

Qual é a árvore de herança pai / filho que leva ao processo que você deseja que seja afetado pelo PATH ou pela alteração do ambiente?

Quais arquivos de inicialização são usados ​​/ lidos / originados pelos processos relevantes nessa árvore?

Aqui está parte da saída do ps (1) para mostrar o que quero dizer com uma árvore de herança:

# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf 

UID   PID  PPID USER COMMAND
  0     1     0 root /usr/lib/systemd/systemd
  0  1481     1 root /usr/sbin/gdm-binary -nodaemon
  0  1497  1481 root  \_ /usr/libexec/gdm-simple-slave ...
  0  1504  1497 root      \_ /usr/bin/Xorg :0 ...
  0  1855  1497 root      \_ gdm-session-worker ...

Observe as seqüências gráficas \ _ e os números PIP / PPID (ID do processo e PID pai). O PID 1855 foi iniciado por (algum filho de?) 1497, iniciado em 1481, iniciado pelo PID 1, iniciado pelo processo ancestral 0.

Faça um rastreamento de herança semelhante para o processo que você deseja afetar, descubra quais arquivos de inicialização são relevantes e faça a alteração no PATH em algum lugar dessa árvore, provavelmente com algo semelhante a:

PATH=${PATH}:/usr/local/bin

Posso usar pspara determinar o processo pai de um login da GUI?
Code-Guru
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.