Saltar al contenido

Cómo solucionar errores de «setlocale» y visualización de tildes en Debian 13 vía SSH desde macOS

Si alguna vez has visto el molesto mensaje -bash: aviso: setlocale: LC_CTYPE: no se puede cambiar el local (UTF-8) al conectarte por SSH desde tu Mac a un servidor Debian, no estás solo. Este error ocurre por un conflicto de comunicación: tu Mac intenta imponer su configuración de idioma y el servidor no sabe cómo interpretarla.

En esta guía aprenderás a solucionar este error de raíz y a configurar el servidor para que soporte correctamente tildes y la letra «ñ» para todos los usuarios.


1. El Problema: ¿Por qué ocurre?

El conflicto tiene dos orígenes:

  1. El Cliente (macOS): Por defecto, la terminal de Mac intenta enviar variables de entorno de idioma (como LANG y LC_*) al servidor remoto.
  2. El Servidor (Debian): Si el servidor no tiene instalado exactamente el mismo «paquete de idioma» que envía el Mac (ej. un simple UTF-8 genérico en lugar de es_PE.UTF-8), lanza un aviso de error y cae en una configuración básica llamada C.UTF-8, la cual no siempre maneja bien los caracteres especiales.

2. Paso 1: Configuración en el Cliente (iMac/MacBook)

Para evitar que tu Mac envíe variables que el servidor no entiende, debemos modificar la configuración del cliente SSH.

  1. Abre la Terminal en tu Mac.
  2. Edita el archivo de configuración global de SSH con el siguiente comando:Bashsudo nano /etc/ssh/ssh_config
  3. Busca la línea que dice: SendEnv LANG LC_*
  4. Desactívala agregando un símbolo de almohadilla (#) al inicio: # SendEnv LANG LC_*
  5. Guarda los cambios presionado Control + O, luego Enter y sal con Control + X.

¿Qué logramos con esto? Ahora tu Mac se conectará de forma «neutral», permitiendo que el servidor decida qué idioma usar.


3. Paso 2: Configuración Global en el Servidor (Debian)

Ahora que el servidor tiene el control, debemos asegurarnos de que hable español correctamente para todos los perfiles de usuario.

A. Generar los Locales necesarios

Conéctate a tu servidor y ejecuta el siguiente comando para generar el soporte de idioma para Perú (o tu país de preferencia):

Bash

sudo locale-gen es_PE.UTF-8

B. Reconfigurar el sistema interactivamente

Este es el paso más importante para que el cambio sea permanente y afecte a todo el sistema:

  1. Ejecuta:Bashsudo dpkg-reconfigure locales
  2. Selección de idiomas: Verás una lista larga. Busca es_PE.UTF-8 UTF-8. Asegúrate de que esté marcada con un asterisco (usa la barra espaciadora para marcar/desmarcar). Presiona Enter.
  3. Idioma predeterminado: El sistema te preguntará cuál debe ser el local por defecto para el entorno del sistema. Selecciona es_PE.UTF-8 y presiona Enter.

C. Editar el archivo de entorno global

Para asegurar que no existan variables «rebeldes» como LC_ALL=C.UTF-8 que pisen nuestra configuración, editaremos el archivo de locales:

  1. Abre el archivo:Bashsudo nano /etc/default/locale
  2. Déjalo configurado exactamente así:PlaintextLANG=es_PE.UTF-8 LANGUAGE=es_PE:es LC_ALL=es_PE.UTF-8
  3. Guarda y sal (Ctrl+OEnterCtrl+X).

4. Paso 3: Limpieza de perfiles individuales (Opcional)

Si previamente habías intentado arreglar esto editando archivos individuales como .bashrc o .profile, es recomendable limpiar esas líneas para que no entren en conflicto con la configuración global que acabamos de crear.

  1. Revisa tu archivo personal: nano ~/.bashrc
  2. Si ves líneas que exportan LANG o LC_ALL, puedes borrarlas o comentarlas con #.
  3. Aplica los cambios: source ~/.bashrc

5. Verificación Final

Para confirmar que todo está perfecto, cierra tu sesión SSH y vuelve a entrar. Luego ejecuta:

Bash

locale

La salida debería mostrarse así (sin errores previos):

VariableValor
LANGes_PE.UTF-8
LC_ALLes_PE.UTF-8
LC_CTYPE"es_PE.UTF-8"

Exportar a Hojas de cálculo

Prueba de fuego

Escribe en la consola: á é í ó ú ñ. Si puedes verlas claramente sin símbolos extraños como \303 o ?¡felicidades!Has configurado correctamente tu entorno Debian.


Resumen de comandos rápidos

Si tienes prisa, estos son los comandos esenciales en el servidor:

  • sudo locale-gen es_PE.UTF-8
  • sudo dpkg-reconfigure locales (elegir es_PE.UTF-8)
  • sudo update-locale LANG=es_PE.UTF-8 LC_ALL=es_PE.UTF-8

Test desde la consola (Línea de comandos)

Si quieres probarlo directamente en la terminal de tu Debian (donde acabas de arreglar los locales), ejecuta:

Bash

php -r 'echo "Probando tildes en el servidor: Perú\n";'

Si el resultado es Perú, tu configuración de consola es exitosa. Si ves algo distinto, asegúrate de que tu cliente SSH (Terminal de Mac) tenga activada la opción «Unicode UTF-8» en sus preferencias de codificación.

¿Qué hacer si falla en el navegador?

Si en la consola funciona pero en el navegador se ve mal, añade esto a tu configuración de PHP-FPM (usualmente en /etc/php/8.x/fpm/php.ini):

Ini, TOML

default_charset = "UTF-8"

Luego reinicia el servicio:

Bash

sudo systemctl restart php8.x-fpm

(Reemplaza 8.x por tu versión de PHP, por ejemplo 8.2 o 8.4).

Publicado enManuales