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

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

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

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

请密切注意application-x-foox-foofoo在整个过程中的使用。

注意:在更新Ubuntu教程时,在示例中可能更好地区分foo应用程序, foo扩展名和foo mimetype以避免混淆前进。 即lmms使用*.mmpzx-lmms-project ,这有助于解决这个问题。

  • 获取可扩展的SVG图标(提供示例)
  •  wget http://soqr.fr/testsvg/zebra.svg -O ~/Desktop/application-x-foo.svg 
  • 以XML格式创建mime-ingest文件:
  •     Foo File    
  • 将其保存到~/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添加了相应的行,但请确认是否仍然需要这一行并编辑此帖以反映这一点。
  • 注销然后重新登录。图标和关联都应该有效。
  • 从来没有,从您安装脚本编辑/ etc中的现有文件! 这是一个非常糟糕的主意。 除此之外,您不需要编辑/etc/mime.types

    您的xml文件仍然是错误的,并且在错误的位置它应该是/usr/share/mime/text/x-foo.xml

              

    记下内容类型映射:都是text / foo。

    当您希望自定义文档获取图标时,您有两种选择。 (1),系统会查找它的扩展名并根据扩展名给它一个图标。 (2)系统将在文件中的特定偏移处查找魔术字符串。 我选择了魔术,因为我不喜欢在文件管理器中查看我的文件名的扩展名。

    为了使用魔法,我将所有文档保存为json文件。 它是一种通用存储协议,因此对我来说效果很好。 保存文件时,我按字母顺序对键进行排序,这会使魔术键显示为文件中的第一个键。 发生这种情况是因为我把零作为“0foomagic”的第一个字符,并且我确保在我的文档中没有其他密钥可以搞乱这个。

    在上面的xml中引用这一行,

      

    一个json文件在它命中我的魔法键0foomagic之前有两个字符。 所以我将偏移量设置为2。

    如果您更喜欢使用扩展名,只需取出魔术条目,并将其替换为:

      

    其中.foo是您的应用程序文档扩展名。

    (2)使用以下命令更新Mime数据库:

     sudo update-mime-database /usr/share/mime 

    (3)显示自定义文档的图标必须以其特殊的方式命名才能使用。 必须使用内容类型映射它们。 创建一个文档图标,并使用前面提到的映射的内容类型约定命名它(期望使用破折号而不是正斜杠):

     text-foo.svg 

    text是内容类型,foo是您的应用程序名称,与以前相同。

    您需要将此图标复制到您将使​​用的任何主题。 它未被复制的任何主题都不会显示带有text-foo.svg的foo文档。

    主题设置有两种不同的方式,最终你会得到更多关于某些主题的工作,例如:

    对于Gnome Theme,您只需要将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 update-desktop-database

    测试Foo

    因为创建请求你创建json文件会让这个答案负担过重,所以只需使用gedit包装器foo来欺骗它制作一个内部有0foomagic的foo doc。

    (1)在命令行输入foo,你应该看到gedit launch。

    (2)在gedit的空文本文件中,添加两个字符,然后添加魔术字符串:

     xx0foomagic 

    (3)保存并关闭gedit。 现在查看文件管理器,您将看到您的新文档具有text-foo.svg图标。 双击它,foo将打开它。 普雷斯托! 这是freedesktoporg魔术!

    关于这个过程你还可以了解很多其他的东西,但这至少可以让你在Ubuntu上使用你自己的应用程序启动文档图标。

    如果您有最佳实践方法,请为此答案做出贡献或创建新答案。