$ XDG_DATAの場所を手動で変更した後、$ GDM_USERは$ XDG_DATAにアクセスできません。

$ XDG_DATAの場所を手動で変更した後、$ GDM_USERは$ XDG_DATAにアクセスできません。

私はデスクトップ5台とサーバー1台があり、どちらも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]: 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.shXではなくウェイランドを使用しているため、gdmを起動するとソースを取得できないことです(Xsessionスクリプトは起動しなくなりました)。

IMHO これらの変数を破壊しないでください。ユーザーのホームDebian-gdm保存場所は、/var/lib/gdm3すでにクライアントのローカル位置にある必要があります。

私がすべきことは、最初の呼び出しに/etc/pam.d/gdm-launch-environment2つの呼び出しがあることをに設定することでした。これにより、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で提供されている場合は、ユーザーのキャッシュをローカルに保存すると便利です。します。 、のような:

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へのすべての参照を削除しました。

関連情報