跳转到内容

XDG 用户目录

来自 Arch Linux 中文维基

译自 freedesktop.org

xdg-user-dirs 是一个帮助管理用户常用目录(如桌面文件夹和音乐文件夹)的工具。它还处理这些文件夹名称的本地化(即翻译)。
其工作原理是在登录阶段的早期运行 xdg-user-dirs-update(1) 程序。该程序会读取一个配置文件和一组默认目录,然后在用户的主目录中创建这些目录的本地化版本,并在 $XDG_CONFIG_HOME/user-dirs.dirsXDG_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 配置文件:根据使用的 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/桌面"
XDG_DOCUMENTS_DIR="$HOME/文档"
XDG_DOWNLOAD_DIR="$HOME/下载"
XDG_MUSIC_DIR="$HOME/音乐"
XDG_PICTURES_DIR="$HOME/图片"
XDG_PUBLICSHARE_DIR="$HOME/公共"
XDG_TEMPLATES_DIR="$HOME/模板"
XDG_VIDEOS_DIR="$HOME/视频"

因为 xdg-user-dirs 会参照本地配置文件来了解正确的用户目录,所以可以自定义。比如若将 ~/.config/user-dirs.dirsXDG_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 应仅在使用硬编码或经过严格审核的参数时使用。