如果指定了系统范围,如何查找 XDG 用户目录

如果指定了系统范围,如何查找 XDG 用户目录

TLDR:如何找到我的 XDG 用户目录的当前设置以外调用xdg-user-dir

我所在的系统在 中指定了非标准的 XDG 用户目录/etc/xdg/user-dirs.defaults。我遇到了一个问题,某个程序(尚不确定是哪个程序)不断创建默认(错误)目录,目前,我正试图找出哪些程序“应该”将其视为这些目录的路径。查询这些目录的值的方法似乎是调用xdg-user-dir <WHICH_DIRECTORY>。例如,在默认方案中,

user@host$ xdg-user-dir PICTURES
/home/user/Pictures

然而,这只能让我

user@host$ xdg-user-dir DESKTOP
/home/user/Desktop
user@host$ xdg-user-dir ANYTHING_ELSE_AT_ALL
/home/user

这是不正确的。

我经历过源代码,结果xdg-user-dir发现该程序只检查默认为的用户特定文件~/.config/user-dirs.dirs(该系统中不存在该文件),如果在那里找不到信息,就会盲目地输出我得到的硬编码(错误)值。它完全忽略了系统范围的配置文件。

printenv确认已$XDG_CONFIG_DIRS设置为/etc/xdg,正如它应该的那样,但xdg-user-dir忽略了这个环境变量

那么,在这种情况下,我如何确定程序看到的这些目录路径的值?程序通常如何找到它们?XDG 是否有指定的标准方法,还是特定于程序或库的?

答案1

/etc/xdg/user-dirs.conf并且/etc/xdg/user-dirs.default仅用于驱动xdg-user-dirs-update程序。

根据其主页的描述,xdg-user-dirs-update它用于在用户登录时设置用户目录。[1]

因此不存在“系统范围”配置。该文件/etc/xdg/user-dirs.defaults仅用于创建文件$XDG_CONFIG_HOME/user-dirs.dirs$XDG_CONFIG_HOME/user-dirs.locale如果文件不存在,则按照指示(并且始终按照指示)创建用户目录$XDG_CONFIG_HOME/user-dirs.dirs$XDG_CONFIG_HOME/user-dirs.locale如果文件不存在,则创建用户目录。

~/.config/user-dirs.dirs不存在意味着该程序在xdg-user-dirs-update登录时没有运行。

例如,如果您创建新用户并仅在文本终端中登录,就会发生这种情况。但如果您登录图形桌面,它就会创建文件。

无论如何,当您没有该文件时~/.config/user-dirs.dirs,程序的输出xdg-user-dir是无关紧要的。

[1]

其工作方式是,xdg-user-dirs-update 在登录阶段很早就运行。该程序读取配置文件和一组默认目录。然后它在用户主目录中创建这些目录的本地化版本,并在 $(XDG_CONFIG_HOME)/user-dirs.dirs(XDG_CONFIG_HOME 默认为 ~/.config)中设置一个配置文件,应用程序可以读取该文件来找到这些目录。" -https://www.freedesktop.org/wiki/Software/xdg-user-dirs/

https://www.freedesktop.org/wiki/Software/xdg-user-dirs/

相关内容