![NFS 用户面临 GUI 体验不佳的问题](https://linux22.com/image/963430/NFS%20%E7%94%A8%E6%88%B7%E9%9D%A2%E4%B8%B4%20GUI%20%E4%BD%93%E9%AA%8C%E4%B8%8D%E4%BD%B3%E7%9A%84%E9%97%AE%E9%A2%98.png)
我正在设置一个系统 (ubuntu 12.04),该系统使用 ldap、pam 和 autofs 从远程服务器加载用户及其主文件夹。登录的选项之一是坐在机器前并启动 GUI 会话。诸如 chormium(浏览器)之类的程序在 ~/.cache 和 ~/.config 文件中执行许多读/写操作,这减慢了 GUI 体验,并给 NFS 服务器带来了压力,导致其他用户遇到问题。
Ubuntu 有非常方便的 XDG_CONFIG_HOME 和 XDG_CACHE_HOME 变量,可以设置这些变量以将 .cache 和 .config 的默认位置从主文件夹更改为其他位置。有多个位置可以设置它们,但大多数都不是最佳的。
/etc/环境
- 优点:适用于所有 shell
- 缺点:不能使用像 $USER 这样的变量,因此您无法让用户拥有不同的 .cache 和 .config 新位置。每个用户的新位置都是同一个目录。
/etc/bash.bashrc
- 优点:$USER 有效,因此您可以将它们放在不同的文件夹中
- 缺点:仅适用于 bash 兼容 shell
~/.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/ 中。每次重启后它们都会被销毁。您可能希望将您的文件放在更永久的地方。
启用 ~/.pam_environment 的使用:
在文件“/etc/pam.d/common-session”中将以下行添加到文件末尾:
会话需要 pam_env.so
创建一个在用户登录时运行的 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
然后使脚本可执行:
sudo chmod +x /etc/profile.d/local.sh
验证它是否正常工作。注销并重新登录。
echo $XDG_CONFIG_HOME
应该echo $XDG_CACHE_HOME
返回正确的目录。此外,一旦您开始运行使用缓存的 GUI 应用程序,.config 和 .cache 文件中应该包含一些内容(使用 ls 检查其内容)。
更新:
因此,旧解决方案将文件存储在临时内存中,因此它会在注销和关机时重置。为避免这种情况,请不要将文件存储在 /tmp 中
这会改变步骤 2。我选择在 /home 中为 nfs_users (/home/nfs_users) 创建一个文件夹,该文件夹需要由所有可以登录的用户写入。您可以选择将其放在其他地方。