$XDG_DATA의 위치를 ​​수동으로 변경한 후 $GDM_USER가 $XDG_DATA에 액세스할 수 없습니다.

$XDG_DATA의 위치를 ​​수동으로 변경한 후 $GDM_USER가 $XDG_DATA에 액세스할 수 없습니다.

저는 데스크톱 5대와 서버 1대가 있고 모두 데비안에서 실행되는 소규모 사무실을 운영하고 있습니다. 방금 클라이언트를 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]: screen_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이제 X 대신 wayland를 사용하기 때문에 gdm을 시작할 때 소스를 가져오지 못한다는 것입니다(Xsession 스크립트는 더 이상 시작되지 않습니다).

IMHO 이러한 변수를 파괴해서는 안됩니다. 사용자의 홈 Debian-gdm저장 위치는 /var/lib/gdm3이미 클라이언트의 로컬 위치에 있어야 합니다.

내가 해야 할 일은 첫 번째 호출에 /etc/pam.d/gdm-launch-environment두 개의 호출이 있는 것을 로 설정하는 것이었습니다. 이렇게 하면 pam 모듈이 파일을 읽는 것을 방지하고 환경을 변경하지 않고 그대로 둘 수 있습니다.pam_env.soconffile=/dev/null/etc/security/pam_env.conf

또 다른 해결책은 Wayland 대신 X를 사용하여 gdm을 시작하는 것입니다 WaylandEnable=false./etc/gdm3/daemon.conf

답변2

이 질문을 드린 이후로 모든 시스템을 Stretch에서 Buster로 업그레이드했고, Bullseye로 업그레이드를 진행 중입니다. Stretch 및 Buster에 대한 @Bigon의 답변을 수락했지만 pam_env.so가 계속 생성하는 오류로 인해 원래 솔루션으로 돌아갔습니다. 아무런 문제도 본 적이 없으므로 이 버그는 전혀 해롭지 않습니다.

향후 방문자를 위해 사용자의 $HOME이 NFS에서 제공되는 경우 사용자의 캐시를 로컬에 저장하는 것이 유용하므로 $UID>=2000 개인 정보를 가진 사용자에 대해 /etc/를 통해 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

이 솔루션은 루트 및 Debian-gdm과 같은 시스템 사용자의 오류를 방지하고 사용자가 사용하는 세션 관리자와 독립적으로 작동합니다. 설정에서 pam_env.so에 대한 모든 참조를 제거했습니다.

관련 정보