
Estou muito ( zsh
)/um pouco ( bash
) familiarizado com a sequência de inicialização do shell quando o usuário efetua login por meio de uma interface de texto.
Mas e o caso de um "login gráfico", IOW, quando o usuário efetua login através de uma interface gráfica (por exemplo, através do chamado "gerenciador de exibição" no Linux, ou do login padrão do OS X)?
Estou particularmente interessado nos arquivos ( .zprofile
, .zlogin
, .profile
) que deveriam ser originados apenas para "shells de login". Quando o login é feito por meio de uma interface de texto, isso equivale mais ou menos a ser obtido "exatamente uma vez por sessão".
Quando o login ocorre através de uma interface gráfica, não está claro para mim se existe um "shell de login" para começar. E mesmo que .zprofile
et al. são de alguma forma originados em algum momento como parte da sequência gráfica de login, não está claro para mim como as configurações (por exemplo, variáveis de ambiente exportadas) resultantes da origem desses arquivos afetam o restante da sessão.
Por exemplo, essas configurações afetam o ambiente visto pelos aplicativos que são iniciados automaticamente no momento do login? Ou por aplicativos que o usuário inicia posteriormente clicando nos ícones da área de trabalho?
Aliás, e as configurações que acontecem em .zshenv
, ou em .zshrc
/ .bashrc
1 ? Eles têm algum impacto no ambiente visto por aplicativos "iniciados automaticamente" e/ou "iniciados por clique"?
Se as respostas para qualquer uma das duas últimas perguntas forem algo como "não por padrão", a pergunta seguinte seria: como garantir que as configurações executadas em (pelo menos) .zprofile
/ .profile
e possivelmente também .zlogin
sejam transmitidas para o ambiente visto por todos os aplicativos "iniciados automaticamente" e "iniciados por clique"?
Estou interessado nas respostas a essas perguntas para dois shells, zsh
e bash
, e dois sistemas operacionais, Linux e OSX.
1 assumindo que .zshrc
/ .bashrc
estão sendo originados como parte da zsh
/ bash
sequência de inicialização integrada para shells "interativos", em vez de serem originados explicitamente por .zprofile
/ .profile
.
Responder1
Os arquivos de configuração do shell entram em ação somente quando o shell é invocado. Não há nada de mágico neles. Qualquer processo pode alterar seu ambiente. A maioria apenas o lê, mas qualquer programa que seja outro executivo pode ter motivos para alterar o ambiente primeiro.
Tudo começa cominiciar, ou qualquer que seja o pid 1 em 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,iniciarpoderia chamar fork(2) e exec(2) em /usr/bin/startx. Sem login, não .profile
. O servidor X herda apenas o ambiente exportado poriniciar.
Como é o ambiente do servidor X? Você pode extrair o ambiente de um processo com ps(1). Mais fácil, mas não definitivo, é usarsshnome de anfitrião/usr/bin/env(ondenome de anfitriãoé o nome da máquina que hospeda o servidor X11). Semelhante ao que normalmente acontece com o servidor X, o sshd executaambientesem criar um shell de login.
Então chegamos ao que o seu gerenciador de exibição faz quando você faz login nele. Ele bifurca um processo, altera o uid de (provavelmente) root para o seu e inicia um gerenciador de sessão. Para obter detalhes, recomendo seu manual amigável.
Desse ponto em diante, o gerenciador de sessão estabeleceu seu ambiente, por qualquer meio. Os processos que ele cria – interpretadores de comandos ou outros aplicativos ao “clicar” neles – herdam seu ambiente. O gerenciador de sessão pode fornecer uma maneira de definir valores adicionais de variáveis de ambiente por ícone, e o processo que a coisa clicada inicia pode (como faz um shell) alterar seu ambiente na inicialização, talvez por um arquivo de configuração.
Está tudo lá. Para entender como o meio ambiente se torna o que é, basta “apenas” seguir a cadeia de processos que o criou e entender o que cada um fez ao meio ambiente. Infelizmente, essa cadeia não apenas varia de acordo com o sistema operacional, distribuição e configuração da máquina e do usuário, mas também não é particularmente bem documentada ou equipada com ferramentas. Boa sorte, por exemplo, em encontrar documentação que indique quais variáveis de ambiente serão definidas antes, digamos, do início do sshd, ou em encontrar um cliente X11 que exiba o ambiente do gerenciador de sessão.