Saltar al contenido

Solucionar la advertencia «cannot change locale» de Bash en Debian

Si no se han cambiado correctamente las locales en Debian GNU/Linux, la próxima vez que se inicie sesión en la consola Bash mostrará la siguiente advertencia:

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
Last login: Mon Oct 19 21:20:46 2015
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)

¿Porqué se muestra esta advertencia? Sencillamente no lo tengo muy claro, pero todo apunta a que se trata de un bug de Debian, concretamente en la versión 7 para arquitectura ARM. A mi personalmente me sucedió al configurar el idioma de la distribución tras instalarla en mi OLIMEX A20-OLinuXino-Lime2, aunque por la red se encuentran evidencias de casos similares en Debian x86 y distribuciones derivadas como Ubuntu. También puede ser que trasteando con las locales se introduzca una mal o se generen de forma correcta.

Independientemente de la causa la pregunta es: ¿Cómo se soluciona esta advertencia y evitar perder la configuración del idioma ante los apagados o reinicios? Pues la respuesta es volver a cambiar la localización del sistema operativo, pero esta vez haciéndola en 5 sencillos pasos como superusuario (buscando se encuentran muchas soluciones, pero experimentando esta fue la única que me funcionó):

  1. Reinstalar las locales:
    root@a20-olimex:~# apt-get install --reinstall locale
  2. Sobreescribir la variable de entorno LANG con el valor de la locale
    root@a20-olimex:~# export LANG=es_ES.UTF-8

    Existen más variables de entorno relacionadas con las locales, pero con cambiar esto es suficiente. Verificamos la asignación de valor anterior mediante el comando

    root@a20-olimex:~# echo $LANG
    es_ES.UTF-8
  3. Generar las locales mediante
    root@a20-olimex:~# dpkg-reconfigure locales

    Se selecciona la opción es_ES.UTF-8 mediante la barra espaciadora y se deselecciona la localización en_US.UTF-8 que por defecto viene seleccionada. Con el tabulador se selecciona el botón Aceptar y se pulsa Intro. En la siguiente pantalla marcar es_ES.UTF-8 como locale por defecto y Aceptar. La salida final tras la ejecución del comando será algo parecido a:

    Generating locales (this might take a while)...
    es_ES.UTF-8... done
    Generation complete.
  4. Es necesario reiniciar el sistema para que los cambios surjan efecto.
    root@a20-olimex:~# reboot
  5. Verificación final tras arrancar el sistema e iniciar sesión: ya no aparece la advertencia de Bash. Si la advertencia continúa y el valor de la variable LANG vuelve a ser el no deseado editar el fichero /etc/default/locale con un editor de texto plano como VI o nano para dejarlo tal como se indica a continuación:
    #  File generated by update-locale
    LANG=es_ES.UTF-8
    LANGUAGE=es_ES.UTF-8
    LC_ALL=es_ES.UTF-8
    LC_CTYPE=es_ES.UTF-8
    LC_NUMERIC=es_ES.UTF-8
    LC_TIME=es_ES.UTF-8
    LC_COLLATE=es_ES.UTF-8
    LC_MONETARY=es_ES.UTF-8
    LC_MESSAGES=es_ES.UTF-8
    LC_PAPER=es_ES.UTF-8
    LC_NAME=es_ES.UTF-8
    LC_ADDRESS=es_ES.UTF-8
    LC_TELEPHONE=es_ES.UTF-8
    LC_MEASUREMENT=es_ES.UTF-8
    LC_IDENTIFICATION=es_ES.UTF-8
    Finalmente reiniciar y volver a comprobar
Publicado enAdministración de sistemasConsultasManualSistemas OperativosTutorial