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文件就可以更改文件的默認打開程序。