在我的笔记本电脑上,安装了 Debian 11,为了显示 lightdm.conf,我首先使用了以下命令
~$ /usr/sbin/lightdm --show-config
[Seat:*]
-----------
Sources:
B /usr/share/lightdm/lightdm.conf.d/01_debian.conf
B /usr/share/lightdm/lightdm.conf.d/01_debian.conf ---> same as above
C /etc/lightdm/lightdm.conf.d/lightdm.conf
D /etc/lightdm/lightdm.conf
然后我尝试
~$ sudo lightdm --show-config
[Seat:*]
----------
Sources:
A /usr/share/lightdm/lightdm.conf.d/01_debian.conf
B /etc/lightdm/lightdm.conf.d/lightdm.conf
C /etc/lightdm/lightdm.conf
输出正常。我测试了另外两个安装了 Debian 11 的磁盘和第三个安装了 Debian 测试的磁盘,都没有显示这条重复的线/usr/share/lightdm/lightdm.conf.d/01_debian.conf.那么,我的笔记本电脑可能出了什么问题?
如果有帮助的话:
root@Xfce:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
~$ sudo printenv PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
~$ sudo which lightdm
/usr/sbin/lightdm
~$ strace -e /open /usr/sbin/lightdm --show-config
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
----------- /lib omitted
openat(AT_FDCWD, "/proc/filesystems", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY) = 6
openat(AT_FDCWD, "/usr/share/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 6
openat(AT_FDCWD, "/usr/share/lightdm/lightdm.conf.d/01_debian.conf", O_RDONLY) = 6
openat(AT_FDCWD, "/usr/share/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 6
openat(AT_FDCWD, "/usr/share/lightdm/lightdm.conf.d/01_debian.conf", O_RDONLY) = 6
openat(AT_FDCWD, "/usr/local/share/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/charset.alias", O_RDONLY) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 6
openat(AT_FDCWD, "/usr/share/xfce4/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/etc/xdg/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/etc/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 6
openat(AT_FDCWD, "/etc/lightdm/lightdm.conf.d/lightdm.conf", O_RDONLY) = 6
openat(AT_FDCWD, "/etc/lightdm/lightdm.conf", O_RDONLY) = 6
所有装有 (Debian 11 或测试版) 的机器(包括我的笔记本电脑)都给出:
~$ printenv XDG_DATA_DIRS
/usr/share/xfce4:/usr/local/share/:/usr/share/:/usr/share
和 XDG_CONFIG_DIRS 是相同的。感谢您的帮助,我会继续关注。
- 但是,如果我从笔记本电脑上的 XDG_DATA_DIRS 中删除一个 /usr/share,那么我得到的正确输出只有一行 B 。
答案1
感谢 strace 输出,它没有显示任何用户配置是导致这种双重解析的原因,因为/usr/share/lightdm/lightdm.conf.d
在尝试任何其他配置文件之前已经被解析了两次。
通过检查lightdm 源代码看起来要解析的目录是通过调用g_get_system_data_dirs()
和来选择的g_get_system_config_dirs()
。这些是 glib 中的方法,根据文档,例如这里,从环境变量中获取要解析的目录列表XDG_DATA_DIRS
。XDG_CONFIG_DIRS
我猜你/usr/share
由于某种原因在这些变量中出现了两次(可能是某些 .bashrc 文件中有重复?),所以它被解析了两次(其中lightdm
的部分/usr/share/lightdm
是从 lightdm 本身添加的)。
当您使用 sudo 运行它时,您的环境变量不会被使用,并且我猜XDG_DATA_DIRS
会得到一些只XDG_CONFIG_DIRS
包含一次的默认值,正如预期的那样。/usr/share
更新
为了清楚起见,根据您最近的编辑,XDG_DATA_DIRS
和都XDG_CONFIG_DIRS
经过检查,所以由于您/usr/share
在每个中都有一次,这就是您得到重复的原因。