Пользователи NFS получают медленный графический интерфейс

Я настраиваю систему (Ubuntu 12.04), которая использует ldap, pam и autofs для загрузки пользователей и их домашних папок с удаленного сервера. Один из вариантов входа в систему - сесть за компьютер и запустить сеанс графического интерфейса. Такие программы, как chormium (браузер), которые выполняют многие операции чтения / записи в файлах ~/.cache и ~/.config, замедляют работу графического интерфейса пользователя, а также создают нагрузку на сервер NFS, которая вызывает проблемы у других пользователей.

В Ubuntu есть удобные переменные XDG_CONFIG_HOME и XDG_CACHE_HOME, которые можно изменить, чтобы изменить расположение по умолчанию.cache и.config из домашней папки в другое место. Есть несколько мест для их установки, но большинство из них не являются оптимальными.

  1. / И т.д. / окружающая среда

    • плюсы: будет работать через все оболочки
    • Недостатки: нельзя использовать переменные, такие как $USER, так что вы не можете заставить пользователей иметь разные новые местоположения для.cache и.config. Новое местоположение каждого пользователя будет одним и тем же каталогом.
  2. /etc/bash.bashrc

    • Плюсы: $USER работает, поэтому вы можете разместить их в разных папках
    • минусы: запускается только для совместимых с bash оболочек
  3. ~ /.Pam_environment

    • плюсы: работает независимо от оболочки
    • минусы: не может использовать системные переменные (например, $USER), имеет собственный синтаксис и должен быть создан для каждого пользователя

2 ответа

Решение

Мое решение работает для всех оболочек и выполняется автоматически, поэтому для новых пользователей никаких действий администратора не требуется. Он использует ~ /.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. Создайте сценарий оболочки для запуска при входе пользователя. Это "/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 должен вернуть правильные каталоги. Кроме того, после запуска приложений с графическим интерфейсом, которые используют кэш, в файлах.config и.cache должны быть некоторые элементы (проверьте их содержимое с помощью ls).

ОБНОВИТЬ:

Таким образом, старое решение сохраняет файлы во временной памяти, поэтому оно сбрасывается при выходе из системы и завершении работы. Чтобы избежать этого, не храните файлы в / tmp

Это меняет шаг 2. Я решил создать папку в / home для nfs_users (/ home / nfs_users), которая должна быть доступна для записи всем пользователям, которые могут войти в систему. Вы можете поместить ее в другое место.

У вас есть системные переменные в 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
Другие вопросы по тегам