跳至內容

XDG MIME 應用程式

出自 Arch Linux 中文维基

XDG MIME 應用程式規範基於#共享 MIME 數據庫桌面項,提供默認應用程式

  1. 應用程式通過桌面項描述它們能夠處理哪些 MIME 類型。
  2. desktop-file-utils 註冊了一個 pacman 鈎子,用於構建由桌面項處理的 MIME 類型的緩存數據庫,詳見 update-desktop-database(1)
  3. 應用程式可以通過將 XML 文件放置在 /usr/share/mime/packages/ 中來安裝新的 MIME 類型。
  4. shared-mime-info 註冊了一個 pacman 鈎子,用於構建共享 MIME 信息數據庫緩存,詳見 update-mime-database(1)
  5. 桌面環境和用户可以通過 mimeapps.list 文件更改默認應用程式並添加或刪除 MIME 類型與應用程式的關聯。

共享 MIME 數據庫[編輯 | 編輯原始碼]

XDG 共享 MIME 信息數據庫規範促進了桌面環境之間的共享 MIME 數據庫,並允許應用程式輕鬆地在系統範圍內註冊新的 MIME 類型。

該數據庫是由軟件包在 /usr/share/mime/packages/ 中安裝的 XML 文件構建的,使用來自 shared-mime-info 的工具。

/usr/share/mime/ 中的文件不應直接編輯,但可以在 ~/.local/share/mime/ 樹中為每個用户維護單獨的數據庫。

「URI 方案處理 [...] 通過處理 x-scheme-handler/foo MIME 類型的應用程式來進行,其中 foo 是相關的 URI 方案。」[1]

新的 MIME 類型[編輯 | 編輯原始碼]

這篇文章的某些內容需要擴充。

原因:將擴展名分配給現有 MIME 類型的過程是否不同? (在 Talk:XDG MIME 應用程式 中討論)

此示例定義了一個新的 MIME 類型 application/x-foobar,並將其分配給任何以 .foo 結尾的文件。只需創建以下文件:

~/.local/share/mime/packages/application-x-foobar.xml
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
    <mime-type type="application/x-foobar">
        <comment>foo 文件</comment>
        <icon name="application-x-foobar"/>
        <glob-deleteall/>
        <glob pattern="*.foo"/>
    </mime-type>
</mime-info>

然後更新 MIME 數據庫:

$ update-mime-database ~/.local/share/mime

當然,如果沒有桌面條目與 MIME 類型關聯,這不會產生任何效果。您可能需要創建新的桌面項或修改 mimeapps.list

mimeapps.list[編輯 | 編輯原始碼]

XDG 標準是配置桌面環境最常用的方式。每個 MIME 類型的默認應用程式存儲在 mimeapps.list 文件中,該文件可以存儲在多個位置。它們按照以下順序搜索,前面的關聯優先於後面的關聯:

路徑 用途
~/.config/mimeapps.list 用户覆蓋
/etc/xdg/mimeapps.list 系統範圍的覆蓋
~/.local/share/applications/mimeapps.list (已廢棄)用户覆蓋
/usr/local/share/applications/mimeapps.list
/usr/share/applications/mimeapps.list
分發提供的默認值

此外,還可以在名為 桌面環境-mimeapps.list 的文件中定義 desktop environment 特定的默認應用程式,其中 桌面環境 是桌面環境的名稱(來自 XDG_CURRENT_DESKTOP 環境變量)。例如,/etc/xdg/xfce-mimeapps.list 定義了 Xfce 的系統範圍默認應用程式覆蓋。這些特定桌面的覆蓋優先於相應的非特定桌面文件。例如,/etc/xdg/xfce-mimeapps.list 優先於 /etc/xdg/mimeapps.list,但仍會被 ~/.config/mimeapps.list 覆蓋。

提示:雖然已廢棄,但許多應用程式仍然讀寫 ~/.local/share/applications/mimeapps.list。為了簡化維護,可以將其符號連結到 ~/.config/mimeapps.list
$ ln -s ~/.config/mimeapps.list ~/.local/share/applications/mimeapps.list
注意:您還可能會在這些位置找到名為 defaults.list 的文件。此文件類似於 mimeapps.list,但僅列出默認應用程式(而不是已添加/刪除的關聯)。它現在已廢棄,應手動與 mimeapps.list 合併。

要發現所有被掃描的文件,可以通過設置環境變量 XDG_UTILS_DEBUG_LEVEL=2 啟用調試模式:例如,xdg-mime query default 類型 命令將打印它搜索 MIME 信息的每個配置文件。

格式[編輯 | 編輯原始碼]

考慮以下示例:

mimeapps.list
[Added Associations]
image/jpeg=bar.desktop;baz.desktop
video/H264=bar.desktop
[Removed Associations]
video/H264=baz.desktop
[Default Applications]
image/jpeg=foo.desktop

每個部分將一個或多個桌面條目分配給 MIME 類型。

  • Added Associations 表示應用程式支持打開該 MIME 類型。例如,bar.desktopbaz.desktop 可以打開 JPEG 圖像。這可能會影響您在文件瀏覽器中右鍵點擊文件時看到的應用程式列表。
  • Removed Associations 表示應用程式支持該 MIME 類型。例如,baz.desktop 無法打開 H.264 視頻。
  • Default Applications 表示該應用程式應為打開該 MIME 類型的默認選擇。例如,JPEG 圖像應使用 foo.desktop 打開。這隱式地在應用程式和 MIME 類型之間添加了一個關聯。如果有多個應用程式,它們會按順序嘗試。

