NFS 用户面临 GUI 体验不佳的问题

NFS 用户面临 GUI 体验不佳的问题

我正在设置一个系统 (ubuntu 12.04),该系统使用 ldap、pam 和 autofs 从远程服务器加载用户及其主文件夹。登录的选项之一是坐在机器前并启动 GUI 会话。诸如 chormium(浏览器)之类的程序在 ~/.cache 和 ~/.config 文件中执行许多读/写操作,这减慢了 GUI 体验,并给 NFS 服务器带来了压力,导致其他用户遇到问题。

Ubuntu 有非常方便的 XDG_CONFIG_HOME 和 XDG_CACHE_HOME 变量,可以设置这些变量以将 .cache 和 .config 的默认位置从主文件夹更改为其他位置。有多个位置可以设置它们,但大多数都不是最佳的。

  1. /etc/环境

    • 优点:适用于所有 shell
    • 缺点:不能使用像 $USER 这样的变量,因此您无法让用户拥有不同的 .cache 和 .config 新位置。每个用户的新位置都是同一个目录。
  2. /etc/bash.bashrc

    • 优点:$USER 有效,因此您可以将它们放在不同的文件夹中
    • 缺点:仅适用于 bash 兼容 shell
  3. ~/.pam_environment

    • 优点:无论使用哪种 shell 都可以工作
    • 缺点:不能使用系统变量(如 $USER),有自己的语法,并且必须为每个用户创建

答案1

您在 pam 中有一个系统变量,因此我会选择选项 3。

设置变量/etc/security/pam_env.conf

XDG_CACHE_HOME  DEFAULT="/var/cache/users/@{PAM_USER}/.cache" #or any other place

并确保该目录存在于/etc/profile

if [ "$USER" == "root" ]; then   
  unset XDG_CACHE_HOME 
else   
  test -d $XDG_CACHE_HOME || mkdir -p $XDG_CACHE_HOME
fi

答案2

我的解决方案适用于所有 shell,并且是自动完成的,因此新用户无需管理员操作。它使用 ~/.pam_environment 以及登录时运行的简短脚本。

在用户登录时,简短的脚本会在用户的主目录中查找 .pam_environment 文件。如果不存在,它会创建它并添加行以设置 XDG_CACHE_HOME 和 XDG_CONFIG_HOME。请注意,在我的实例中,我将 .config 和 .cache 文件放在 /home/nfs_users/username/

也可以将它们放在 /tmp/username/ 中。每次重启后它们都会被销毁。您可能希望将您的文件放在更永久的地方。

  1. 启用 ~/.pam_environment 的使用:

    • 在文件“/etc/pam.d/common-session”中将以下行添加到文件末尾:

      会话需要 pam_env.so

  2. 创建一个在用户登录时运行的 shell 脚本。它是“/etc/profile.d/local.sh”。您可能已经或可能还没有此文件中的内容。您可以添加以下代码,或者如果文件不存在,则创建该文件。注意:所选目录(在本例中为 /home/nfs_users/)必须存在并且所有登录用户都可以写入。

    if [ ! -d '/home/nfs_users/'${USER} ]; then
        mkdir '/home/nfs_users/'${USER}
    fi
    if [ ! -e ${HOME}/.pam_environment ]; then
        echo 'XDG_CACHE_HOME DEFAULT="/home/nfs_users/'${USER}'/.cache"' > ${HOME}"/.pam_environment"
        echo 'XDG_CONFIG_HOME DEFAULT="/home/nfs_users/'${USER}'/.config"' >> ${HOME}"/.pam_environment"
    fi
    
  3. 然后使脚本可执行:

    sudo chmod +x /etc/profile.d/local.sh

  4. 验证它是否正常工作。注销并重新登录。echo $XDG_CONFIG_HOME应该echo $XDG_CACHE_HOME返回正确的目录。此外,一旦您开始运行使用缓存的 GUI 应用程序,.config 和 .cache 文件中应该包含一些内容(使用 ls 检查其内容)。

更新:

因此,旧解决方案将文件存储在临时内存中,因此它会在注销和关机时重置。为避免这种情况,请不要将文件存储在 /tmp 中

这会改变步骤 2。我选择在 /home 中为 nfs_users (/home/nfs_users) 创建一个文件夹,该文件夹需要由所有可以登录的用户写入。您可以选择将其放在其他地方。

相关内容