禁用XDG目录更新

前段时间更新ArchLinux时,发现我的目录文档莫名其妙的被删除了!里面有大量的资料,由于之前有备份的习惯,损失不算很严重,但是也带来了麻烦,由于还有一台工作电脑,但是测试工作电脑时却没有发生同样的问题。今天尝试解决这一问题,导致这个问题的主角是程序xdg-user-dir, 和它相关的文件一共有六个,即

xdg-user-dir
1
2
3
4
5
6
/etc/xdg/user-dirs.conf
/etc/xdg/user-dirs.defaults
~/.config/user-dirs.dirs
~/.config/user-dirs.locale
/usr/bin/xdg-user-dir
/usr/bin/xdg-user-dirs-update

其中user-dirs.conf 保存了配置信息,user-dirs.defaults保存了默认配置,用户登录是会读取user-dirs.defaults, 并根据它决定目录名称的编码. 文件user-dirs.dirs则保存了本机的目录名称,由于使用中文,所以也相当于翻译。在/usr/bin/下的两个是二进制执行文件,我们不能修改它们。但是之前一直使用默认配置时并没有造成目录丢失的问题,而此次丢失在我将user-dirs.dirs改成正确的后,每次重启系统就又将文档 改成了$HOME, 执行命令xdg-user-dirs-update后发现,生成的user-dirs.dirs就是错误的!所以判断出,这是由于xdg-user-dirs-update升级造成的,经研究后,需要手动改user-dirs.dirs

user-dirs.dirs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/桌面"
XDG_DOWNLOAD_DIR="$HOME/下载"
XDG_TEMPLATES_DIR="$HOME/模板"
XDG_PUBLICSHARE_DIR="$HOME/公共"
XDG_DOCUMENTS_DIR="$HOME/文档"
XDG_MUSIC_DIR="$HOME/音乐"
XDG_PICTURES_DIR="$HOME/图片"
XDG_VIDEOS_DIR="$HOME/视频"

为了避免重启时再次执行xdg-user-dirs-update生成错误的user-dirs.dirs, 就需要关闭它!, 方法就是配置文件user-dirs.conf, 将True改为False, 修改后为

user-dirs.conf
1
2
3
4
5
6
7
8
9
10
11
# This controls the behaviour of xdg-user-dirs-update which is run on user login
# You can also have per-user config in ~/.config/user-dirs.conf, or specify
# the XDG_CONFIG_HOME and/or XDG_CONFIG_DIRS to override this
#

enabled=False

# This sets the filename encoding to use. You can specify an explicit
# encoding, or "locale" which means the encoding of the users locale
# will be used
filename_encoding=UTF-8

注意:由于这个升级的细节导致了文档目录丢失,这个是因为我写的另一个脚本wms.sh根据xdg-user-dir来判断目录,误删除了。所以得到的教训就是自己编写脚本时尽量不要使用xdg-user-dir来判断目录名称,写成绝对路径就好。