Ambiente de configuração correta

15

Estou usando o zsh e o gdm para executar o gnome. Algum tempo atrás eu descobri que as variáveis não estão definidas corretamente. Por exemplo, LANG / LC_ALL estão incorretos ( "" em vez de en_GB.UTF-8 ).

Eu divido o .zshrc em .zshrc e .profile . No último eu definir as variáveis de ambiente, mas como posso definir as variáveis antes da sessão começar? Eu tentei algumas escolhas ( .xinitrc , .xsessionrc ), mas nenhuma pareceu funcionar.

Editar Para esclarecer, usei .profile e manualmente como .zshrc . Não muda a questão de qualquer maneira.

    
por Maciej Piechotka 07.12.2010 / 20:32

2 respostas

20

A maneira mais simples é inventar uma máquina do tempo, visitar as várias pessoas que criaram 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 de ambiente;
  • inicialização de sessão, por exemplo, iniciando um shell de linha de comando ou um gerenciador de janelas ou executando startx ;
  • inicialização do shell, por exemplo aliases, prompt, atalhos de teclado.

Não é muito difícil acessar a sessão vs. shell de maneira portátil: a inicialização do tempo de login entra em .profile (ou .zprofile ou .login ), a inicialização do shell entra em .bashrc ou .zshrc . Eu escrevi anteriormente sobre .bash_profile , zsh vs. outros shells , mais sobre portabilidade (principalmente sobre o bash) , mais sobre quem lê .profile .

Um problema remanescente é distinguir entre a configuração da sessão e o lançamento da sessão. Na maioria dos casos, ~/.profile é executado quando você efetua login e pode ser usado como ambos, mas há exceções:

  • Se o seu shell de login for (t) csh ou zsh, ~/.login e ~/.zprofile serão originados em vez de ~/.profile . Ditto for bash e ~/.bash_profile , mas isso é facilmente resolvido pelo fornecimento de ~/.profile de ~/.bash_profile .
  • Se você fizer login em um gerenciador de exibição (xdm, gdm, kdm,…), seja seu ~/.profile é lido depende da versão do programa, de sua distribuição (Linux ou não) e de qual tipo de sessão você escolhe.
    • Se você contar 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 as sessões X é ~/.xsession , executando a configuração da sessão e o lançamento da sessão. Portanto, o arquivo pode ser essencialmente . ~/.xsession; . ~/.xinitrc . Algumas distribuições obtêm ~/.profile antes de ~/.xsession . As distribuições modernas só escolhem ~/.xsession quando você seleciona uma sessão “personalizada” do gerenciador de exibição, e essa sessão nem sempre está disponível.
    • Seu gerenciador de sessão pode ter sua própria maneira de configurar 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 efetuar login; não confunda com os scripts de inicialização de sessão fornecidos pelo gerenciador de exibição, que são executados sob seu usuário, mas escolhido em todo o sistema Sim, é uma bagunça.)

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

    
por 07.12.2010 / 21:47
1

Na documentação do Gentoo, há um artigo Guia de localização do Gentoo Linux . Capítulo 3 é sobre como definir a localidade.

Most typically users only set the LANG variable on the global basis. This example is for a unicode German locale:

Code Listing 3.1: Setting the default system locale in /etc/env.d/02locale

LANG="en_GB.UTF-8"

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

pbm@tauri ~ $ cat /etc/env.d/02locale 
LANG="pl_PL.UTF-8"

pbm@tauri ~ $ 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=
    
por 07.12.2010 / 20:46