我有一个小办公室,有 5 个桌面和一个服务器,它们都运行在 Debian 上。我刚刚将客户端升级到 Stretch,但在日志中只看到 1 个困扰我的错误:
gnome-settings-[939]:无法从 EDID 数据创建配置文件:无法保存 ICC 文件:打开文件“/var/data/users/Debian-gdm/icc/edid-93ed9b01fe8febb07668e99b557191e9.icc”时出错:访问被拒绝
gnome-设置-[939]:无法从 EDID 数据创建配置文件:无法保存 ICC 文件:打开文件“/var/data/users/Debian-gdm/icc/edid-93ed9b01fe8febb07668e99b557191e9.icc”时出错:访问被拒绝
gnome-settings- [939]: 设置屏幕 _ICC_PROFILE 失败:打开文件 '/var/data/users/vincent/icc/edid-93ed9b01fe8febb07668e99b557191e9.icc' 失败:访问被拒绝
由于我们的用户 $HOME 文件夹是通过 NFS 安装的,因此我确保所有 $XDG_DATA 和 $XDG_CACHE(至少对于普通用户而言)都存储在客户端本地。早在 2014 年,我就找到了这样的手册:
在 /etc/profile.d/xdg_dirs.sh 中:
if [ "$USER" == "root" ]; then
unset XDG_CACHE_HOME
unset XDG_DATA_HOME
else
test -d $XDG_CACHE_HOME || mkdir -p $XDG_CACHE_HOME
test -d $XDG_DATA_HOME || mkdir -p $XDG_DATA_HOME
fi
在 /etc/security/pam_env.conf 中:
XDG_CACHE_HOME DEFAULT="/var/cache/users/@{PAM_USER}"
XDG_DATA_HOME DEFAULT="/var/data/users/@{PAM_USER}"
我很确定这弄乱了 Debian-gdm 用户的正确权限,但我不知道如何解决它。我尝试创建目录并为 Debian-gdm 和默认用户组授予 r+w 权限,但这没有用。我还尝试通过添加以下内容从上述脚本中排除 Debian-gdm 用户:
if [ "$USER" == "root" ] || [ "$USER" == "Debian-gdm" ]; then
,但这并没有奏效。
有什么想法吗?
我相信这里的主要问题是
/etc/profile.d/xdg_dirs.sh
启动 gdm 时没有源,因为它现在使用的是 wayland 而不是 X(Xsession 脚本不再启动)恕我直言,您不应该混淆这些变量。用户的家
Debian-gdm
存储在/var/lib/gdm3
您的客户端上应该已经在本地的位置。我要做的是修改
/etc/pam.d/gdm-launch-environment
, 在第一次调用时有两个调用pam_env.so
,设置conffile=
为/dev/null
. 这将阻止 pam 模块读取/etc/security/pam_env.conf
文件并保持环境不变。另一种解决方案是尝试使用 X 而不是 Wayland 启动 gdm,设置
WaylandEnable=false
为/etc/gdm3/daemon.conf
自问这个问题以来,我已经将所有系统从 Stretch 升级到 Buster,并且正在升级到 Bullseye。我选择了@Bigon 对 Stretch 和 Buster 的回答,但由于 pam_env.so 不断产生的错误,我回到了最初的解决方案。我从未见过任何问题,因此该错误根本无害。
对于未来的访问者,如果您的用户的 $HOME 是从 NFS 提供的,那么在本地存储用户的缓存是有用的,这就是为什么通过 /etc/ 为 $UID>=2000 的用户设置 XDG_CACHE_HOME 环境变量是有用的个人资料,例如:
该解决方案阻止了系统用户(例如 root 和 Debian-gdm)的错误,并且它独立于用户正在使用的会话管理器工作。我在我的设置中删除了所有对 pam_env.so 的引用。