LightDM no cambia el idioma de AV Linux MXe 25 al iniciar sesión en Fluxbox


Si utilizas AV Linux MX Edition 25:

https://www.bandshed.net/avlinux/

y al cerrar sesión seleccionas otro idioma en el gestor de inicio de sesión, pero al entrar al escritorio el sistema continúa utilizando el idioma anterior, en este tutorial veremos cómo solucionarlo.

Esta solución fue probada en AV Linux MXe 25, utilizando LightDM como gestor de inicio de sesión y una sesión de Fluxbox.

El problema

En mi caso, AV Linux estaba configurado originalmente en Español - Ecuador.

Al cerrar sesión, LightDM me permitía seleccionar:

American English - Estados Unidos

Sin embargo, después de iniciar sesión, las aplicaciones y el sistema continuaban apareciendo en español.

Para comprobar qué idioma estaba utilizando realmente la sesión ejecuté:

echo $LANG
echo $LANGUAGE
echo $LC_ALL
locale

El resultado mostraba:

LANG=es_EC.UTF-8
LANGUAGE=
LC_ALL=

y el resto de las variables regionales también utilizaban:

es_EC.UTF-8

Por tanto, aunque había seleccionado inglés en LightDM, la sesión continuaba iniciándose con el locale de Ecuador.


1. Comprobar el locale predeterminado

Primero podemos comprobar la configuración general del sistema:

cat /etc/default/locale

En mi caso aparecía:

# File generated by update-locale

LANG=es_EC.UTF-8

Esto indicaba que el locale predeterminado del sistema era español de Ecuador.

También podemos comprobar qué locales están instalados:

locale -a | grep -E 'en_|es_'

En mi instalación estaban disponibles, entre otros:

en_AU.utf8
en_CA.utf8
en_GB.utf8
en_IE.utf8
en_NZ.utf8
en_US.utf8

es_AR.utf8
es_BO.utf8
es_CO.utf8
es_EC.utf8
es_ES.utf8
es_MX.utf8
es_PE.utf8
es_US.utf8
es_UY.utf8
es_VE.utf8

Por tanto, en_US.utf8 ya estaba instalado y el problema no era la ausencia del locale inglés.


2. Comprobar LightDM y la sesión

Podemos saber qué sesión estamos utilizando con:

echo "$DESKTOP_SESSION"
echo "$XDG_CURRENT_DESKTOP"

Y comprobar el gestor de inicio de sesión mediante:

cat /etc/X11/default-display-manager

En mi caso obtuve:

fluxbox

/usr/sbin/lightdm

Es decir:

Sesión: Fluxbox
Display Manager: LightDM

3. Comprobar si LightDM recuerda el idioma seleccionado

Aquí encontramos una pista muy importante.

Después de cerrar sesión y seleccionar:

American English - Estados Unidos

LightDM guardaba correctamente la selección en:

~/.dmrc

Podemos comprobarlo mediante:

cat ~/.dmrc

En mi caso mostraba:

[Desktop]
Language=en_US.utf8
Session=fluxbox

Esto significa que LightDM sí estaba registrando correctamente que yo había seleccionado inglés.

Sin embargo:

echo $LANG

continuaba mostrando:

es_EC.UTF-8

Teníamos entonces esta contradicción:

LightDM:
Language=en_US.utf8

Sesión Fluxbox:
LANG=es_EC.UTF-8

4. Encontrar el origen del problema

Revisando la configuración PAM utilizada por LightDM:

cat /etc/pam.d/lightdm

encontramos estas líneas:

session required pam_env.so readenv=1
session required pam_env.so readenv=1 envfile=/etc/default/locale

La segunda línea hace que durante el inicio de sesión se lea:

/etc/default/locale

que en mi sistema contiene:

LANG=es_EC.UTF-8

El resultado práctico era que LightDM guardaba:

Language=en_US.utf8

pero la sesión Fluxbox terminaba utilizando:

LANG=es_EC.UTF-8

5. Solución

En lugar de modificar permanentemente /etc/default/locale, podemos hacer que la sesión X utilice el idioma seleccionado en LightDM.

Crearemos un pequeño script dentro de:

/etc/X11/Xsession.d/

Ejecutamos:

sudo nano /etc/X11/Xsession.d/39-lightdm-dmrc-language

Dentro pegamos lo siguiente:

#!/bin/sh

