it-swarm-es.tech

Entorno de configuración correcta

Estoy usando zsh y gdm para ejecutar gnome. Hace algún tiempo descubrí que las variables no están configuradas correctamente. Por ejemplo, LANG/LC_ALL son incorrectos ("" en vez de en_GB.UTF-8).

Divido el .zshrc dentro .zshrc y .profile. En el último, configuro las variables de entorno, pero ¿cómo puedo configurar las variables antes de que comience la sesión? Probé algunas opciones (.xinitrc, .xsessionrc) pero ninguno parecía funcionar.

Editar Para aclarar, usé .profile y manualmente lo obtuvieron en .zshrc. De todos modos, no cambia de pregunta.

16
Maciej Piechotka

La forma más sencilla es inventar una máquina del tiempo, visitar a las diversas personas que diseñaron los archivos de inicio de Shell y decirles que distingan claramente entre tres cosas:

  • configuración de sesión, p. ej. Variables de entorno;
  • lanzamiento de sesión, es decir, p. ej. iniciar un Shell de línea de comandos o un administrador de ventanas o ejecutar startx;
  • Inicialización de shell, p. Ej. alias, Prompt, combinaciones de teclas.

No es demasiado difícil conseguir una sesión frente a Shell de forma portátil: la inicialización del tiempo de inicio de sesión entra en .profile (o .zprofile, o .login), La inicialización de Shell va en .bashrc o .zshrc. Anteriormente escribí sobre .bash_profile , zsh frente a otros shells , más sobre portabilidad (principalmente sobre bash) , más sobre quién lee .profile .

Un problema restante es distinguir entre la configuración de la sesión y el inicio de la sesión. En la mayoría de los casos, ~/.profile se ejecuta cuando inicia sesión y puede funcionar como ambos, pero hay excepciones:

  • Si su shell de inicio de sesión es (t) csh o zsh, ~/.login y ~/.zprofile se obtiene en lugar de ~/.profile. Lo mismo ocurre con bash y ~/.bash_profile, pero esto se resuelve fácilmente contratando ~/.profile de ~/.bash_profile.
  • Si inicia sesión con administrador de pantalla (xdm, gdm, kdm,…), si su ~/.profile se lee depende de la versión del programa, de su distribución (Linux o de otro tipo) y del tipo de sesión que elija.
    • Si cuenta con el administrador de pantalla para iniciar una sesión por usted, su .profile debe establecer variables de entorno pero no iniciar una sesión (por ejemplo, un administrador de ventanas).
    • El archivo de configuración tradicional para sesiones X es ~/.xsession, realizando tanto la configuración como el inicio de la sesión. Entonces el archivo puede ser esencialmente . ~/.xsession; . ~/.xinitrc. Fuente de algunas distribuciones ~/.profile antes de ~/.xsession. Distribuciones modernas solo fuente ~/.xsession cuando selecciona una sesión "personalizada" en el administrador de pantalla, y dicha sesión no siempre está disponible.
    • Su administrador de sesiones puede tener su propia forma de configurar las variables de entorno. (Esa es una parte opcional de su entorno de escritorio, elegido por usted a través de un archivo de configuración o seleccionando un tipo de sesión al iniciar sesión; no lo confunda con los scripts de inicio de sesión proporcionados por el administrador de pantalla, que se ejecutan bajo su usuario elegido en todo el sistema. Sí, es un desastre).

En resumen, ~/.profile es el lugar adecuado para las variables de entorno. Si no se lee, intente obtenerlo de ~/.xsession (e inicie sus programas X desde allí), o busque un método específico del sistema (que puede depender de su distribución, administrador de pantalla si lo hay, tipo de sesión si es administrador de pantalla y entorno de escritorio o administrador de sesión).

En la documentación de Gentoo hay el artículo Guía de localización de Gentoo Linux . Capítulo se trata de configurar la configuración regional.

Por lo general, los usuarios solo establecen la variable LANG a nivel global. Este ejemplo es para una configuración regional alemana Unicode:

Listado de código 3.1: Configuración de la configuración regional predeterminada del sistema en /etc/env.d/02locale

LANG="en_GB.UTF-8"

En mi Gentoo LANG está configurado en este archivo y todo está funcionando correctamente ...

[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