默認應用程式 - Arch Linux 中文维基

跳至內容

# 默認應用程式

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Default applications，最近一次同步於 2026-02-21，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

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

原因：向表格中添加更多應用程式。KDE 應用程式是否使用 QDesktopServices::openUrl？提及 exo-open(1)。提及GTK 4.10 及更新版本通過 GtkUriLauncher API 使用的 xdg-document-portal 關聯繫統。 (在 Talk:默認應用程式 中討論)

不同程序會使用不同的方式實現默認應用程式關聯。命令行程序通常使用環境變量，而圖形應用程式則傾向於通過調用 GIO API、Qt API 或執行 `/usr/bin/xdg-open`（xdg-utils 的一部分），使用 XDG MIME 應用程式作為默認。由於 xdg-open 和 XDG MIME 應用程式相當複雜，因此開發了各種替代的資源打開器。下表列出了使用各種方法的應用程式示例。

方法 | 使用 XDG | 應用程式示例 | 檢查關聯
--- | --- | --- | ---
GIO 的 GAppInfo | 是 | Firefox、GNOME 文件、PCManFM、Thunar、Thunderbird、Telegram | `gio mime mimetype`
`/usr/bin/xdg-open` | 默認 | Chromium（打開下載的文件） | `xdg-mime query default mimetype`
自定義 | 通常沒有 | mc、ranger | –
環境變量 | 否 | man、sudoedit、systemctl | –
D-Bus 的 FileManager1 | org.freedesktop.FileManager1 | Firefox（打開包含文件的文件夾）、Zotero（顯示文件）、Telegram（在文件夾中顯示） | –

許多桌面環境和圖形文件管理器提供用於配置默認應用程式的圖形界面。

注意：XDG MIME 應用程式規範允許 MIME 類型定義為其它類型的子類型或別名。對於沒有默認程序的子類型，這種處理方式可能不夠直觀⸺會使用其父類型的默認程序。例如，Firefox 可能通過 GIO 將 `application/rss+xml` 解析為由自身打開，就是因為該類型是 `application/xml` 的子類，而 Firefox 正是 `application/xml` 的默認處理程序。

## 背景信息

程序有時需要使用用戶首選的應用程式打開文件或 URI，這需要檢測文件類型（通常通過擴展名或魔術數字映射到 MIME 類型），並將其關聯到應用程式。

傳承自 UNIX 的程序（Heirloom UNIX programs）使用 mime.types 檢測 MIME 類型，使用 mailcap 將其關聯到應用程式。

## 資源打開器

- XDG MIME 應用程式：遵循 XDG MIME 應用程式規範
- 正則表達式：允許使用正則表達式將 MIME 類型與應用程式關聯
- URI 支持：允許將任意 URI 方案（scheme）與應用程式關聯

名稱 | 包 | XDG MIME 應用程式 | 正則表達式 | URI 支持
--- | --- | --- | --- | ---
xdg-open | xdg-utils | 是 | 否 | 是
gio(1) | glib2包 | 是 | – | 是
mimeopen(1p) | perl-file-mimeinfo包 | 是 | 否 | 否
mimeo | mimeoAUR | 是 | 是 | 是
mimi | mimiAUR、mimi-gitAUR | 否 | 否 | 部分
busking | busking-gitAUR | 否 | 是 | 是
rifle(1) | ranger | 否 | 是 | 否
handlr | handlr-regex包 | 是 | 是 | 是
clifm | clifmAUR | 否 | 是 | 部分
mimejs-git | mimejs-gitAUR | 否 | 否 | 是

### xdg-open

xdg-open（xdg-utils 的一部分）遵循 XDG MIME 應用程式規範，並由許多程序使用。

因為 xdg-utils 版本的 xdg-open 比較複雜，默認應用程式錯誤時可能很難調試，所以出現了許多嘗試改進它的替代方案。其中一些替代方案通過直接替換 `/usr/bin/xdg-open` 可執行文件，能夠改變大多數應用程式的行為。其它則僅提供選擇默認應用程式的一種替代方法。

### perl-file-mimeinfo

perl-file-mimeinfo包 提供 mimeopen(1p) 和 mimetype(1p) 兩個工具。提供的界面比 xdg-utils包 的對應工具更好一些：

    # 确定文件的 MIME 类型
    $ mimetype photo.jpeg
    photo.jpeg: image/jpeg

    # 关联文件类型到默认应用程序
    $ mimeopen -d photo.jpeg
    Please choose a default application for files of type image/jpeg

        1) Feh (feh)
        2) GNU 图像处理程序 (gimp)
        3) Pinta (pinta)

    use application #

    # 使用默认应用程序打开文件
    $ mimeopen -n photo.jpeg

最重要的是，如果沒有檢測到桌面環境，xdg-utils 會調用 `file` 而不是 `mimetype` 來進行 MIME 類型檢測。這很重要，因為 `file` 並不遵循 XDG 規範。

注意：perl-file-mimeinfo包 不完全遵循 XDG 規範。