# Aplicar a la sesión el idioma seleccionado en LightDM.
if [ -r "$HOME/.dmrc" ]; then
    LANG_DMRC="$(sed -n 's/^Language=//p' "$HOME/.dmrc" | head -n 1)"

    if [ -n "$LANG_DMRC" ]; then
        export LANG="$LANG_DMRC"

        LANGUAGE_DMRC="$(printf '%s\n' "$LANG_DMRC" | cut -d. -f1)"
        LANGUAGE_SHORT="$(printf '%s\n' "$LANGUAGE_DMRC" | cut -d_ -f1)"

        export LANGUAGE="${LANGUAGE_DMRC}:${LANGUAGE_SHORT}"
    fi
fi

Guardamos el archivo.

En Nano podemos hacerlo con:

Ctrl + O
Enter
Ctrl + X

Ahora damos permisos de ejecución al script:

sudo chmod 755 /etc/X11/Xsession.d/39-lightdm-dmrc-language

6. Cerrar sesión y seleccionar inglés

Ahora cerramos completamente nuestra sesión.

Cuando aparezca LightDM seleccionamos:

American English - Estados Unidos

y volvemos a entrar en Fluxbox.

En mi caso, inmediatamente todo el escritorio y las aplicaciones comenzaron a aparecer correctamente en inglés.


7. Comprobar que funcionó

Abrimos una terminal y ejecutamos:

echo $LANG
echo $LANGUAGE
locale

Después de aplicar la solución obtuve:

en_US.utf8
en_US:en

y locale mostró:

LANG=en_US.utf8
LANGUAGE=en_US:en
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

Especialmente importante es:

LC_MESSAGES="en_US.utf8"

porque confirma que las aplicaciones reciben el locale inglés para los mensajes de su interfaz.


¿Qué hace exactamente esta solución?

El funcionamiento queda aproximadamente así:

             LightDM
                │
                │ seleccionamos idioma
                ▼
            ~/.dmrc
                │
                │
     Language=en_US.utf8
                │
                ▼
/etc/X11/Xsession.d/
39-lightdm-dmrc-language
                │
                ├── LANG=en_US.utf8
                │
                └── LANGUAGE=en_US:en
                │
                ▼
             Fluxbox
                │
                ▼
      Aplicaciones en inglés

Si posteriormente seleccionamos un locale español disponible en LightDM, el mismo mecanismo puede utilizar el valor que LightDM guarde en ~/.dmrc.

Por tanto, no estamos fijando permanentemente el sistema a inglés.


¿Por qué no cambiar simplemente /etc/default/locale?

Podríamos cambiar globalmente:

LANG=es_EC.UTF-8

por:

LANG=en_US.UTF-8

pero eso no soluciona realmente el problema de querer seleccionar el idioma desde LightDM.

Con el método de este tutorial podemos conservar el locale predeterminado del sistema y permitir que la sesión utilice el idioma elegido en el login manager.

Tampoco es necesario eliminar las líneas pam_env.so de:

/etc/pam.d/lightdm

Es preferible no alterar innecesariamente la configuración PAM del sistema.


Cómo deshacer la solución

Si posteriormente queremos volver al comportamiento original, simplemente eliminamos el archivo que creamos:

sudo rm /etc/X11/Xsession.d/39-lightdm-dmrc-language

Cerramos sesión y volvemos a entrar.

No hemos modificado /etc/default/locale, por lo que el cambio es fácil de revertir.


Conclusión

En AV Linux MXe puede ocurrir que LightDM guarde correctamente el idioma seleccionado en:

~/.dmrc

por ejemplo:

Language=en_US.utf8

pero la sesión termine utilizando el locale establecido en:

/etc/default/locale

En mi caso:

LANG=es_EC.UTF-8

La solución consistió en crear:

/etc/X11/Xsession.d/39-lightdm-dmrc-language

para aplicar a la sesión el idioma que LightDM había guardado en ~/.dmrc.

Después de cerrar sesión y seleccionar American English - Estados Unidos, AV Linux inició correctamente en inglés:

LANG=en_US.utf8
LANGUAGE=en_US:en

La ventaja de este método es que podemos seguir utilizando el selector de idiomas de LightDM sin tener que cambiar permanentemente el locale predeterminado de todo el sistema.

Sistema donde fue probado

Esta solución fue comprobada en:

AV Linux MX Edition 25
Base: MX Linux 25 / Debian 13 (Trixie)
Display Manager: LightDM
Sesión utilizada: Fluxbox

AV Linux MX Edition es una distribución orientada especialmente a la creación de contenido multimedia y está basada actualmente en MX Linux 25 / Debian Trixie.

Página oficial de AV Linux:

https://www.bandshed.net/avlinux/

Comentarios