Sobre o relacionamento entre inicialização de shell e aplicativos de desktop após um “login gráfico”

1

Eu sou muito ( zsh ) / um pouco ( bash ) familiarizado com a seqüência de inicialização do shell quando o usuário faz o login através 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 login padrão do OS X)?

Estou particularmente interessado nesses arquivos ( .zprofile , .zlogin , .profile ) que devem ser originados apenas para "shells de login". Quando o login é feito por meio de uma interface de texto, isso é mais ou menos equivalente a ser originado "exatamente uma vez por sessão".

Quando o login acontece por meio de uma interface gráfica, não está claro para mim que existe uma "shell de login" para começar. E mesmo se .zprofile et al. de alguma forma são originados em algum momento como parte da sequência de login gráfico, não está claro para mim como as configurações (por exemplo, variáveis de ambiente exportadas) resultantes do fornecimento 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 mais tarde clicando nos ícones da área de trabalho?

Para essa questão, 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 a uma das duas últimas perguntas forem algo como "não por padrão", a pergunta de acompanhamento seria: como podemos garantir que as configurações sejam executadas em (pelo menos) .zprofile / .profile e, possivelmente, também .zlogin , são transmitidos para o ambiente visto por todos os aplicativos "auto-iniciado" e "iniciado 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 sequência de inicialização interna zsh / bash para shells "interativos", em vez de sendo originado explicitamente por .zprofile / .profile .

    
por kjo 18.02.2016 / 15:48

1 resposta

1

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.

    
por 18.02.2016 / 22:00

Tags