Вопрос или проблема
У меня есть странная проблема с моей системой Debian Sid. Я хочу установить глобальную переменную окружения в /etc/environment
, которую должен читать модуль pam_env
. К сожалению, после повторного входа в систему переменная не устанавливается.
На другой системе Arch Linux та же переменная, установленная в /etc/environment
, определяется как ожидается. Просто для теста я попытался установить локальную переменную окружения в .pam_environment
, и снова на Debian она не определяется, в то время как на Arch — да.
Я использую GDM на Debian и SDDM на Arch в качестве менеджеров входа. Что я упускаю? На какие (PAM или GDM) конфигурационные файлы мне следует посмотреть?
ИЗМЕНЕНИЕ:
вывод команды grep pam_env /etc/pam.d/*
$ grep pam_env /etc/pam.d/*
/etc/pam.d/atd:auth required pam_env.so
/etc/pam.d/cron:# Чтение переменных окружения из файлов по умолчанию pam_env, /etc/environment
/etc/pam.d/cron:# и /etc/security/pam_env.conf.
/etc/pam.d/cron:session required pam_env.so
/etc/pam.d/cron:session required pam_env.so envfile=/etc/default/locale
/etc/pam.d/gdm-autologin:session required pam_env.so readenv=1
/etc/pam.d/gdm-autologin:session required pam_env.so readenv=1 envfile=/etc/default/locale
/etc/pam.d/gdm-launch-environment:session required pam_env.so readenv=1
/etc/pam.d/gdm-launch-environment:session required pam_env.so readenv=1 envfile=/etc/default/locale
/etc/pam.d/gdm-password:session required pam_env.so readenv=1
/etc/pam.d/gdm-password:session required pam_env.so readenv=1 envfile=/etc/default/locale
/etc/pam.d/login:# файл /etc/security/pam_env.conf.
/etc/pam.d/login:session required pam_env.so readenv=1
/etc/pam.d/login:session required pam_env.so readenv=1 envfile=/etc/default/locale
/etc/pam.d/polkit-1:session required pam_env.so readenv=1 user_readenv=0
/etc/pam.d/polkit-1:session required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
/etc/pam.d/su:# файл /etc/security/pam_env.conf.
/etc/pam.d/su:session required pam_env.so readenv=1
/etc/pam.d/su:session required pam_env.so readenv=1 envfile=/etc/default/locale
Для потомков: если на Debian вы добавите
session required pam_env.so user_readenv=1
в /etc/pam.d/gdm-password
, то PAM действительно применит ваши настройки переменных окружения из ~/.pam_environment
при входе по паролю с использованием GDM. Если вы входите другим способом, то ищите соответствующий файл в /etc/pam.d
.
Ответ или решение
Ваша проблема заключается в том, что на Debian по умолчанию PAM (Pluggable Authentication Modules) не применяет настройки переменных окружения, находящихся в файле ~/.pam_environment
или в файле /etc/environment
. В отличие от Arch Linux, где это поведение более "прозрачно", Debian требует определенных настроек для корректной работы данной функциональности.
Для решения вашей проблемы необходимо добавить необходимую конфигурацию в файлы PAM, отвечающие за логин через GDM (GNOME Display Manager). Вот шаги, которые вам нужно выполнить:
-
Откройте файл конфигурации PAM для GDM:
Вам нужно редактировать файл
/etc/pam.d/gdm-password
. Для этого выполните команду:sudo nano /etc/pam.d/gdm-password
-
Добавьте строку для чтения переменных окружения:
Вставьте следующую строку в файл, чтобы разрешить PAM использовать переменные окружения из
~/.pam_environment
:session required pam_env.so user_readenv=1
-
Сохраните изменения и выйдите из редактора.
-
Перезагрузите систему или выполните выход из сеанса и повторно войдите, чтобы изменения вступили в силу.
Теперь при авторизации через GDM PAM будет корректно загружать переменные окружения, определенные в ~/.pam_environment
.
Если у вас есть другие дисплейные менеджеры, такие как SDDM, вам нужно аналогичным образом отредактировать соответствующие файлы в /etc/pam.d/
, добавив строку с pam_env.so
, как показано выше.
Дополнительные советы:
-
Убедитесь, что ваши переменные окружения правильно прописаны. Формат должен быть:
VARIABLE_NAME=value
, гдеVARIABLE_NAME
— название переменной окружения, аvalue
— её значение. -
Проверьте, какие другие PAM модули могут влиять на ваше окружение. Например, модули, связанные с
polkit
, могут также влиять на доступные переменные окружения.
Если выполненные шаги не приведут к желаемому результату, вы также можете проверить файлы журналов для получения дополнительной информации о сбоях при чтении переменных окружения, что может помочь в диагностике проблемы.