每個部分都是可選的,如果不需要可以省略。

工具[編輯 | 編輯原始碼]

雖然可以通過直接編輯 mimeapps.list#共享 MIME 數據庫來配置默認應用程式和 MIME 類型,但有許多工具可以簡化這一過程。這些工具也很重要,因為應用程式可能將文件的打開委託給這些工具,而不是自己嘗試實現 MIME 類型標準。

如果您使用的是桌面環境,應首先檢查它是否提供了自己的工具。應該優先使用這些工具,而不是其他替代方案。

官方的 xdg-utils 包含用於根據 XDG 標準管理 MIME 類型和默認應用程式的工具(xdg-mime)。最重要的是,它提供了 xdg-open,許多應用程式用它來用默認應用程式打開文件。

lsdesktopf[編輯 | 編輯原始碼]

lsdesktopfAUR 提供了幾種搜索 MIME 數據庫和桌面 MIME 條目的方法。

例如,要查看系統中所有與 MIME 類型 video 相關聯的 .desktop 文件的 MIME 擴展名,可以使用 lsdesktopf --gm -gx video,或要在 XML 數據庫文件中搜索,請使用 lsdesktopf --gdx -gx video。要快速了解有多少個且哪些 .desktop 文件可以與某個 MIME 類型關聯,請使用 lsdesktopf --gen-mimeapps。要查看 XML 數據庫文件中的所有文件名擴展名,可以使用 lsdesktopf --gdx -gfx

selectdefaultapplication[編輯 | 編輯原始碼]

selectdefaultapplication-gitAUR 是一個 GUI 應用程式,列出了所有支持各種 MIME 類型的應用程式,並允許您快速將其設置為所有或一些它支持的 MIME 類型的默認應用程式(通過修改 mimeapps.list)。

它還顯示了「可讀」的名稱和文件擴展名,因此您不需要記住 MIME 類型的名稱。

故障排除[編輯 | 編輯原始碼]

如果文件未通過您期望的默認應用程式打開,可能有多個原因。您可能需要檢查每種情況。

缺少桌面條目[編輯 | 編輯原始碼]

需要一個桌面項來將應用程式與 MIME 類型關聯。確保存在這樣的條目,並且可以用它來(手動)打開文件。

缺少關聯[編輯 | 編輯原始碼]

如果應用程式的桌面條目沒有在其 MimeType 鍵下指定 MIME 類型,它在需要打開該類型時將不會被考慮。編輯 mimeapps.list,將桌面文件與 MIME 類型關聯起來。

非默認應用程式[編輯 | 編輯原始碼]

如果桌面條目已與 MIME 類型關聯,可能只是沒有設置為默認值。編輯 mimeapps.list,將其設置為默認關聯。

非標準關聯[編輯 | 編輯原始碼]

應用程式可以忽略或僅部分實現 XDG 標準。檢查是否使用了已廢棄的文件,如 ~/.local/share/applications/mimeapps.list~/.local/share/applications/defaults.list。如果您嘗試從其他應用程式(如 Web 瀏覽器或文件管理器)打開文件,請檢查該應用程式是否有自己的方法來選擇默認應用程式。

.desktop 文件中影響應用程式啟動的變量[編輯 | 編輯原始碼]

這篇文章的某些內容需要擴充。

原因:此處暗示了 MimeType 條目缺失的情況(「即使一個包含必要 MIME 類型描述的應用程式⋯⋯」),儘管這是常見的錯誤原因。有些啟動器可能還會關聯在桌面文件中未顯式列出的 MIME 類型(例如 exo)。其他環境特定的因素也在起作用,例如 Terminal=true 是否會產生影響,儘管後者應當在桌面項中進一步擴展。 (在 Talk:XDG MIME 應用程式 中討論)

支持該規範的桌面環境和文件管理器根據 .desktop 文件中的定義啟動程序。參見桌面項#應用程式項

通常不需要配置打包的 .desktop 文件,但它可能並非沒有缺陷。即使一個包含必要 MIME 類型描述的應用程式在 .desktop 文件中的 MimeType 變量被用於關聯,它也可能無法正確啟動,根本無法啟動,或者啟動時未能打開文件。

例如,這可能發生在 Exec 變量缺少打開文件所需的內部選項,或缺少如何在菜單中顯示應用程式的配置。Exec 變量通常以 % 開頭;有關當前支持的選項,請參見 exec-variables

以下表格列出了影響應用程式啟動的 .desktop 文件中主要的變量條目,如果它與 MIME 類型關聯。

變量名稱 示例 1 內容 示例 2 內容 描述
DBusActivatable DBusActivatable=true DBusActivatable=false 應用程式與 D-Bus 交互。
另見配置: D-Bus
MimeType MimeType=application/vnd.oasis.opendocument.text MimeType=application/vnd.sun.xml.math 應用程式支持的 MIME 類型列表
StartupWMClass StartupWMClass=google-chrome StartupWMClass=xpad 將窗口與擁有該窗口的應用程式關聯
Terminal Terminal=true Terminal=false 在默認終端中啟動

空的 MIME 關聯 / 在 KDE 中打開菜單[編輯 | 編輯原始碼]

此頁面或章節適合移動到 KDE#疑難解答

附註: KDE 特有的故障排除。(在 Talk:XDG MIME 應用程式 討論)


安裝 archlinux-xdg-menu 並運行 XDG_MENU_PREFIX=arch- kbuildsycoca6,或將 export XDG_MENU_PREFIX=plasma- 添加到 .xinitrc