如何更改特定文件类型的图标?

我正在尝试更改application/x-hwp文件的图标。我已经将图标添加到正确的位置,并使用assoGiate进行了检查(在阅读this thread之后)。它显示我的所需图标与文件类型关联。然而,Nautilus仍然显示旧图标。我该如何让Nautilus显示正确的图标?

http://askubuntu.com/questions/39139/how-to-change-the-icons-of-multiple-files-from-terminal - Rinzwind
@Rinzwind:谢谢。不幸的是,那个链接解决的是另一个问题。它是基于更改单个文件的图标。我想要更改给定类型的所有文件的默认图标。 - Scott Severance
你正在使用自定义图标主题吗?这可能会干扰应该显示的图标。 - RBurgundy
我正在使用默认的Ambiance主题。不过,这应该无关紧要,因为据我所知,没有图标主题涵盖这种文件类型。当Nautilus不知道显示哪个图标时,我只是得到了默认出现的那个图标。此外,图标主题是有层次结构的,所以如果在当前主题中找不到合适的图标,系统会继续搜索层次结构,最终以hicolor主题结束。我的图标同时安装在ubuntu0mono-dark和hicolor主题中。 - Scott Severance
3个回答

这里有一组指示,可以帮助您为hwp文件获取自定义图标。
打开终端:
  • 检查MIME类型是否存在:grep 'hwp' /etc/mime.types

    如果你得到类似application/x-hwp hwp的输出,跳过下一步。

  • 创建MIME类型:sudo -H gedit /etc/mime.types并添加行application/x-hwp hwp

  • 添加图标(必须命名为application-x-hwp.svg):

    sudo cp PathToIcon/application-x-hwp.svg /usr/share/icons/gnome/scalable/mimetypes
    

    (不要忘记替换PathToIcon)

这里获取了信息


感谢您的建议。我还没有完全试过(到目前为止还没有成功),但是我会发放悬赏,因为其他建议都没有起效,而且在悬赏期限到期之前我将没有机会再去尝试了。 - Scott Severance
你可能应该检查一下你的图标主题是否继承自GNOME(大多数图标主题都是如此)。你可以在图标集目录中的index.theme文件里找到相关信息。 - danjjl
你还需要检查 ~/.local 目录。例如 ~/.local/share,它模仿了 /usr/local/share 文件夹。你本地安装的应用程序(即仅适用于您自己而不是其他登录用户的应用程序)可能会在那里拥有其属性。编辑类似的文件,例如 ~/.local/share/icons/XXXX/XXXX - Robin Hsu
1@danjjl: 你的意思是什么(不要忘记替换PathToIcon)? - JoKalliauer
1@JoKalliauer 在复制图标到 /usr/share/... 的命令中,我指的是 PathToIcon。这需要用你电脑上图标的路径进行替换。_(如果你认为这可以更清晰地表达,请随时提出修改意见)_ - danjjl

主要的技巧是准确找出图标的实际位置。
为了确定这一点,让我们分析HTML图标。图标的命名约定与MIME类型相同,只是将/替换为-,并且不允许使用大写字母。例如,MIME类型text/x-changelog的图标将被命名为text-x-changelog.svg(或png)。HTML的MIME类型是text/html。因此,它的图标将是text-html.*如果我们运行该命令。
find /usr/share/icons/ -type f | grep 'text-html\.'

我们会找到几个放置这些图标的地方:
/usr/share/icons/Humanity/mimes/
/usr/share/icons/gnome/NNxNN/mimetypes/
/usr/share/icons/HighContrast/scalable/mimetypes/

如果我们使用鹦鹉螺浏览器逐个访问它们,我们会发现Humanity/文件夹包含我们当前的图标,gnome/则包含一些较旧的图标。HighContrast/对我们来说不感兴趣。因此,要更改某个图标,我们应该替换位于Humanity/文件夹中的图标。
还要注意,可缩放的text-html.svg图标应该被放置在scalable子文件夹中(这是合乎逻辑的),但实际上它们被放置在不同尺寸的文件夹中,就像光栅PNG文件一样。
在用所需的图标替换所有子文件夹中的图标之后,应更新图标缓存。
sudo gtk-update-icon-cache /usr/share/icons/Humanity

那就是这样。还有另一种确定图标方案优先级的方法-检查它们的index.theme文件。如果我们打开/usr/share/icons/Humanity/index.theme,我们会看到:
Inherits=gnome,hicolor

这意味着来自“gnome”和“hicolor”文件夹的图标优先级较低,而来自“Humanity”文件夹的图标优先级较高。这在这里有解释。
奇怪的是,Nautilus不遵守这些继承规则。当我添加新的MIME类型时,我尝试将其图标放入“/usr/share/icons/gnome/”,“/usr/share/icons/hicolor”,“~/.local/share/icons/hicolor”中,并在每个步骤中更新图标数据库,但都徒劳无功。这些图标在第一个选项卡上在“assogiate”中正确显示,但在Nautilus中从未显示过。但是当我将它们放入“Humanity”文件夹并更新图标数据库时,它们立即出现。
注意:所有这些都适用于默认的图标主题。如果您使用自定义图标主题,请检查实际图标的位置,并在那里添加/更改图标。在较新的发行版中,这些继承规则可能会更改。然后,您应该按照之前的说明找到存储实际图标的新文件夹(如果不再是“Humanity”)。

你还需要检查~/.local。例如~/.local/share,它模仿了文件夹/usr/local/share。你本地安装的应用程序(即只针对你自己的应用程序,而不是其他登录用户)可能会在那里有它们的属性。编辑类似的文件,例如~/.local/share/icons/XXXX/XXXX - Robin Hsu

希望你尝试注销并重新登录以刷新图标缓存。
还要检查一下你的图标是否有适当的大小(用于在nautilus中显示文件类型的那个)。
你可能还忽略了运行 `gtk-update-icon-cache`。
尝试参考这个教程: http://swik.net/Ubuntu/Only+Ubuntu/How+To+Change+File-Type+(mimetype)+Icons+in+Ubuntu/chcrf
试着手动创建一个 icon.theme,我这里有一个从 awn 中的例子:
[Icon Theme]
Name=awn-theme

Directories=scalable

[scalable]
Size=48
MaxSize=256
Context=Apps
Type=Scalable

手册在这里:http://live.gnome.org/GnomeArt/Tutorials/IconThemes

我已经安装了一个48x48的图标,并将Nautilus设置为100%,使用48x48。可惜没有效果。重新登录也没有任何区别。运行gtk-update-icon-cache也没有效果。 - Scott Severance
我更新了我的答案,有帮到你吗? - Chris Hasiński
我没有手动创建一个图标主题,因为我不想要一个新的主题。我只是希望将图标放入hicolor主题中,因为那是所有图标主题的基础。创建一个新的主题会违背我的初衷。 - Scott Severance
这个回答中的swik.net和live.gnome.org链接都已失效。 - undefined