如何为应用程序的自定义文档添加自定义图标?此外,如何让文件管理器在用户双击这些文档时打开它们?
我必须在命令行上执行此操作,因为该解决方案将在安装脚本中使用。
答案1
可以找到正确的解决方案 -->这里<--,但foo
下面提供了一个版本来直接回答这个问题。
application-x-foo
请密切注意、x-foo
和的使用,foo
因为它们会不断变化。
笔记:更新 Ubuntu 教程时,最好在示例中区分foo
应用程序、foo
扩展和foo
mimetype,以避免产生混淆。例如,lmms
使用*.mmpz
和x-lmms-project
,这对解决这个问题很有帮助。
wget http://soqr.fr/testsvg/zebra.svg -O ~/Desktop/application-x-foo.svg
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/x-foo">
<comment>Foo File</comment>
<glob pattern="*.foo"/>
</mime-type>
</mime-info>
~/Desktop/x-foo.xml
[Desktop Entry]
Version=1.0.0
Encoding=UTF-8
Name=FooGazi
GenericName=Foo Application
Comment=This is my Foo Application
Exec=/usr/bin/foo
# Please change, system-shutdown.svg used only as example
Icon=/usr/share/icons/Humanity/actions/48/system-shutdown.svg
StartupNotify=true
Type=Application
MimeType=application/x-foo;
~/Desktop/foo.desktop
sudo xdg-mime install --mode system ~/Desktop/x-foo.xml
sudo cp ~/Desktop/foo.desktop /usr/share/applications
sudo cp ~/Desktop/application-x-foo.svg /usr/share/icons/gnome/scalable/mimetypes/
sudo xdg-mime default foo.desktop application/x-foo
sudo update-mime-database /usr/share/mime
sudo gtk-update-icon-cache /usr/share/icons/gnome/ -f
/etc/mime.types
但请确认是否仍然需要这样做,并编辑此帖子以反映这一点。
答案2
永远不要从安装脚本编辑 /etc 中的现有文件!这是一个非常糟糕的主意。此外,您不需要编辑 /etc/mime.types
你的 xml 文件仍然是错误的,在错误的位置它应该是 /usr/share/mime/text/x-foo.xml
<?xml version="1.0" encoding="UTF-8"?>
<mime-type xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="text/x-foo">
<comment>Example file type </comment>
<glob pattern="*.foo"/>
</mime-type>
第三方图标通常安装到:/usr/share/icons/hicolor/scalable/mimetypes
答案3
我无法通过其他答案使事情正常运转,但我能够按照以下方式使事情正常运转。
这已经过测试并且可以在以下活动磁盘上运行:
Ubuntu 14.04
Lubuntu 14.04
Ubuntu-Gnome 14.04
制作 Foo 包装器应用
为了这个例子,我为 gedit 创建了一个名为 foo 的包装器,以作为一个完整的工作示例。
(1)以 sudo 身份创建一个包含以下内容的文件:
编辑%f
(2)另存为:
/usr/bin/foo
(3)使其可执行:
sudo chmod + x /usr/bin/foo 目录
让 Foo 应用程序显示在菜单中,并显示其图标
(1)创建应用程序图像。Gimp 或 Inkscape 都是出色的程序。创建图像后,将其导出为 png 或 svg。
(2)为图像命名。图像名称应与您在命令行上启动应用程序时使用的名称相同。本例中的应用程序名为:foo。因此正确的名称应该是 foo.png 或 foo.svg。
(3)将图像复制到:
/usr/share/icons/foo.svg
(4)创建桌面条目。打开 gedit、leafpad 或您的 IDE。使用以下数据创建一个新文档:
[Desktop Entry]
Exec=foo %f
Icon=foo
Terminal=false
Type=Application
Categories=Office;
StartupNotify=true
MimeType=text/foo
Name=Foo
GenericName=Foo
Comment=Compose, Edit, and View Foo Documents
记下 Exec、Icon 和 MimeType 键:
执行官:在可执行文件名称后面添加了 %f。必须添加该选项,这样当用户双击 foo 文档时,系统将执行 foo 应用程序并通过 %f 参数将该 foo 文档路径发送给该应用程序。
图标:只需要名称。使用绝对路径时,我没有得到很好的结果。
Mime类型:文本/foo。文本被称为‘内容类型’。富当然是应用程序名称。其他步骤中必须遵守此映射约定。例如,您不想在另一个步骤中使用 application/foo。这样做会导致您无法保持 foo 的内容类型一致,并且会失败。
(5)将此文件另存为:
foo.desktop
该文件的名称是您的应用程序启动名称,并且必须具有扩展桌面。现在,必须将其复制到:
/usr/share/applications
此时,您将在菜单中的 Office 类别下看到您的应用程序,并且您的图标也可见。
给你的申请文件赋予自己的图标
(1)创建一个包含以下内容的 mime xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="text/foo">
<mime-type type="text/foo">
<magic>
<match type="string" offset="2" value="0foomagic"/>
</magic>
</mime-type>
</mime-info>
注意内容类型映射:两者都是text/foo。
当您希望自定义文档获得其图标时,您有两种选择。 (1) 系统将查找其扩展名并根据扩展名为其指定图标。 (2) 系统将在文件中的特定偏移处查找魔术字符串。 我选择魔术,因为我不喜欢在文件管理器中查看文件名的扩展名。
为了使用 magic,我将所有文档保存为 json 文件。这是一种通用存储协议,因此对我来说效果很好。保存文件时,我会按字母顺序对键进行排序,这会导致 magic 键显示为文件中的第一个键。发生这种情况的原因是我将零作为“0foomagic”的第一个字符,并且我确保我的文档中不会出现其他键来搞乱这种情况。
参考上面 xml 中的这一行,
<match type="string" offset="2" value="0foomagic"/>
json 文件在命中我的魔法键 0foomagic 之前有两个字符。因此我将偏移量设置为 2。
如果您更喜欢使用扩展,只需取出魔术条目,然后将其替换为:
<glob pattern="*.foo"/>
其中 .foo 是您的应用程序文档扩展名。
(2)用这个命令更新 Mime 数据库:
sudo update-mime-database /usr/share/mime
(3) 自定义文档中显示的图标必须以特殊方式命名,以便它们正常工作。它们必须与内容类型映射。创建一个文档图标,并使用前面提到的映射内容类型约定对其进行命名(期望使用破折号而不是正斜杠):
text-foo.svg
text 是内容类型,foo 是您的应用程序名称,与之前相同。
您需要将此图标复制到您要使用的任何主题。任何未复制到的主题都不会显示带有 text-foo.svg 的 foo 文档。
主题设置有两种不同的方式,您最终会用到一些主题,例如:
对于 Gnome 主题,您只需将 text-foo.svg 复制到一个位置:/usr/share/icons/gnome/scalable/mimetypes/
切换到 gnome 主题,然后您就完成了这一步。
但是,例如,如果您使用 hicolor 主题,则需要做更多工作。您必须为主题要求的每个目录创建一个图标大小,例如:
/usr/share/icons/hicolor/16x16/mimetypes/
/usr/share/icons/hicolor/22x22/mimetypes/
...
等等等等
现在您已经复制了图标,图标数据库必须更新。我注意到有两个命令 (gtk-update-icon-cache 和 gtk-update-icon-cache3.0),我只需调用这两个命令,并没有发现任何问题。必须在您添加了图标的任何主题目录中调用它们。
如果你添加了 gnome 主题,那么:
sudo gtk-update-icon-cache /usr/share/icons/gnome/
如果你添加了 hicolor 主题,那么:
sudo gtk-update-icon-cache /usr/share/icons/hicolor
现在,只需再做一件事,您就应该看到一切正常,甚至无需登录和退出。更新桌面数据库:
sudo 更新桌面数据库
测试Foo
由于要求您创建 json 文件会使此答案负担过重,因此只需使用 foo(gedit 包装器)来诱骗它制作一个包含 0foomagic 的 foo 文档。
(1)在命令行中输入 foo,您应该会看到 gedit 启动。
(2)在 gedit 中的空文本文件中,添加两个字符,然后添加魔术字符串:
xx0foomagic
(3)保存并关闭 gedit。现在查看文件管理器,您将看到新文档有 text-foo.svg 图标。双击它,foo 将打开它。瞧!这就是 freedesktoporg 的魔力!
关于这个过程您还可以学到很多其他的东西,但这至少可以让您在 Ubuntu 上使用自己的应用程序启动文档图标。
请为这个答案做出贡献,或者创建新的答案(如果有)最佳实践的方法。