Cal*_*Cat 8 nautilus thumbnails caja nemo
Nautilus(GNOME 文件)和基于 Nautilus 的文件管理器(即 Nemo 和 Caja)已经使用其默认缩略图器为许多常见文件类型创建了预览。还有许多其他缩略图可以从官方存储库安装,以便为更多文件创建缩略图。但是,自然有某些类型的文件不存在缩略图。我遇到过的此类类型的一些示例包括 WebP、PSD、JP2、APK 等。
我需要了解什么或必须采取哪些步骤来创建可供 Nautilus、Nemo 或 Caja 用来生成这些文件类型的缩略图的自定义缩略图器?
Cal*_*Cat 21
以下部分提供了有关缩略图过程的重要详细信息,以及为 Nautilus、Nemo 和 Caja创建自定义缩略图器的步骤(上述文档中未提及)。
\n需要注意的是,Nautilus是指实现缩略图沙箱的最新版本的 Nautilus 。libgnome-desktop
在 Ubuntu 上,它们是使用3.28.2或更高版本的 Nautilus 版本。
要生成文件的缩略图,需要两个基本条件:
\nconvert
、ffmpeg
、gdk-pixbuf-thumbnailer
等。.thumbnailer
:扩展名为 或 的~/.local/share/thumbnailers
文本文件/usr/share/thumbnailers
。该文件将缩略图程序连接到程序将为其创建缩略图的文件类型。缩略图条目看起来像这样:\n[Thumbnailer Entry]\nTryExec=/usr/bin/gdk-pixbuf-thumbnailer\nExec=/usr/bin/gdk-pixbuf-thumbnailer -s %s %i %o\nMimeType=image/jpeg;image/png;image/gif;image/tiff;\n
Run Code Online (Sandbox Code Playgroud)\n每个缩略图条目均采用密钥文件格式,支持三个密钥:
\nTryExec
:(可选)该键用于检查是否安装了缩略图程序。它的值是缩略图程序的路径或可以在$PATH
环境变量中找到的程序的名称。如果程序不存在或不可执行,则Exec
密钥中的命令将不会被执行。然而,Nautilus会忽略此键并始终尝试执行缩略图程序。
Exec
:(必填)生成缩略图所要执行的命令。该命令由缩略图程序的完整路径或其名称(在当前目录中$PATH
)组成,后跟空格分隔的参数。参数可以是在传递给缩略图之前自动替换的几个特殊参数之一:
%i
:(如果未使用则为必需%u
)正在缩略图的文件的完整路径,例如:\n/home/calico/Pictures/image.jpg\n/home/calico/Music/Pop Music/audio.mp3\n
Run Code Online (Sandbox Code Playgroud)\n路径作为单个参数传递给缩略图程序,无论它是否包含空格或其他特殊字符。%u
:(如果未使用则为必需%i
)正在缩略图化的文件的 URI。%u
应该使用而不是%i
缩略图程序是否可以处理 URI 语法。本地文件作为 传递file://<full-path-to-file>
,例如:\nfile:///home/calico/Pictures/image.jpg\nfile:///home/calico/Music/Pop%20Music/audio.mp3\n
Run Code Online (Sandbox Code Playgroud)\n%o
:(必填)输出缩略图的完整路径。Nautilus、Nemo 和 Caja 分别将输出图像写入:\n/tmp/gnome-desktop-thumbnailer-XXXXXX/gnome-desktop-thumbnailer.png\n/tmp/.gnome_desktop_thumbnail.XXXXXX\n/tmp/.mate_desktop_thumbnail.XXXXXX\n
Run Code Online (Sandbox Code Playgroud)\nXXXXXX
是由大写字母和数字组成的 6 个字符的字符串。每个输出图像文件都被赋予一个唯一的XXXXXX
.%s
:(可选)默认缩略图大小(以像素为单位)。如果使用,%s
则替换为128
(由 Caja 或较旧版本的 Nemo)或256
(由 Nautilus 或较新版本的 Nemo)。MimeType
:(必需)缩略图程序将为其生成缩略图的文件的MIME 类型。多个 MIME 类型之间用分号分隔。有关如何获取每个文件的 mime 类型的详细信息,请参阅创建自定义缩略图程序的步骤部分。
密钥注释Exec
:
%i
或之一。%u
%%
(例如,用于50%%
50 %)。我们以上面的缩略图条目为例:gdk-pixbuf-thumbnailer
用作 JPEG、PNG、GIF 和 TIFF 图像的缩略图程序。如果我们打开一个文件夹,例如,/home/calico/Pictures
其中包含image.gif
:
/usr/bin/gdk-pixbuf-thumbnailer -s 256 /home/calico/Pictures/image.gif /tmp/.gnome_desktop_thumbnail.1ABC20\n
Run Code Online (Sandbox Code Playgroud)\n/usr/bin/gdk-pixbuf-thumbnailer -s 128 /home/calico/Pictures/image.gif /tmp/.mate_desktop_thumbnail.DE3450\n
Run Code Online (Sandbox Code Playgroud)\nlibgnome-desktop
3.37.2 或更高版本)将执行以下操作:\n/tmp/gnome-desktop-thumbnailer-67FG80
./tmp
到沙箱中。image.gif
。/tmp/image.gif
/usr/bin/gdk-pixbuf-thumbnailer -s 256 /tmp/image.gif /tmp/gnome-desktop-thumbnailer.png\n
Run Code Online (Sandbox Code Playgroud)\n从缩略图条目中只执行一个命令:后面的第一个字符串(用空格与其他字符串分隔)Exec=
被视为要执行的程序的名称或路径,其后的所有内容都被视为要传递给程序的参数。然而,在很多情况下,需要多个命令来创建正确的缩略图。例如,dwebp
可以通过一个命令将 WebP 图像转换为 PNG 格式,但它需要其他程序(例如webpmux
和bc
)的帮助来计算输出图像的适当宽度和高度。在这种情况下,将使用缩略图脚本。
/home/calico/Pictures/image.jpg\n/home/calico/Music/Pop Music/audio.mp3\n
Run Code Online (Sandbox Code Playgroud)\n脚本可以直接用作要执行的程序,也可以用作包含命令的文本文件。例如:
\nfile:///home/calico/Pictures/image.jpg\nfile:///home/calico/Music/Pop%20Music/audio.mp3\n
Run Code Online (Sandbox Code Playgroud)\n/tmp/gnome-desktop-thumbnailer-XXXXXX/gnome-desktop-thumbnailer.png\n/tmp/.gnome_desktop_thumbnail.XXXXXX\n/tmp/.mate_desktop_thumbnail.XXXXXX\n
Run Code Online (Sandbox Code Playgroud)\n如果使用 shell 脚本,则脚本路径后面的参数(例如%i
、%s
和)将被分配给脚本中的%o
位置参数($1
、$2
、等)。$3
请参阅此答案和本文,了解分别为 WebP 图像和 APK 文件创建缩略图的 shell 脚本示例,或参阅本文,了解为 MRC 图像创建缩略图的 Python 脚本示例。
\n查找并安装缩略图程序
\n找到一个可以将您想要缩略图的文件类型转换为 PNG 格式的程序。在安装新程序之前,您可能想尝试预装的缩略图:
\ngdk-pixbuf-thumbnailer
:GNOME 和基于 GNOME 的桌面上图像的默认缩略图。totem-video-thumbnailer
和ffmpegthumbnailer
:分别是 GNOME 和 Cinnamon/MATE 桌面上视频的默认缩略图。evince-thumbnailer
、xreader-thumbnailer
和atril-thumbnailer
:分别是 GNOME、Cinnamon 和 MATE 桌面上 PDF 和其他文档文件的默认缩略图。gnome-thumbnail-font
和mate-thumbnail-font
:分别是 GNOME/Cinnamon 和 MATE 桌面上字体的默认缩略图。尝试在终端中手动调用它们以从输入文件创建 PNG 图像。例如:
\ncd ~/Pictures\ngdk-pixbuf-thumbnailer -s 256 example.webp out.png\nffmpegthumbnailer -s 256 -i example.webp -o out.png\n
Run Code Online (Sandbox Code Playgroud)\n如果这些程序无法处理您想要缩略图的文件类型,则需要寻找新的缩略图程序。convert
(来自imagemagick
) 和ffmpeg
通常用于支持多种文件格式。您可以使用以下命令安装它们:
sudo apt install imagemagick\nsudo apt install ffmpeg\n
Run Code Online (Sandbox Code Playgroud)\n您还可以选择使用专门处理某些类型文件的程序。例如,dwebp
和opj_decompress
分别专门用于解码 WebP 图像和 JPEG-2000 图像。
获取MIME 类型要缩略图的文件的
\n或者,您可以使用xdg-mime
. 例如,要获取example.pdf
in的 mime 类型~/Documents
,请发出以下命令:
xdg-mime query filetype ~/Documents/example.pdf\n
Run Code Online (Sandbox Code Playgroud)\n创建缩略图脚本(如果需要)
\nnano
或 )gedit
创建包含这些命令的缩略图脚本。/usr/local/bin
建议。chmod +x /home/calico/Documents/webp-thumbnailer-script\nsudo chmod +x /usr/local/bin/psd-thumbnailer-script\n
Run Code Online (Sandbox Code Playgroud)\n使用文本编辑器创建缩略图条目(带有.thumbnailer
扩展名的文本文件)。为其指定一个描述性名称,例如webp.thumbnailer
或psd.thumbnailer
。
将缩略图条目放置在~/.local/share/thumbnailers
或中/usr/share/thumbnailers
,以便分别可供当前用户或所有用户使用。如果您打算将其放入/usr/share/thumbnailers
,强烈建议nano
使用创建和编辑条目。例如:
sudo nano /usr/share/thumbnailers/webp.thumbnailer\n
Run Code Online (Sandbox Code Playgroud)\n至于条目的内容(详见上面的Thumbnailer & Thumbnailer Entry):
\n[Thumbnailer Entry]
TryExec
如果要检查程序或脚本是否存在且可执行,Exec
键中传递给它的参数。如果使用缩略图脚本,则它必须是程序或参数(请参阅缩略图脚本)。MimeType
。如果此键包含多个 mime 类型,请用分号分隔每个类型 (;
) 分隔每个类型,并且可以选择用分号结束键的值。nautilus -q\nnemo -q\ncaja -q\n
Run Code Online (Sandbox Code Playgroud)\nrm -r ~/.cache/thumbnails/fail\n
Run Code Online (Sandbox Code Playgroud)\nrm -r ~/.cache/thumbnails/*\n
Run Code Online (Sandbox Code Playgroud)\nMimeType
现在应该有缩略图。如果没有,则意味着出了问题,但不用担心,这就是以下部分的目的。找出缩略图出现问题的最佳方法之一是在启用调试消息的情况下运行文件管理器:
\nnautilus -q\nnemo -q\ncaja -q\n
Run Code Online (Sandbox Code Playgroud)\nrm -r ~/.cache/thumbnails/*\n
Run Code Online (Sandbox Code Playgroud)\nG_MESSAGES_DEBUG=all NAUTILUS_DEBUG=Window nautilus\n
Run Code Online (Sandbox Code Playgroud)\nnemo --debug\n
Run Code Online (Sandbox Code Playgroud)\nrun
并按Enter\ngdb caja\n
Run Code Online (Sandbox Code Playgroud)\n~/.cache/thumbnails
,它现在应该是空的。large
或目录。这意味着缩略图成功并且已为您的文件生成了缩略图。normal
~/.cache/thumbnails
~/.cache/thumbnails
(即目录保持为空)。这意味着键中的命令Exec
未执行,因此未创建缩略图。请参阅下一节了解造成这种情况的可能原因。fail
在 中创建一个目录~/.cache/thumbnails
。这意味着文件管理器确实尝试执行密钥中的命令Exec
,但有一些东西阻止了缩略图的创建,导致缩略图失败。来自终端的错误消息可能会提供有关出现问题的线索。您还可以在下一节中找到一些常见原因。quit
并按Enter。笔记:
\n对于不提供该--debug
选项的旧版本 Nemo,请改用gdb
:
gdb nemo\n
Run Code Online (Sandbox Code Playgroud)\n如果您在 MATE 会话中使用 Caja(例如在 Ubuntu MATE 上),则必须gdb
以 root 身份运行(有关更多详细信息,请参阅此内容):
sudo gdb caja\n
Run Code Online (Sandbox Code Playgroud)\n在这种情况下,您只能对/usr/share/thumbnailers
主目录外的缩略图条目和缩略图脚本进行故障排除。
或者,您可以使用Eclipse来调试 Caja 和缩略图。
\n本节讨论几种可能导致没有缩略图或缩略图失败的情况。
\nNautilus、Nemo 和 Caja 设置了可缩略图文件的大小限制。大小超过此限制的文件将仅获得通用图标,无论是否存在适合其类型的有效缩略图程序。
\n要更改此大小限制:
\n当您通过网络浏览其他计算机上的文件时,Nautilus、Nemo 和 Caja 默认情况下不会为它们创建缩略图。
\n要启用这些文件的缩略图预览:
\nNemo可能会禁用某些文件夹中文件的缩略图:
\n要重新启用文件夹中文件的缩略图预览:
\n文件管理器可能会禁用某些 mime 类型的缩略图。要检查是否属于这种情况,请分别为 Nautilus、Nemo 和 Caja 发出以下命令之一:
\ngsettings get org.gnome.desktop.thumbnailers disable\ngsettings get org.cinnamon.desktop.thumbnailers disable\ngsettings get org.mate.thumbnailers disable\n
Run Code Online (Sandbox Code Playgroud)\n如果结果是[]
或[\'\']
,则文件管理器不会禁用任何文件类型的缩略图。但是,如果括号中包含 mime 类型,例如[\'image/jp2\']
、[\'image/jp2\', \'application/x-ms-dos-executable\']
等,则不会创建这些类型的文件的缩略图。
要启用所有文件类型的缩略图预览,请发出以下命令之一(分别适用于 Nautilus、Nemo 和 Caja):
\ngsettings set org.gnome.desktop.thumbnailers disable "[]"\ngsettings set org.cinnamon.desktop.thumbnailers disable "[]"\ngsettings set org.mate.thumbnailers disable "[]"\n
Run Code Online (Sandbox Code Playgroud)\n或者,您可以使用dconf 编辑器:
\ndconf-editor
:\nsudo apt install dconf-editor\n
Run Code Online (Sandbox Code Playgroud)\n[]
以便[\'\']
为所有文件类型启用缩略图,或者有选择地从列表中删除某些 MIME 类型以仅重新启用这些类型的预览。可能会禁用所有文件的缩略图预览。有两个地方需要检查:
\n文件管理器首选项:
\n桌面环境设置:
\n分别为 Nautilus、Nemo 和 Caja 发出以下命令之一:
\ngsettings get org.gnome.desktop.thumbnailers disable-all\ngsettings get org.cinnamon.desktop.thumbnailers disable-all\ngsettings get org.mate.thumbnailers disable-all\n
Run Code Online (Sandbox Code Playgroud)\n结果应该是false
,这是默认值,但如果是true
,则所有缩略图器都将被禁用,因此不会生成任何缩略图。
要重新启用缩略图程序,请发出以下命令之一(分别适用于 Nautilus、Nemo 和 Caja):
\ngsettings set org.gnome.desktop.thumbnailers disable-all false\ngsettings set org.cinnamon.desktop.thumbnailers disable-all false\ngsettings set org.mate.thumbnailers disable-all false\n
Run Code Online (Sandbox Code Playgroud)\n或者,您可以使用dconf 编辑器:
\ndconf-editor
:\nsudo apt install dconf-editor\n
Run Code Online (Sandbox Code Playgroud)\n缩略图程序对某些文件类型进行缩略图处理所需的编解码器可能不可用,因为它们未与该程序捆绑在一起或由其依赖项之一提供。例如,totem-video-thumbnailer
需要gstreamer1.0-libav
缩略图 MP4 和其他视频文件,但gstreamer1.0-libav
只是建议的软件包,因此不随totem-video-thumbnailer
.
要查找丢失的编解码器,请尝试使用终端中的缩略图程序从要缩略图类型的文件创建 PNG 图像。来自终端的错误消息可能会提供有关转换所需的编解码器库的线索。如果程序有一个verbose
选项,您可能希望使用它来获取更多调试信息。例如:
totem-video-thumbnailer --size 256 --verbose in.webp out.png\n
Run Code Online (Sandbox Code Playgroud)\n另一种方法是尝试建议的软件包,看看它们是否提供所需的编解码器:
\napt-cache depends
获取建议包的列表。例如:\napt-cache depends totem | grep Suggest\napt-cache depends ffmpegthumbnailer | grep Suggest\n
Run Code Online (Sandbox Code Playgroud)\napt-cache show
获取每个建议包的信息。例如:\napt-cache show gstreamer1.0-libav\napt-cache show gstreamer1.0-plugins-bad\n
Run Code Online (Sandbox Code Playgroud)\n应该注意的是,也有可能该编解码器在官方存储库中不可用,或者相关程序根本不支持您尝试缩略图的文件类型。在这种情况下,建议访问该程序的官方网站以获取有关支持格式的更多信息或仅使用其他缩略图。
\n您尝试预览的文件可能具有不正确的文件扩展名,这会导致调用不适当的缩略图程序来对其进行缩略图处理。举个例子,我曾经有一些带有.jpg
扩展名的文件,但它们实际上是 WebP 图像。不管怎样,文件管理器将它们视为 JPEG 图像,并将它们传递给gdk-pixbuf-thumbnailer
. 由于该程序无法处理 WebP 图像,因此缩略图失败。
要解决此问题,您需要使用该file
工具获取这些文件的真实类型并相应地重命名它们。image.png
例如,要检查in的类型~/Pictures
,请发出以下命令:
file ~/Pictures/image.png\n
Run Code Online (Sandbox Code Playgroud)\n如果文件确实是 PNG 图像,则输出将类似于以下内容:
\n/home/calico/Pictures/image.png: PNG image data, 1024 x 640, 8-bit/color RGB, non-interlaced\n
Run Code Online (Sandbox Code Playgroud)\n当file
扫描文件的内容以确定其类型时,即使您尝试为文件提供不同的扩展名,结果也将是相同的:
/home/calico/Pictures/image.png.gif: PNG image data, 1024 x 640, 8-bit/color RGB, non-interlaced\n
Run Code Online (Sandbox Code Playgroud)\n有趣的是,如果您在更改扩展名之前和之后检查文件的 mime-type xdg-mime
,将会出现两种不同的结果:
$ xdg-mime query filetype ~/Pictures/image.png\nimage/png\n$ mv ~/Pictures/image.png ~/Pictures/image.png.gif\n$ xdg-mime query filetype ~/Pictures/image.png.gif\nimage/gif\n
Run Code Online (Sandbox Code Playgroud)\n从Thumbnailer 和 Thumbnailer Entry部分可以看出,Nemo 和 Caja(以及旧版本的 Nautilus)为每个输出缩略图提供了一个随机.XXXXXX
后缀,而不是图像扩展名。如果缩略图程序不默认以 PNG 格式(或 支持的格式gdk-pixbuf-thumbnailer
)写入文件,则它将无法为这些文件管理器创建缩略图。
幸运的是,设计为缩略图的程序(例如ffmpegthumbnailer
和totem-video-thumbnailer
)通常默认创建 PNG 缩略图。对于不默认这样做的其他程序,必须显式指定输出文件的格式以确保生成有效的缩略图。
最好程序有一个方便的选项来指定格式。例如,convert
具有png:
和ffmpeg
具有-f apng
:
/usr/bin/gdk-pixbuf-thumbnailer -s 256 /home/calico/Pictures/image.gif /tmp/.gnome_desktop_thumbnail.1ABC20\n
Run Code Online (Sandbox Code Playgroud)\n/usr/bin/gdk-pixbuf-thumbnailer -s 128 /home/calico/Pictures/image.gif /tmp/.mate_desktop_thumbnail.DE3450\n
Run Code Online (Sandbox Code Playgroud)\n对于没有此类选项的程序,通用解决方案是首先为输出文件指定后缀.png
,然后将其重命名为文件管理器给出的原始文件名。这可以在 shell 脚本中完成。例如:
/usr/bin/gdk-pixbuf-thumbnailer -s 256 /tmp/image.gif /tmp/gnome-desktop-thumbnailer.png\n
Run Code Online (Sandbox Code Playgroud)\n尽管输出图像文件可以是任何支持的格式gdk-pixbuf-thumbnailer
(JPEG、PNG、BMP、GIF、TGA 等),但出于安全原因,建议以 PNG 格式创建缩略图。
归档时间: |
|
查看次数: |
6453 次 |
最近记录: |