Arreglando las miniaturas (thumbnails) de Nautilus

08/04/2010


En ocasiones Nautilus (el gestor de archivos de Gnome) falla al generar las miniaturas de algunos archivos.

Lo que ocurre normalmente es que Nautilus intenta generar las miniaturas de los ficheros tan pronto como aparecen en un directorio aunque aún no esté completo (por ejemplo, si se descarga de una página web o si se está copiando desde otra ubicación) y, obviamente, no puede generar dicha miniatura.

El problema está en que cuando Nautilus falla en la generación de la miniatura, el fallo se anota en algún sitio, y Nautilus no vuelve a intentar regenerar la miniatura de nuevo una vez que el fichero esté completo.

Nautilus implementa el “Thumbnail Managing Standard”, desarrollado por el proyecto freedesktop.org y disponible aquí.

De acuerdo a la especificación, Nautilus almacena las miniaturas en formato PNG en los directorios “.thumbnails/normal” y “.thumbnails/large” en el directorio home de los usuarios y con nombre como representación hexadecimal del MD5 de la URI del fichero original.

Cuando Nautilus falla en la generación de la miniatura, almacena una “falsa” miniatura (imagen vacía) en el directorio “.thumbnails/fail/gnome-thumbnail-factory”. Por tanto, borrando el contenido de dicho directorio hará que Nautilus “olvide” todos las generaciones de miniaturas falladas y por tanto intente regenerarlas (En realidad, otros programas gráficos como el Gimp registran fallos en otros directorios dentro de “.thumbnails/fail” por lo que seguramente querremos borrar el contenido completo de dicho directorio).

Para conseguir esto podemos crear un script para Nautilus que busque en todos los directorios bajo “.thumbnails“ las miniaturas de los ficheros seleccionados y las borre (de modo que “fuerce” su regeneración).

Lo mejor es crearnos un script en Phyton, que incorpora soporte MD5 y no necesita de la instalación de ninguna herramienta “extra”.

delete_thumbnail.py

#!/usr/bin/python
# delete_thumbnails.py 
#   This Nautilus script attempts to locate and delete thumbnails of selected 
#   files
#
# Copyright 2007 Barak Korren
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see .
#
# This script is currently not very smart, it simply does a recursive search
# in ~/.thumbnails deleting all matching thumbnails it finds, a smarter script
# would not recuse into directories in ~/.thumbnails/large and 
# ~/.thumbnails/normal since such directories do not contain thumbnails 
# according to ths standard.
#
# The file serch could be optimized as well, curently it does O(n^2) kartezian
# duplication scan (e.g. compares each thumbnail name to each file name in each
# directory), which could run a little slow on older machines or ones with 
# gigantic amounts of thumbnails.
#

import os
import md5

try:
        thumbs = [md5.new(url).hexdigest() + '.png' for url in
                        os.environ['NAUTILUS_SCRIPT_SELECTED_URIS'].splitlines()]
        tokill = list()
        for root, dirs, files in os.walk(os.path.expanduser('~/.thumbnails')):
                tokill.extend([os.path.join(root,f)
                        for t in thumbs for f in files if f == t]);
        #print tokill
        for f in tokill:
                os.remove(f);
except KeyError, e:
        if e.message == 'NAUTILUS_SCRIPT_SELECTED_URIS':
                print 'NAUTILUS_SCRIPT_SELECTED_URIS environment variable not \
available! are you running this from Nautilus?'
                exit(1)
        else:
                raise

Guardamos el fichero en el directorio “~/.gnome2/nautilus-scripts”, le damos permisos de ejecución y listo. Ya tenemos una nueva opción en el menú de scripts de Nautilus (botón derecho).

vía

6 Responses to “Arreglando las miniaturas (thumbnails) de Nautilus”

  1. Barak Korren Says:

    Please note that Python is a line indent-sensitive language, the script, as presented here, will not work, it needs to be typed with proper line indentions as presented in the following link:

    http://ifireball.wordpress.com/sources/delete_thumbnailspy/

  2. Javier V F Says:

    Voy a marcarlo para tenerlo a mano.
    A mi a veces me pasan cosas raras cuando uso Kolourpaint en Ubuntu (Gnome).

  3. Mario Says:

    MD5NAME=`echo $filename | md5sum`

    Y no se necesita herramiento extra

  4. Choperro Says:

    “…y con nombre como representación hexadecimal del MD5 de la URI del fichero original.” – NO porque hace linux más dificil de entender a la gente

    “y con la representación hexadecimal del MD5 de la URI del fichero original como nombre” – SI porque lo correcto hace lo contrario

  5. Choperro Says:

    “dentro de ‘.thumbnails/fail’ por lo que seguramente querremos borrar el contenido completo de dicho directorio).
    Para conseguir esto podemos crear….”

    PARA CONSEGUIR ESTO (e.d. borrar el contenido completo de dicho directorio) hacer así:

    $rm .thumbnails/fail/*

    Y LISTO!!

    PARA CONSEGUIR OTRA COSA HACER OTRA COSA


  6. Desde el ubuntu 12.04 me viene pasando y es simplemente que el directorio .thumbnails y todos sus subdirectorios son propiedad del root.
    Para arreglarlo solo hay que poner nuestro usuario como propietario, yo usé krusader y me fue bien.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: