Sobre a relação entre inicialização do shell e aplicativos de desktop após um "login gráfico"

Sobre a relação entre inicialização do shell e aplicativos de desktop após um "login gráfico"

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 .zprofileet 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/ .bashrc1 ? 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/ .profilee possivelmente também .zloginsejam 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, zshe bash, e dois sistemas operacionais, Linux e OSX.


1 assumindo que .zshrc/ .bashrcestão sendo originados como parte da zsh/ bashsequê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.

informação relacionada