xdg-utils
xdg-utils 提供了官方工具,用于管理 XDG MIME 应用程序。
- xdg-desktop-menu(1) - 安装桌面菜单项
- xdg-desktop-icon(1) - 将桌面项复制到用户的桌面
- xdg-email(1) - 在用户首选的邮件客户端中编写新电子邮件,可能会预填入主题和其他信息
- xdg-icon-resource(1) - 安装图标资源
- xdg-mime(1) - 查询和安装 MIME 类型和关联
- xdg-open(1) - 在用户首选应用程序中打开文件或 URI
- xdg-screensaver(1) - 启用、禁用或暂停屏幕保护程序
- xdg-settings(1) - 获取或设置默认的 Web 浏览器和 URL 处理程序
安装[编辑 | 编辑源代码]
使用[编辑 | 编辑源代码]
环境变量[编辑 | 编辑源代码]
xdg-utils 尝试通过调用其提供的专用程序来与您的桌面环境集成,在适用的情况下。当前环境的评估如下[1]:
- 如果设置了标准化的 XDG_CURRENT_DESKTOP 环境变量,并且该值属于已识别的桌面环境,则使用相应的值。
- 如果存在任何经典回退或特定环境变量,例如 KDE 的
KDE_FULL_SESSION
,则使用相应的值。 - 如果设置了遗留的 DESKTOP_SESSION 环境变量,并且该值属于已识别的桌面环境,则使用相应的值。
在此过程中,如果找到任何匹配项,则 DE 变量会被内部覆盖为检测到的桌面环境的标准化值。因此,DE
既是一个遗留的环境变量,也是 xdg-utils 的内部状态变量。例如,如果 XDG_CURRENT_DESKTOP
是 KDE
,xdg-utils 会将 DE
设置为 kde
。如果没有找到匹配项,则会使用任何已存在的 DE
值, 这样 XDG_CURRENT_DESKTOP=KDE
就等于 XDG_CURRENT_DESKTOP
未设置并且 DE=kde
。此实现细节值得注意,因为它导致如果桌面环境已被检测到,预设的 DE
会被忽略。
xdg-utils 识别的环境变量值如下:
桌面环境 | XDG_CURRENT_DESKTOP |
DE |
DESKTOP_SESSION
|
---|---|---|---|
– | X-Generic 1 |
generic |
– |
Cinnamon | Cinnamon , X-Cinnamon |
cinnamon |
– |
Deepin | Deepin , DEEPIN , deepin 1 |
deepin |
– |
Enlightenment | ENLIGHTENMENT 1 |
enlightenment |
– |
GNOME | GNOME 2 |
gnome |
gnome
|
GNOME Flashback | GNOME-Flashback , GNOME-Flashback:GNOME 2 |
gnome |
gnome
|
KDE Plasma | KDE |
kde |
– |
LXDE | LXDE |
lxde |
LXDE
|
LXQt | LXQt |
lxqt |
– |
MATE | MATE |
mate |
mate
|
Xfce | XFCE |
xfce |
xfce , xfce4 , Xfce Session
|
- 这不是一个已在 freedesktop.org 上注册的环境。
- GNOME 变体,包括 GNOME Classic 模式,都被 xdg-utils 视为相同的。
请注意,这仅仅是 xdg-utils 提供的脚本能够检测的列表。脚本仍会在以下条件下执行通用的、与环境无关的操作:
- 请求了通用例程,使用
XDG_CURRENT_DESKTOP=X-Generic
或DE=generic
。 - 环境检测失败。所有相关的环境变量都无法识别或未设置,而经典回退也没有揭示任何信息。
- 执行了特定环境的操作,但失败了,例如由于缺少程序。
xdg-mime[编辑 | 编辑源代码]
xdg-mime(1) 是一个用于直接查询和修改默认 MIME 应用程序的脚本。它在其他脚本中使用,例如 xdg-open,并且还是一个有用的故障排除工具。
确定文件的 MIME 类型:
$ xdg-mime query filetype photo.jpeg image/jpeg
确定 MIME 类型的默认应用程序:
$ xdg-mime query default image/jpeg gimp.desktop
更改 MIME 类型的默认应用程序:
$ xdg-mime default feh.desktop image/jpeg
将文件管理器设置为默认文件管理器(例如 -Thunar):
$ xdg-mime default thunar.desktop inode/directory
调试 MIME 类型的默认应用程序:
$ env XDG_UTILS_DEBUG_LEVEL=10 xdg-mime query default text/html Checking /home/user/.config/mimeapps.list Checking /home/user/.local/share/applications/defaults.list and /home/user/.local/share/applications/mimeinfo.cache Checking /usr/local/share/applications/defaults.list and /usr/local/share/applications/mimeinfo.cache Checking /usr/share/applications/defaults.list and /usr/share/applications/mimeinfo.cache qutebrowser.desktop
当需要确定文件的 MIME 类型时,xdg-mime 会尝试使用适合桌面环境的程序:
桌面环境 | 程序 | 包 |
---|---|---|
Cinnamon | gio
|
glib2包 |
GNOME | ||
GNOME Flashback | ||
LXDE | ||
MATE | ||
Xfce | ||
Deepin | – | – |
Enlightenment | ||
LXQt | ||
KDE Plasma | kmimetypefinder |
kde-cli-tools包 |
在通用情况下,xdg-mime 将:
- 如果存在,委托给 mimetype。需要安装 perl-file-mimeinfo包 包。
- 如果存在,委托给 file包。
xdg-open[编辑 | 编辑源代码]
xdg-open(1) 是一个资源打开器,被许多应用程序使用,遵循 XDG MIME 应用程序标准,并尽可能与系统的桌面环境集成。
如果检测到桌面环境,将调用其提供的处理程序 [2]:
桌面环境 | 程序 | 包 |
---|---|---|
Cinnamon | gio
|
glib2包 |
GNOME | ||
GNOME Flashback | ||
MATE | ||
Deepin | dde-open |
deepin-api包 |
Enlightenment | enlightenment_open
|
enlightenment包 |
KDE Plasma | kde-open 1 |
kde-cli-tools包 |
LXDE | pcmanfm |
pcmanfm包 |
LXQt | – | – |
Xfce | exo-open 2 |
exo包 |
- 如果
KDE_SESSION_VERSION
未设置,则会使用kfmclient
来自 konqueror包。不过,KDE Plasma 应该始终设置此变量。 - 还会尝试使用来自 glib2包 的
gio
。
在通用情况下,xdg-open 将:
- 查询 #xdg-mime 以获取与资源关联的默认桌面条目,解析桌面条目,并执行其命令。
- 如果存在,委托给 run-mailcap。需要安装 run-mailcapAUR 包。
- 如果存在,委托给 mimeopen。需要安装 perl-file-mimeinfo包 包。
XDG_UTILS_DEBUG_LEVEL=3
。由于 xdg-mime 依赖于 perl-file-mimeinfo包 包来实现 XDG MIME 应用程序标准,如果您没有使用桌面环境,应该安装 perl-file-mimeinfo包,或考虑使用其他资源打开器。
xdg-settings[编辑 | 编辑源代码]
请参见 xdg-settings(1)。
设置所有 Web MIME 类型使用单个应用程序的快捷方式:
$ xdg-settings set default-web-browser firefox.desktop
设置 URL 方案的默认应用程序的快捷方式:
$ xdg-settings set default-url-scheme-handler irc xchat.desktop
提示与技巧[编辑 | 编辑源代码]
URL 方案处理程序[编辑 | 编辑源代码]
要设置 URL 方案的默认应用程序,您可能还需要更改 x-scheme-handler/*
MIME 类型的默认应用程序:
$ xdg-mime default firefox.desktop x-scheme-handler/https x-scheme-handler/http