Daniel López Azaña

Tema

Social Media

Blog

GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Cómo evitar que el fichero .xsession-errors alcance un tamaño enorme

Xorg iconEl fichero .xsession-errors es un fichero de log que utiliza el sistema de ventanas X para registrar todos los errores que se producen en el entorno gráfico de Linux. Dado que todos los entornos de escritorio, ya sea Gnome, KDE, Cinnamon, XFCE, LXDE, etc., y todos los gestores de ventanas más livianos que no llegan a constituir un entorno de escritorio como FVWM, IceWM o Window Maker utilizan el sistema de ventanas X, al final cualquier aplicación gráfica que ejecutemos en nuestro ordenador puede provocar que se escriban mensajes de error en el fichero .xsession-errors, por lo que éste puede crecer de forma descontrolada hasta alcanzar fácilmente un tamaño muy grande de decenas de GB o incluso cientos si la capacidad de nuestro disco lo permite.

Del mismo modo que este problema afecta a los distintos entornos de escritorio y gestores de ventanas basados en X Window (es decir, todos), todas las distribuciones de Linux, ya sea Ubuntu, Fedora, Debian o ArchLinux se pueden ver también afectadas.

Aunque existe un mecanismo de control en el fichero /etc/X11/Xsession que hace que el fichero se vacíe cada vez que arranca nuestro entorno gráfico si ha superado un determinado tamaño, si eres de los que como yo normalmente suspenden el ordenador en lugar de apagarlo cada vez que dejan de trabajar, puede darse el caso de que no reinicies tu máquina durante semanas o incluso meses, con lo cual el fichero .xsession-errors nunca se truncará y podrá llegar a alcanzar tamaños gigantescos. Y aunque sí que reinicies el sistema con frecuencia, también ocurre que algunas aplicaciones, ya sea por algún tipo de fallo o error o porque hacen un uso indebido del log de errores, comienzan a verter miles y miles de mensajes a .xsession-errors de forma descontrolada.

Normalmente el fichero .xsession-errors se guarda en tu directorio de usuario y el único inconveniente de esta situación es que se te llene tu carpeta personal. Pero si no has particionado adecuadamente tu disco y sólo tienes una partición para todo el sistema de ficheros raíz (/), el rápido crecimiento del fichero .xsession-errors puede hacer que tu ordenador directamente deje de funcionar y se caiga.

Lectura recomendada:
Linux disk partition La importancia de particionar correctamente un disco en Linux

Vaciar el fichero .xsession-errors

Si ya te ha ocurrido que te has quedado sin espacio en disco y mediante el comando du -k /home | sort -n | tail -5 ya has podido determinar que es el fichero .xsession-errors el que más espacio ocupa, el primer paso para solucionarlo es vaciarlo por completo :

$ >~/.xsession-errors

Evitar que .xsession-errors crezca sin control

Una vez liberado el espacio, querremos que no se pueda volver a repetir esta situación. Para ello lo mejor es tratar de encontrar el origen del problema, es decir, saber qué proceso está escribiendo sin control en el log de errores y por qué. Para ello lo mejor es usar el comando fatrace tal y como indico en este otro artículo: Cómo saber en tiempo real qué procesos escriben en un fichero con fatrace.

Otra medida interesante a adoptar será añadir una tarea a nuestro cron para que periódicamente se compruebe el tamaño del fichero .xsession-errors, y si éste supera un determinado umbral, vaciarlo o truncarlo para que sólo se conserven las últimas líneas:

– Ejemplo 1: comprobar cada 15 minutos si el fichero tiene un tamaño superior a 5 GB y si es así vaciarlo:

*/15      *       *       *       *       [ $(du -k .xsession-errors | awk '{ print $1 }') -gt 5000000 ] && >/home/$(whoami)/.xsession-errors

– Ejemplo 2: hacer la misma comprobación, pero en lugar de vaciar todo el log, conservar las últimas 10.000 líneas:

*/15      *     *       *       *       [ $(du -k .xsession-errors | awk '{ print $1 }') -gt 5000000 ] && tail -10000 /home/$(whoami)/.xsession-errors > /home/$(whoami)/.xsession-errors

Deshabilitar toda escritura sobre el fichero .xsession-errors

Si lo que queremos es olvidarnos de este log porque en condiciones normales no nos interesará la información de depuración que ofrece, podemos redirigir a /dev/null todo lo que se escriba en él y así siempre mantendrá un tamaño de 0 bytes. Para ello podemos editar el fichero de configuración /etc/X11/Xsession del sistema X Window y localizar la siguiente línea:

ERRFILE=$HOME/.xsession-errors

La sustituiremos por:

ERRFILE=/dev/null

También podemos eliminar el fichero .xsession-errors y poner en su lugar un enlace simbólico a /dev/null y conseguiremos el mismo efecto:

$ rm .xsession-errors
$ ln -s /dev/null .xsession-errors

El problema es que cuando reiniciemos la sesión el enlace simbólico será sustituido de nuevo por un fichero regular y se comenzará de nuevo a llenar. Para evitarlo deberemos añadir las siguientes líneas al fichero .bashrc de nuestro directorio personal:

# Si el fichero .xsession-errors no es un enlace simbólico lo eliminamos y lo creamos
if [ ! -h $HOME/.xsession-errors ]; then
 /bin/rm $HOME/.xsession-errors
 ln -s /dev/null $HOME/.xsession-errors
fi

Por último, existe otra posibilidad y es establecer el atributo inmutable al fichero, lo cual hará que no se pueda escribir nada sobre él por parte de ningún usuario ni de ningún proceso. Esto puede causar algún comportamiento inesperado del sistema, por lo que debe realizarse con precaución:

$ sudo chattr +i .xsession-errors
Daniel López Azaña

Sobre el autor

Daniel López Azaña

Emprendedor tecnológico y arquitecto cloud con más de 20 años de experiencia transformando infraestructuras y automatizando procesos.

Especialista en integración de IA/LLM, desarrollo con Rust y Python, y arquitectura AWS & GCP. Mente inquieta, generador de ideas y apasionado por la innovación tecnológica y la IA.

Artículos relacionados

Ctrl+S

Desbloquear la línea de comandos de Linux tras pulsar Ctrl+s en Bash

Dado que la combinación de teclas Control+s es muy utilizada como atajo para la opción de Guardar ficheros en aplicaciones gráficas como editores de texto, editores de imágenes, navegadores web, etc. a veces nos traiciona el subconsciente cuando estamos trabajando desde la línea de comandos de Linux y utilizamos esa misma combinación de teclas cuando estamos por ejemplo editando un documento con Vim con la intención de guardarlo. A partir de ese momento observamos que ninguna tecla responde, la shell se ha bloqueado y ya no podemos hacer nada más en ella y nos entra un sudor frío porque no podemos acceder al documento que estábamos editando y no podemos salvar los cambios.

27 de abril de 2017
fatrace command man page

Comando fatrace: cómo saber en tiempo real qué procesos escriben en un fichero

Normalmente es fácil saber cuál es el proceso o procesos que están escribiendo sobre un fichero dado en Linux, ya que o bien conocemos previamente su origen, por ejemplo el access_log de Apache, o bien podemos hallarlo fácilmente con los comandos fuser o lsof. Sin embargo, a veces nos ocurrirá que aunque conozcamos el origen o el cometido de un fichero, son tantas las aplicaciones que pueden estar haciendo uso de él simultáneamente, que es muy difícil saber cuál de ellas es la que más escribe o la que lo está haciendo en un momento determinado, lo cual nos resultaría muy útil para saber por ejemplo por qué un fichero de log está creciendo desmesuradamente o qué aplicación está haciendo un uso abusivo de nuestro sistema, ya sea por un fallo o de forma intencionada.

23 de junio de 2017
Logo AWS EBS

Cómo ampliar el tamaño de un volumen EBS y de una partición ext4 en AWS

Cuando se nos llena completamente el sistema de ficheros de una partición ext4 alojada en un volumen EBS de Amazon Web Services y no podemos hacer nada por liberar espacio al no querer perder ninguno de los datos almacenados, el único remedio que nos queda es ampliar el volumen y hacer crecer la partición asociada hasta el 100% de su capacidad para disponer nuevamente de espacio libre de almacenamiento.Partimos en nuestro ejemplo de un volumen de 50 GB lleno al 100% que queremos ampliar a uno nuevo del doble de tamaño, 100 GB:

23 de mayo de 2017

Comentarios

Cristian 28 de septiembre de 2018
Daniel, una pregunta el archivo xsession-errors deja solo los errores de la parte gráfica de todos los usuarios que tiene un login ala sistema o también deja los errores cuando entras por SSH ?
Daniel 28 de septiembre de 2018
Cuando entras normalmente por SSH no, porque no se ejecutan aplicaciones gráficas. Pero si accedes con el parámetro -X, se activa el X11 forwarding, el cual permite ejecutar aplicaciones gráficas del host remoto en el entorno gráfico de la máquina cliente a través del túnel cifrado que establece SSH. En ese caso, como la aplicación se ejecuta en el host remoto aunque la estés visualizando en tu ordenador local, sí es posible que se viertan errores en el fichero .xsession-errors, depende de la configuración.

Enviar comentario