奇怪的XDG用户目录重置错误

12.04 LTS我有一个奇怪的问题。

无论我对~/.config/user-dirs.dirs文件做什么,每当我下次再次登录时,该文件都会被设置为$ HOME。 使用lightdm登录时会发生一些事情,它会覆盖该文件的内容。

如果我登录并执行xdg-user-dirs-update --force那么该文件的内容就可以了。 注销后,文件仍然正常。 当我再次使用lightdm登录时出现问题。

这很烦人。

存在自动启动脚本

 /etc/xdg/autostart/user-dirs-update-gtk.desktop 

哪个调用程序xdg-user-dirs-gtk-update ,它似乎没有man页或--help解释,但我猜可能是原因。

您可以删除此脚本(它似乎属于软件包xdg-user-dirs-gtk ,如果更新可以重新创建),或者在自动启动文件中添加一行Hidden=true ,这样可以防止它运行(并且系统会询问您是否要在以后的更新期间保留修改后的副本。

谷歌搜索你的问题导致我使用xdg-user-dirs ,它可以从Ubuntu软件中心安装。 它声称以下function:

该程序读取配置文件和一组默认目录。 然后,它在用户主目录中创建这些目录的本地化版本,并在$(XDG_CONFIG_HOME)/user-dirs.dirs(XDG_CONFIG_HOME默认为〜/ .config)中设置配置文件,应用程序可以读取这些目录以查找这些目录。

完整的文档可以在这里找到。

我建议检查以下几点:

  • 尝试检查XDG_CONFIG_HOME是否设置为“〜/ .config”的其他位置。
    • 在shell级别
    • 通过grep XDG_CONFIG_HOME /etc/*profile /etc/*rc ~/.*rc ~/.*profile /etc/X11/Xsession /etc/X11/Xsession.d/*

解决方法使用标准自定义目录名称之间的符号链接。

例如

  cd ${HOME} function link() { local dir=$1 shift 1 [ -e ${dir} ] || mkdir -p ${dir} for name in $* do if [ -L ${name} ] then if [ "$(readlink ${name})" = "${dir}" ] then [ -e "${dir}" ] || mkdir -p "${dir}" echo "${name} allready converted to ${dir}" else echo "${name} (link) converted to ${dir}" [ -e "${dir}" ] || mkdir -p "${dir}" mv -av ${name}/* ${dir}/ 2>/dev/null || true # can be emtpy mv -av ${name}/.??* ${dir}/ 2>/dev/null || true # can be emtpy rm -f ${name} ln -svf ${dir} ${name} fi else if [ -d ${name} ] then mv -av ${name}/* ${dir}/ 2>/dev/null || true # can be emtpy mv -av ${name}/.??* ${dir}/ 2>/dev/null || true # can be emtpy rmdir ${name} ln -sv ${dir} ${name}; echo "${name} (dir) converted to ${dir}" else ln -sv ${dir} ${name}; echo "${name} linked to ${dir}" fi fi done } # real DE EN link ~/data/templates Vorlagen Templates link ~/data/public Öffentlich Public link ~/data/documents Dokumente Documents link ~/data/music Musik Music link ~/data/photo Bilder Pictures link ~/data/video Videos link ~/data/privat Privat 

如果更新运行时自定义目录不存在,则会重置条目。 您的主目录是否可能在登录过程的后期才安装? 也许您可以在/etc/xdg/user-dirs.defaults设置默认值,以便它可以重写为相同的路径?

在进行更改并保存文件之后但在重新登录之前,请执行

echo "enabled=false" > ~/.config/user-dirs.conf

这创造了用户 – dirsconf应该阻止任何进一步的重置。