Debugando o subsistema de miniaturas no Linux Mint: guia prático para Nemo, GIO e arquivos .psd
Voltar para blog

Debugando o subsistema de miniaturas no Linux Mint: guia prático para Nemo, GIO e arquivos .psd

06/09/2026 · 4 min · Linux

Quem utiliza o Linux Mint (Cinnamon) no dia a dia já passou pela frustração de abrir uma pasta cheia de imagens e dar de cara apenas com ícones genéricos ou miniaturas em branco no gerenciador de arquivos Nemo.

No início, a tendência é tentar as soluções comuns: conferir preferências do Nemo, limpar o cache (~/.cache/thumbnails) ou reinstalar o ffmpegthumbnailer. Quando nada disso resolve, a investigação precisa descer uma camada: analisar as chamadas de sistema, checar os tipos MIME e auditar as regras do FreeDesktop.

Abaixo, compartilho o funcionamento do subsistema de thumbnails no Linux Mint, a solução para renderizar arquivos proprietários do Photoshop (.psd) em pastas com nomes complexos e como corrigir SVGs com XML corrompido.


1. Como o Nemo processa miniaturas por baixo dos panos#

O Nemo não decodifica nem renderiza imagens diretamente no seu processo principal. Por questões de segurança, isolamento e estabilidade, ele segue a especificação de thumbnailers da FreeDesktop:

  1. O Nemo consulta a biblioteca GIO / shared-mime-info para determinar o MIME type exato do arquivo.
  2. Procura por arquivos de instrução .thumbnailer nos diretórios /usr/share/thumbnailers/ ou ~/.local/share/thumbnailers/.
  3. Executa o binário ou script definido na regra, passando o arquivo de origem e o destino temporário em /tmp.
  4. Em caso de sucesso, grava o preview em ~/.cache/thumbnails/normal/ ou large/. Se houver falha, armazena um hash em ~/.cache/thumbnails/fail/ para não desperdiçar ciclos de I/O em tentativas repetidas.

2. Adicionando miniaturas para arquivos adobe photoshop (.psd)#

Por ser um formato proprietário da Adobe, o Linux não inclui renderizadores nativos de PSD por padrão. Ao monitorar o Nemo em modo de depuração:

nemo -q
G_MESSAGES_DEBUG=all nemo --no-desktop 2>&1 | grep -i thumbnail

O log costuma apontar a falta de um binário compatível:

CinnamonDesktop-Message: Ignoring thumbnailer with missing binary: '/usr/lib/psdthumbnailer'

O motor da solução: imagemagick#

O utilitário convert do ImageMagick é capaz de decodificar e extrair a camada achatada de visualização de arquivos PSD:

sudo apt update
sudo apt install imagemagick

A armadilha dos caminhos com espaços e caracteres especiais#

Se as suas pastas de trabalho estão em partições com nomes compostos (por exemplo, /mnt/MEU_DISCO (HD)/Projetos/Design), passar o comando convert diretamente no arquivo .thumbnailer quebra a execução. O shell se perde com os espaços e parênteses, resultando em falha silenciosa.

Para garantir que o caminho seja sempre tratado entre aspas de forma segura, a melhor prática é criar um script wrapper.

Passo 1: Criar o script wrapper seguro#

Crie o arquivo em /usr/local/bin/psd-thumbnailer:

sudo nano /usr/local/bin/psd-thumbnailer

Adicione o script que força a extração apenas da primeira camada ([0]) e formata a saída como PNG:

#!/bin/bash
# $1 = arquivo de entrada
# $2 = dimensao maxima do thumbnail
# $3 = arquivo temporario de saida

/usr/bin/convert "psd:$1[0]" -thumbnail "$2" "png:$3"

Dê permissão de execução:

sudo chmod +x /usr/local/bin/psd-thumbnailer

Por que [0] é vital: Arquivos do Photoshop contêm dezenas de camadas. O seletor [0] diz ao ImageMagick para extrair apenas a imagem composta principal, evitando travamentos ao ler arquivos de centenas de megabytes.

Passo 2: Criar a regra de thumbnailer do sistema#

Crie a definição em /usr/share/thumbnailers/psd.thumbnailer:

sudo nano /usr/share/thumbnailers/psd.thumbnailer

Conteúdo do arquivo:

[Thumbnailer Entry]
TryExec=/usr/local/bin/psd-thumbnailer
Exec=/usr/local/bin/psd-thumbnailer %i %s %o
MimeType=image/vnd.adobe.photoshop;image/x-photoshop;image/photoshop;

3. Falsos jpgs: identificando erros por magic bytes#

Em alguns casos, fotos com extensão .jpg teimam em não exibir miniatura. Ao abrir o Nemo com G_MESSAGES_DEBUG=all, surge o alerta:

(nemo:5241): CinnamonDesktop-WARNING **: Error creating thumbnail for file:///home/user/Downloads/foto.jpg: Erro ao interpretar o arquivo de imagem JPEG (Not a JPEG file: starts with 0x3c 0x3f)

A causa raiz#

Um JPEG autêntico começa com a assinatura hexadecimal 0xFF 0xD8 (Start of Image). A sequência 0x3c 0x3f corresponde a <? em ASCII.

Isso significa que o arquivo renomeado como .jpg era, na verdade, uma página HTML de erro ou script PHP corrompido baixado pelo navegador. O visualizador descarta o arquivo porque o cabeçalho não confere com o padrão binário.


4. Falhas em arquivos SVG (XML malformado)#

Para vetores .svg quebrados, o erro comum é:

** (gdk-pixbuf-thumbnailer:11506): WARNING **: Could not thumbnail 'file:///mnt/storage/logo.svg': XML parse error: Extra content at the end of the document

Esse erro da librsvg acontece quando há lixo de texto concatenado após o fechamento da tag </svg>.

Para sanitizar o SVG via terminal:

# Truncar o arquivo exatamente no fechamento da tag SVG
sed -i.bak '/<\/svg>/q' "/mnt/storage/logo.svg"

# Validar a integridade do XML
xmllint --noout "/mnt/storage/logo.svg"

Checklist de manutenção de miniaturas no Linux#

Quando as miniaturas pararem de carregar no seu desktop:

  1. Limpe o cache de falha e de miniaturas: O Nemo não tenta renderizar novamente arquivos que já estão registrados na pasta de falhas:
rm -rf ~/.cache/thumbnails/fail/*
rm -rf ~/.cache/thumbnails/large/*
rm -rf ~/.cache/thumbnails/normal/*
nemo -q
  1. Evite rodar o gerenciador como root: Abrir o Nemo via sudo nemo muda o dono das pastas de cache para root:root, impedindo que o seu usuário comum grave novas miniaturas.
  2. Use wrappers para ferramentas CLI: Ao integrar utilitários externos no /usr/share/thumbnailers/, sempre encapsule as variáveis em scripts bash com aspas duplas ("$1") para suportar pastas com espaços e parênteses.

Este artigo foi útil?

Deixe uma reação rápida para apoiar o conteúdo:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários