Recuperar los iconos del escritorio tras un error en actualización

Buenos días. Ayer me encontré ante una de esas situaciones «extrañas» en las que tras seguir los pasos propuestos por la herramienta de actualización del sistema, este se volvía aparentemente inestable y dejaba de mostrarme los iconos del sistema (menú, escritorio, botones, ventanas…), el fondo de escritorio y hasta desconfiguraba la apariencia del gestor de inicio de sesión. ¡Todo un desastre!

siniconos

Pero vayamos paso a paso. Veamos que lo produjo y como conseguimos recuperarlo…

El origen del problema

Tras iniciar como tantas veces el proceso de actualización del sistema (apt-get update y el correspondiente  apt-get dist-upgrade ejecutados desde una consola) observé la siguiente salida durante la configuración final de los paquetes descargados:

Processing triggers for hicolor-icon-theme ...

(gtk-update-icon-cache:7721): GdkPixbuf-WARNING **: Cannot open pixbuf loader module file '/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache': No such file or directory

This likely means that your installation is broken.
Try running the command
  gdk-pixbuf-query-loaders > /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache
to make things work again for the time being.

Así que cuando termino y me devolvió el control del terminal raudo y obediente traté de ejecutar el comando gdk-pixbuf-query-loaders que se me había sugerido:

# gdk-pixbuf-query-loaders > /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache
The program 'gdk-pixbuf-query-loaders' is currently not installed. You can install it by typing:
apt-get install libgdk-pixbuf2.0-dev

Tal como puede leerse en el mensaje anterior mi Ubuntu me informaba que no lo tenía instalado y me daba instrucciones para hacerlo…

# apt-get install libgdk-pixbuf2.0-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libglib2.0-dev libpcre3-dev libpcrecpp0 libpng12-dev libpthread-stubs0
  libpthread-stubs0-dev libx11-dev libx11-doc libxau-dev libxcb1-dev
  libxdmcp-dev x11proto-core-dev x11proto-input-dev x11proto-kb-dev
  xorg-sgml-doctools xtrans-dev zlib1g-dev
Suggested packages:
  libglib2.0-doc libxcb-doc
The following NEW packages will be installed:
  libgdk-pixbuf2.0-dev libglib2.0-dev libpcre3-dev libpcrecpp0 libpng12-dev
  libpthread-stubs0 libpthread-stubs0-dev libx11-dev libx11-doc libxau-dev
  libxcb1-dev libxdmcp-dev x11proto-core-dev x11proto-input-dev
  x11proto-kb-dev xorg-sgml-doctools xtrans-dev zlib1g-dev
0 upgraded, 18 newly installed, 0 to remove and 3 not upgraded.
Need to get 7,719 kB of archives.
After this operation, 29.0 MB of additional disk space will be used.
Do you want to continue [Y/n]? y

Se instaló todo lo ¿necesario? para hacerlo funcionar y repetí la orden que se ejecutó aparentemente sin errores. Pero nada más cerrar el terminal y tratar de acceder a los menús de Gnome observé que TODOS los iconos de las ventanas, menús y escritorio se habían sustituido por el de  la [X] que indica que el fichero correspondiente no se había encontrado.

siniconos

Buscando las causas

Abrí un terminal virtual pulsando CTRL + ALT + F1 y tras iniciar sesión verifique la existencia del fichero que había generado el error durante la actualización:

$ ls -alt /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache
-rw-r--r-- 1 root root 0 Ago  30 14:27 /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache

Primer intento de solución

Los iconos del sistema se almacenan a partir de un directorio conocido: /usr/share/icons, así que lo primero que pensé fue en regenerar la caché de iconos de todos los subdirectorios:

$ for z in /usr/share/icons/*; do sudo gtk-update-icon-cache-3.0 -ft $z; done
[sudo] password for administrador: 
gtk-update-icon-cache-3.0: Failed to open file /usr/share/icons/cab_extract.png/.icon-theme.cache : No es un directorio
gtk-update-icon-cache-3.0: Failed to open file /usr/share/icons/cab_view.png/.icon-theme.cache : No es un directorio
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.
gtk-update-icon-cache-3.0: Cache file created successfully.

… y aparentemente debería haber funcionado. Pero NO.

Segundo intento

Buceando en algunos foros encontré lo que parece que resolvería mis problemas, empezando por reinstalar la librería que lee los iconos en su formato vectorial «librsvg-2″ y la herramienta que los actualiza «libgdk-pixbuf2.0″. En mi caso utilicé para la reinstalaciónla herramienta de gestión de paquetes synaptic.

Una vez hecho esto ejecuté como root la siguiente orden:

$ sudo /usr/bin/gdk-pixbuf-query-loaders --update-cache

Tampoco pareció arreglar el problema. Así que opté por algo aparentemente más sencillo:

A la tercera va la vencida…

Instalé un conjunto de iconos/tema de escritorio nuevo y una herramienta adicional para hacer el cambio de temas:

$ sudo apt-get install oxygen-icon-theme gtk-theme-switch

Ejecuté el programa gtk-theme-switch2 pero no pareció cambiar nada. Desesperado abrí el panel de «Configuración del sistema -> Aparincia» y cambié desde allí el tema dos veces: la primera vez al nuevo instalado y luego de nuevo al que tenía por defecto.

Luego cerré la sesión y volví a entrar de nuevo… EUREKA!

coniconos