https://www.jianshu.com/p/4617e8e600ad
上面这篇文章写的很详细了,这次也是参考于此。
先了解一下MIME Type:
1.MIME Type 是用于描述文件的类型的一种表述方法。
2.MIME Type指定了文件的类型名称、描述、图标信息,同时通过与.desktop应用程序描述文件整合,指定了文件的打开方式。
3.MIME type是被file manager使用,而不是Gnome或者Ubuntu系统本身。
应用程序描述文件(/usr/share/applications/.desktop),这个文件描述了系统上安装的应用程序的参数特征(名称、启动方法、图标、支持的MIME type)。
文件类型描述数据库,这个数据库描述了每一个文件类型(MIME type)的参数特征(名称、、别名、描述、图标),以及满足何种条件才能将其划分到对应的MIME类别。
每个应用程序描述文件虽然已经指定了各自支持的MIME type,但是如果每次文件打开前都去遍历一边所有的描述文件,执行效率将会非常低下。所以就需要一个关联数据库,负责将application(应用程序描述文件)与MIME type(Shared MIME Database)对应起来。这个数据库是一个文本文件静态数据库(/usr/share/applications/mimeinfo.cache)。
用户可以自定义应用程序的打开方式到/usr/share/appliacaions/(.desktop),并通过update-desktop-database /usr/share/applications/命令更新到数据库中。
如果一个MIME type对应到多个.desktop应用程序描述文件,通过抓取而来的mimeinfo.cache并不能决定谁更优先,因为多个.desktop文件之间并没有优先级定义。面对这个场景,最终的默认程序是由mimeapps.list文件定夺的,其由用户人工配置,决定同一个MIME type对应多个.desktop程序时,哪个程序优先级更高,更高优先级的程序即是族中的默认程序。
mimeapps.list在系统中有多个路径存在,如下(文件优先级自高到底):
$XDG_CONFIG_HOME/$desktop-mimeapps.list
$XDG_CONFIG_HOME/mimeapps.list
$XDG_CONFIG_DIRS/$desktop-mimeapps.list
$XDG_CONFIG_DIRS/mimeapps.list
$XDG_DATA_HOME/applications/$desktop-mimeapps.list
$XDG_DATA_HOME/applications/mimeapps.list
$XDG_DATA_DIRS/applications/$desktop-mimeapps.list
$XDG_DATA_DIRS/applications/mimeapps.list
顺便了解一下环境变量
XDG环境变量 | 默认值 |
$XDG_DATA_HOME | $HOME/.local/share |
$XDG_CONFIG_HOME | $HOME/.config |
$XDG_DATA_DIRS | /usr/local/share/:/usr/share/ |
$XDG_CONFIG_DIRS | /etc/xdg |
$XDG_CACHE_HOME | $HOME/.cache |
如何查看文件的MIME Type:mimetype filename (mimetype命令需要安装)
根据文件的MIME Type找到打开方式:gvfs-mime –query filetype
所以通过自定义应用程序描述文件,文件中指定启动方法和支持的MIME Type,将其更新到数据库中,并通过修改mimeapps.list文件就可以更改文件的默认打开程序。