如何为新文档创建 Mime 类型(命令行)?

如何为新文档创建 Mime 类型(命令行)?

如何为应用程序的自定义文档添加自定义图标?此外,如何让文件管理器在用户双击这些文档时打开它们?

我必须在命令行上执行此操作,因为该解决方案将在安装脚本中使用。

答案1

可以找到正确的解决方案 -->这里<--,但foo下面提供了一个版本来直接回答这个问题。

application-x-foo请密切注意、x-foo和的使用,foo因为它们会不断变化。

笔记:更新 Ubuntu 教程时,最好在示例中区分foo应用程序、foo扩展和foomimetype,以避免产生混淆。例如,lmms使用*.mmpzx-lmms-project,这对解决这个问题很有帮助。

  • 获取可扩展的 SVG 图标(提供示例)
  • wget http://soqr.fr/testsvg/zebra.svg -O ~/Desktop/application-x-foo.svg
    

  • 创建 XML 格式的 mime-ingest 文件:
  • <?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

  • 部署 mime 描述
  • sudo xdg-mime install --mode system ~/Desktop/x-foo.xml
    

  • 部署应用程序启动器
  • sudo cp ~/Desktop/foo.desktop /usr/share/applications
    

  • 部署 SVG 图标
  • sudo cp ~/Desktop/application-x-foo.svg /usr/share/icons/gnome/scalable/mimetypes/
    

  • 使用已注册的 mimetype 注册应用程序启动器
  • sudo xdg-mime default foo.desktop application/x-foo
    

  • 更新 mime 缓存
  • 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 上使用自己的应用程序启动文档图标。

    请为这个答案做出贡献,或者创建新的答案(如果有)最佳实践的方法。

    相关内容