手动更改 $XDG_DATA 的位置后,$GDM_USER 无法访问 $XDG_DATA

手动更改 $XDG_DATA 的位置后,$GDM_USER 无法访问 $XDG_DATA

我有一个小办公室,有 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

,但这并没有那么有效。

有什么想法吗?

答案1

我相信这里的主要问题是/etc/profile.d/xdg_dirs.sh启动 gdm 时没有获取源,因为它现在使用 wayland 而不是 X (Xsession 脚本不再启动)

恕我直言,你不应该破坏这些变量。用户的家庭Debian-gdm存储位置/var/lib/gdm3应该已经位于您客户端的本地位置。

我要做的就是修改,其中第一次调用时/etc/pam.d/gdm-launch-environment有两次调用,设置为.这将阻止 pam 模块读取文件并保持环境不变。pam_env.soconffile=/dev/null/etc/security/pam_env.conf

另一种解决方案是尝试使用 X 而不是 Wayland 来启动 gdm,设置WaylandEnable=false/etc/gdm3/daemon.conf

答案2

自从提出这个问题以来,我已将所有系统从 Stretch 升级到 Buster,并且正在升级到 Bullseye。我接受了 @Bigon 对 Stretch 和 Buster 的回答,但由于 pam_env.so 不断产生的错误,我回到了最初的解决方案。我没有见过任何问题,所以这个错误根本没有害处。

对于未来的访问者,如果您的用户的 $HOME 由 NFS 提供服务,则在本地存储用户的缓存非常有用,这就是为什么通过 /etc/ 为 $UID>=2000 的用户设置 XDG_CACHE_HOME 环境变量非常有用个人资料,例如:

if ((`id -u`>=2000)); then
  umask 0007
  USER=$(id -un)
  if [[ !-d "/var/cache/users/$USER" ]]; then
    mkdir "/var/cache/users/$USER"
    chown "$USER" "/var/cache/users/$USER"
  fi
  XDG_CACHE_HOME=/var/cache/users/$USER
  export XDG_CACHE_HOME
  NSS_SDB_USE_CACHE=yes
  export NSS_SDB_USE_CACHE
fi

该解决方案可以阻止 root 和 Debian-gdm 等系统用户出现错误,并且它的工作方式独立于用户正在使用的会话管理器。我已删除设置中对 pam_env.so 的所有引用。

相关内容