我知道每个可以打开文件的程序在 下都有一个桌面条目/usr/share/applications
,并且每个 mimetype 的默认值存储在/usr/share/applications/defaults.list
和中~/.local/share/applications/mimeapps.list
。在我的系统上,更新这些列表的命令是update-mime-database
。但是,我在 Google 上找不到关于此程序如何决定在安装了多个可以处理该文件的应用程序时哪个应用程序成为默认应用程序的答案。我之所以问这个问题,是因为最近我在系统上安装了 Geany 后,所有源代码文件都开始在 Geany 中打开,而不是在我的常规文本编辑器中,我想知道为什么选择用 Geany 替换我的常规编辑器。另外,我知道我可以手动将每个文件更改回我的常规编辑器,但是有没有办法让某个程序默认它可以打开所有类型的文件?基本上就像 Windows 的默认应用程序管理器一样,您可以在其中看到任何程序可以打开的所有文件类型,并选择或取消选择它们全部。
我也知道这个xdg-mime
实用程序,但它似乎不能在多个可能的程序之间进行选择来打开一个文件,或者将某个程序的所有文件类型重新注册为默认程序。
答案1
首先,Linux(操作系统)不会选择您所描述的任何内容(因此标题有点偏离),而是您单击文件的应用程序或桌面环境根据逻辑和信息做出选择。
您提到了 update-mime-database,通过谷歌搜索可以找到 Gnome,具体来说是这个页面:
https://developer.gnome.org/shared-mime-info-spec/ (这只是这个的复制品:http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html)
每个希望为 MIME 数据库做出贡献的应用程序都将安装一个以应用程序命名的 XML 文件,将其安装到三个 /packages/ 目录之一中(具体取决于用户请求安装应用程序的位置)。安装、卸载或修改此文件后,应用程序必须运行 update-mime-database 命令,该命令由 freedesktop.org 共享数据库提供。
update-mime-database 被传递了包含被修改的 packages 子目录的 mime 目录作为其唯一参数。它会扫描 packages 子目录中的所有 XML 文件,合并其中的信息,并创建多个输出文件。
这就是问题所在:
如果这些文件中的信息发生冲突,则列表中较低目录中的信息优先。任何名为 Override.xml 的文件都优先于同一包目录中的所有其他文件。这可由允许用户编辑数据库的工具使用,以确保用户的更改生效。
因此,可能是因为 Geany 恰好出现在“列表较低位置”,所以它具有优先权。我猜,这里的较低位置可能意味着任何事情,从各个文件的字母顺序到某些预定义应用程序列表中的顺序。
该页面还描述了文件的格式,还提到可能还有其他工具可用于操作数据库(特别是 Override.xml)。至于是否存在这样的工具可能值得再问一个问题。
编辑:尽管这个关于使用的答案mimeopen
可能不适用于您选择的特定文件管理器,但它也可能对您有所帮助:
https://superuser.com/a/573488/243625