Os arquivos de configuração do shell entram em ação somente quando o shell é invocado. Não há nada mágico sobre eles. Qualquer processo pode mudar seu ambiente. A maioria só lê, mas qualquer programa que o outro execute é capaz de alterar primeiro o ambiente.
Tudo começa com init , ou seja qual for o pid 1 no seu sistema. Ele inicia o servidor X, que inicia o gerenciador de exibição, que fornece o prompt de login. A sequência que inicia o X11 não precisa incluir um shell de login; por exemplo, init poderia chamar fork (2) e exec (2) em / usr / bin / startx. Nenhum login, sem .profile
. O servidor X herda apenas o ambiente exportado por init .
Como é o ambiente do servidor X? Você pode extrair o ambiente de um processo com ps (1). Mais fácil, mas não definitivo, é usar ssh hostname / usr / bin / env (onde hostname é o nome da máquina que hospeda o X11 servidor). Semelhante ao que geralmente acontece com o servidor X, o sshd executa env sem criar um shell de login.
Então chegamos ao que quer que seu gerente de exibição faça quando você faz login. Ele bifurca um processo, altera o uid de (provavelmente) root para o seu e inicia um gerenciador de sessão. Para detalhes, recomendo-o ao seu manual amigável.
A partir desse ponto, o gerente de sessão estabeleceu seu ambiente, por qualquer meio. Os processos criados por ele - comandos de intérpretes ou outros aplicativos "clicando" sobre eles - herdam seu ambiente. O gerenciador de sessões pode fornecer uma maneira de definir valores de variáveis de ambiente adicionais por ícone, e o processo que o clicked-on-thing inicia pode (como um shell faz) alterar seu ambiente na inicialização, talvez por um arquivo de configuração.
Está tudo lá. Para entender como o ambiente se torna o que é, você "apenas" precisa seguir a cadeia de processos que o criou e entender o que cada um fez com o ambiente. Infelizmente, essa cadeia não só varia de acordo com o SO, a distribuição e a máquina & configuração do usuário, também não é particularmente bem documentada ou trabalhada. Boa sorte, por exemplo, encontrar documentação que defina quais variáveis de ambiente serão definidas antes, digamos, do sshd, ou localizar um cliente X11 que exiba o ambiente do gerenciador de sessões.