- 在 0.28-1 版本之前，它不讀取發行版範圍的默認設置，並且將其配置保存在已棄用的位置。
- 截至 0.35-3 版本，它仍未遵循規範，沒有實現 glob 解析優先級、glob 權重和魔術數字優先級。安裝該軟體包可能會悄然改變 `xdg-mime` 和 `xdg-open` 對於一組與相同文件擴展名關聯的 MIME 類型的處理行為。

### mimeo

mimeoAUR 提供 `mimeo` 工具，兼具 `xdg-open` 和 `xdg-mime` 的功能。

以下示例展示了如何將 SVG 文件與 Inkscape 關聯：

    # 确定文件的 MIME 类型
    $ mimeo --mimetype Svg_example2.svg
    Svg_example2.svg
     image/svg+xml

    # 确定与可执行文件 "inkscape" 相关联的桌面项
    $ mimeo --app2desk inkscape
    inkscape
     org.inkscape.Inkscape.desktop

    # 查找桌面项路径
    $ mimeo --finddesk org.inkscape.Inkscape.desktop
    /usr/share/applications/org.inkscape.Inkscape.desktop

    # 选择此 MIME 类型的默认应用程序
    $ mimeo --prefer image/svg+xml org.inkscape.Inkscape.desktop

    # 检查关联
    $ mimeo --mime2desk image/svg+xml
    image/svg+xml
     org.inkscape.Inkscape.desktop

    # 使用默认应用程序打开文件
    $ mimeo Svg_example2.svg

還可以查找 `mimeapps.list` 文件的路徑：

    $ mimeo --mimeapps-list
    /home/user/.config/mimeapps.list

與 xdg-utils 的一個主要區別是，mimeo 還支持自定義的「關聯文件」，允許進行更複雜的關聯。例如，可以根據匹配的正則表達式，傳遞特定的參數：

    # 在 VLC 中打开 YouTube 链接而不打开新实例
    vlc --one-instance --playlist-enqueue %U
      ^https?://(www.)?youtube.com/watch\?.*v=

xdg-utils-mimeoAUR 修補了 xdg-utils，使得 `xdg-open` 在未檢測到桌面環境時回退到 mimeo。

### handlr

handlr-regex包 由 Rust 編寫，提供了與 `xdg-open` 和 `xdg-mime` 相同的功能，但界面更加簡潔。 handlr-regex包 是 handlrAUR 的一個帶有正則表達式支持的分支。

與 `xdg-utils` 相比，handlr 增加了以下功能：

- 通過擴展名設置關聯，省去了查找或記住 MIME 類型的必要
- 校驗 MIME 類型和擴展名是否正確
- 從 `mimeapps.list` 中刪除無效條目
- 擴展名不明確時，通過文件內容智能檢測 MIME 類型
- 自動補全 MIME 類型、擴展名和桌面條目
- 設置任意命令作為正則表達式匹配時的處理程序

    # 以下兩個命令是相同的
    handlr set .png feh.desktop
    handlr set image/png feh.desktop

    # 列出默認應用程式
    handlr list

    # 獲取 MIME 類型/擴展名的處理程序
    $ handlr get .png --json
    {"handler":"pqiv.desktop","name":"pqiv","cmd":"/usr/bin/pqiv"}

    # 啟動處理程序，可選傳遞路徑/URL
    handlr launch x-scheme-handler/https
    handlr launch x-scheme-handler/https -- https://google.ca

要用 `handlr` 替代 `xdg-open`，可以使用以下腳本遮蔽 `xdg-open` 文件：

    #!/usr/bin/bash
    handlr open "$@"

### clifm

`clifm` 內置 Lira 作為資源打開器，可以通過 `--open` 命令行選項作為獨立資源打開器使用。其配置文件（`~/.config/clifm/profiles/PROFILE_NAME/mimelist.clifm`）支持對 MIME 類型和文件名（及擴展名）使用正則表達式。以下是幾個示例：

    # 打开常规文件
    clifm --open /etc/hosts

    # 打开目录
    clifm --open /media/data

    # 打开 URL（通过配置文件中与 text/http MIME 类型关联的应用程序）
    clifm --open www.archlinux.org

### 輕量替代品

以下包衝突並提供 xdg-utils包，通過提供自己的 `/usr/bin/xdg-open` 腳本直接替代 xdg-utils。

如果使用這些資源打開器但仍需要使用 xdg-utils包，請將這些資源打開器手動安裝到在 PATH 中位於 `/usr/bin` 之前的目錄下。

- mimiAUR、mimi-gitAUR ⸺ 130 行 Bash 腳本，可為每種 MIME 類型自定義命令參數
- busking-gitAUR ⸺ 80 行 Perl 腳本，與 `mimi` 類似，額外支持正則表達式規則

#### run-mailcap

警告：如果使用 run-mailcapAUR，`xdg-open` 在未檢測到桌面環境時可能將請求委託給它處理。若同時使用了 mailcap包 默認提供的 `/etc/mailcap`，由於該文件中的條目會調用 `xdg-open`，這將導致無限循環。
分類：​

- 系統管理

默認應用程式
新增話題