XDG 用户目录

出自 ArchWiki

出自 freedesktop.org

xdg-user-dirs 是一个工具,用于帮助管理“众所周知”的用户目录,例如桌面文件夹和音乐文件夹。它还处理文件名的本地化(即翻译)。
它的工作方式是在登录阶段的早期运行 xdg-user-dirs-update(1)。此程序读取配置文件和一组默认目录。然后,它在用户主目录中创建这些目录的本地化版本,并在 $XDG_CONFIG_HOME/user-dirs.dirs (XDG_CONFIG_HOME 默认为 ~/.config) 中设置一个配置文件,应用程序可以读取该文件以查找这些目录。

大多数 文件管理器 使用特殊图标指示 XDG 用户目录。

安装

安装 xdg-user-dirs

注意: 一些 桌面环境 可能已经安装了它,例如 GNOME

创建默认目录

通过运行以下命令,可以在 $HOME 目录中自动创建一套完整的本地化默认用户目录

$ xdg-user-dirs-update
提示: 要强制创建英文命名的目录,可以使用 LC_ALL=C.UTF-8 xdg-user-dirs-update --force

执行后,它还将自动

  • 创建本地 ~/.config/user-dirs.dirs 配置文件:供应用程序查找和使用特定于帐户的主目录。
  • 创建本地 ~/.config/user-dirs.locale 配置文件:用于根据正在使用的区域设置语言。

用户服务 xdg-user-dirs-update.service 也将默认安装和启用,以便通过在每个登录会话开始时运行此命令来保持目录的最新状态。

创建自定义目录

本地 ~/.config/user-dirs.dirs 和全局 /etc/xdg/user-dirs.defaults 配置文件都使用以下环境变量格式来指向用户目录:XDG_DIRNAME_DIR="$HOME/directory_name" 一个示例配置文件可能如下所示(这些都是模板目录)

~/.config/user-dirs.dirs
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_VIDEOS_DIR="$HOME/Videos"

由于 xdg-user-dirs 将读取本地配置文件以指向相应的用户目录,因此可以指定自定义文件夹。例如,如果在 ~/.config/user-dirs.dirs 中,XDG_DOWNLOAD_DIR 变量的自定义文件夹命名为 $HOME/Internet,则任何使用此变量的应用程序都将使用此目录。

注意: 与许多配置文件一样,本地设置会覆盖全局设置。还需要创建任何新的自定义目录。

或者,也可以使用命令行指定自定义文件夹。例如,以下命令将产生与上述配置文件编辑相同的结果

$ xdg-user-dirs-update --set DOWNLOAD ~/Internet

查询已配置的目录

设置完成后,可以使用 xdg-user-dirs 查看任何用户目录。例如,以下命令将显示 Templates 目录的位置,这当然对应于本地配置文件中的 XDG_TEMPLATES_DIR 变量

$ xdg-user-dir TEMPLATES
警告: xdg-user-dir 不应从未经检查的输入接收其参数,因为它只是将其传递给 eval 而不执行任何健全性检查,在一行代码中如下所示
eval echo \${XDG_${1}_DIR:-$HOME}
这意味着 xdg-user-dir 方便了从未经净化的输入执行任意代码。除非上游修复了这种不安全的实现,否则 xdg-user-dir 应该只用于硬编码或经过严格审计的参数。