it-swarm-pt.tech

Configurando o ambiente corretamente

Estou usando zsh e gdm para executar o gnome. Há algum tempo, descobri que as variáveis ​​não são definidas corretamente. Por exemplo LANG/LC_ALL estão incorretas ("" ao invés de en_GB.UTF-8).

Eu divido o .zshrc para dentro .zshrc e .profile. Neste último, defino as variáveis ​​de ambiente, mas como posso definir as variáveis ​​antes do início da sessão? Tentei algumas opções (.xinitrc, .xsessionrc) mas nenhum parecia funcionar.

Editar Para esclarecer - eu usei .profile e manualmente originou-o em .zshrc. Isso não muda a questão de qualquer maneira.

16
Maciej Piechotka

A maneira simples é inventar uma máquina do tempo, visitar as várias pessoas que criaram os arquivos de inicialização do Shell e dizer-lhes para distinguir claramente entre três coisas:

  • configuração da sessão, por exemplo variáveis ​​ambientais;
  • lançamento de sessão, ou seja, por exemplo iniciar um Shell de linha de comando ou um gerenciador de janelas ou executar startx;
  • Inicialização do shell, por exemplo aliases, Prompt, combinações de teclas.

Não é muito difícil obter uma sessão vs. Shell de maneira portável: a inicialização no momento do login vai para .profile (ou .zprofile, ou .login), A inicialização do Shell vai em .bashrc ou .zshrc. Já escrevi anteriormente sobre .bash_profile , zsh vs. outros shells , mais sobre portabilidade (principalmente sobre bash) , mais sobre quem lê .profile .

Um problema remanescente é a distinção entre a configuração da sessão e o início da sessão. Na maioria dos casos, ~/.profile é executado quando você faz login e pode ser duplicado como ambos, mas há exceções:

  • Se o seu shell de login for (t) csh ou zsh, ~/.login e ~/.zprofile é originado em vez de ~/.profile. Idem para bash e ~/.bash_profile, mas isso é facilmente resolvido com o fornecimento de ~/.profile de ~/.bash_profile.
  • Se você fizer login em um gerenciador de exibição (xdm, gdm, kdm, ...), seja seu ~/.profile a leitura depende da versão do programa, da sua distribuição (Linux ou outro) e do tipo de sessão que você escolher.
    • Se você conta com o gerenciador de exibição para iniciar uma sessão para você, seu .profile deve definir variáveis ​​de ambiente, mas não iniciar uma sessão (por exemplo, um gerenciador de janelas).
    • O arquivo de configuração tradicional para sessões X é ~/.xsession, fazendo a configuração e o lançamento da sessão. Portanto, o arquivo pode ser essencialmente . ~/.xsession; . ~/.xinitrc. Fonte de algumas distribuições ~/.profile antes ~/.xsession. Distribuições modernas apenas fonte ~/.xsession quando você seleciona uma sessão “personalizada” no gerenciador de exibição, e tal sessão nem sempre está disponível.
    • Seu gerenciador de sessão pode ter sua própria maneira de definir variáveis ​​de ambiente. (Essa é uma parte opcional do seu ambiente de área de trabalho, escolhida por você através de um arquivo de configuração ou selecionando um tipo de sessão ao fazer o login; não confunda com os scripts de inicialização de sessão fornecidos pelo gerenciador de exibição, que são executados pelo seu usuário escolhido com base em todo o sistema. Sim, é uma bagunça.)

Em suma, ~/.profile é o lugar certo para variáveis ​​de ambiente. Se não for lido, tente obtê-lo de ~/.xsession (e inicie seus programas X a partir daí), ou procure por um método específico do sistema (que pode depender de sua distribuição, gerenciador de exibição se houver, tipo de sessão se for gerenciador de exibição e ambiente de área de trabalho ou gerenciador de sessão).

22

Na documentação do Gentoo há um artigo Guia de localização do Gentoo Linux . Capítulo trata da configuração do local.

Normalmente, os usuários definem apenas a variável LANG de forma global. Este exemplo é para uma localidade unicode alemão:

Listagem de código 3.1: Configurando a localidade do sistema padrão em /etc/env.d/02locale

LANG="en_GB.UTF-8"

No meu Gentoo LANG está definido neste arquivo e tudo está funcionando corretamente ...

[email protected] ~ $ cat /etc/env.d/02locale 
LANG="pl_PL.UTF-8"

[email protected] ~ $ locale
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=
1
pbm