XDG 用户目录
- xdg-user-dirs 是一个用于帮助管理“众所周知”的用户目录(如桌面文件夹和音乐文件夹)的工具。它还处理文件名的本地化(即翻译)。
- 其工作原理是在登录阶段的非常早期运行 xdg-user-dirs-update(1)。该程序会读取配置文件和一组默认目录,然后在用户主目录下创建这些目录的本地化版本,并在
$XDG_CONFIG_HOME/user-dirs.dirs(XDG_CONFIG_HOME默认为~/.config)中设置一个配置文件,供应用程序读取以查找这些目录。
大多数 文件管理器 会使用特殊图标来标识 XDG 用户目录。
安装
创建默认目录
在 $HOME 目录下自动创建全套本地化的默认用户目录,可以通过运行以下命令完成:
$ xdg-user-dirs-update
LC_ALL=C.UTF-8 xdg-user-dirs-update --force。执行时,它还将自动:
- 创建本地
~/.config/user-dirs.dirs配置文件:由应用程序用于查找和使用特定于账户的主目录。 - 创建本地
~/.config/user-dirs.locale配置文件:用于根据当前使用的 locale 设置语言。
用户服务 xdg-user-dirs.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_PROJECTS_DIR="$HOME/Projects" 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 应当仅与硬编码或经过严格审核的参数一起使用。