xdg-open 命令如何知道使用哪个应用程序打开文件?

Iva*_*van 42 xdg-open

我希望 xdg-open 命令使用与我在默认文件管理器中双击文件时打开的应用程序相同的应用程序,但这并不总是正确的。

例如,我的 DE 是 XFCE,我的文件管理器是 Thunar,我的默认图片查看器是 Ristretto。但是,xdg-open example.png在 Pinta 中打开示例 PNG 文件。为什么?

oxn*_*xnz 38

xdg-open 是一个独立于桌面的工具,用于配置用户的默认应用程序。许多应用程序在内部调用 xdg-open 命令。在桌面环境(如 GNOME、KDE ​​或 Xfce)中,xdg-open 只是将参数传递给这些桌面环境的文件打开器应用程序(例如 gvfs-open、kde-open 或 exo-open)。这意味着关联由桌面环境决定。当没有检测到桌面环境时(例如,当运行一个独立的窗口管理器时,例如 Openbox),xdg-open 将使用它自己的配置文件。

来自archwiki

针对您的问题,您可以尝试设置与 png 文件关联的默认应用程序:

xdg-mime default <ristretto.desktop> image/png
Run Code Online (Sandbox Code Playgroud)

你需要找出 Ristretto 的桌面文件名到底是什么。之后,你可以用这个检查它:

xdg-mime query default image/png
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。这非常有趣:“xdg-mime query default image/png”返回“wine-extension-png.desktop”:-) (2认同)

lau*_*uve 5

@Ivan 这可能会发生,因为您在请求默认应用程序时没有提供正确的文件类型。重要的是 xdg 如何调用该特定文件类型。这可以通过运行轻松找到

xdg-mime query filetype example.png
Run Code Online (Sandbox Code Playgroud)

例如,如果我使用计算机上的特定 png 文件执行此操作,它将返回image/x-apple-ios-png. 一旦确定了实际的文件类型,就可以运行

xdg-mime query default <new filetype>
Run Code Online (Sandbox Code Playgroud)

并获取 xdg 用于此特定文件类型的应用程序。如果没有为此文件类型定义应用程序,xdg-open 检查文件/etc/debian_version是否可用,如果是这种情况,它将启动run-mailcap,这与 xdg-open 非常相似,并尝试找到一个程序来打开文件.

只有当这也失败时,xdg-open 才会要求用户定义一个程序来打开文件。

  • [oxny](https://unix.stackexchange.com/a/251055/117549) 仅提到如何设置和检查应用程序的已知文件类型。他缺少对“xdg-mime query filetype example.png”的引用来检查特定文件的文件类型,因为简单地假设 .png 文件也属于 image/png 类别并不总是正确的。看看[Ivan](https://unix.stackexchange.com/questions/251054/how-does-the-xdg-open-command-know-which-application-to-use-to-open-a-file/ 251055#comment432744_251055)的评论,我认为他的问题还没有解决。 (2认同)