
Мне нужно установить переменную окружения, GDK_NATIVE_WINDOWS
чтобы исправитьпроблема с кнопками Eclipse в Ubuntu. Чтобы задать переменную окружения, я добавил следующую строку в ~/.pam_environment
.
GDK_NATIVE_WINDOWS ПО УМОЛЧАНИЮ=истина
Удивительно, но переменная окружения не устанавливается, когда я echo $GDK_NATIVE_WINDOWS
в терминале. Однако все остальные переменные окружения, которые я перечислил в , ~/.pam_environment
установлены правильно. Кроме того, когда я переключаюсь на tty, например Alt+Ctrl+F1
, переменная окружения устанавливается правильно. Что не так с установкой этой переменной окружения в ~/.pam_environment
?
решение1
Придерживайтесь простого синтаксиса "ключ=значение" в файле ~/.pam_environment. Никаких DEFAULT, OVERRIDE, ${HOME}, ничего. Просто ключ=значение. Страница руководства, на которую вы ссылаетесь, предназначена только для pam_env.conf. Смотрите "man 8 pam_env", который не обещает ничего другого "Этот модуль также может анализировать файл с простыми парами KEY=VAL на отдельных строках".
Кстати, указание чего-то вроде PATH=${PATH}:more/paths в ./pam_environment — это отличный способ прервать практически любую попытку входа в систему, поскольку PATH устанавливается в ${PATH}:more/pathsбуквально(там не так уж много всего можно найти). Чтобы спасти, "/bin/mv .pam_environment out_of_the_way" и перелогиньтесь.
решение2
Как вы определили, ваши переменные среды должны быть установлены ~/.pam_environment
в соответствии с рекомендациямиhttps://help.ubuntu.com/community/EnvironmentVariables. Легче сказать, чем сделать ;)
Возможно, вы столкнулись с тем же пробелом в конфигурации, что и я. Ниже приведено решение для зашифрованного дома.
Мой ~/.pam_environment
:
PATH DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK DEFAULT=${HOME}/Applications/jdk
Почему уродливый статический путь? ${PATH}
Мне бы не подошёл. Я несколько раз блокировал свой вход, пытаясь обойти это, поэтому я придерживаюсь уродливой статической копии значений по умолчанию :)
Обходной путь для зашифрованных домашних папок
В релизах Ubuntu вплоть доУбунту 12.04(Precise Pangolin) Beta 2, если вы используете зашифрованный домашний каталог, вам нужно будет изменить /etc/pam.d/common-session
его, чтобы загрузить ~/.pam_environment
. Это решение, по-видимому, работает для более ранних выпусков, но я его не тестировал.
Гюнтер Монтаг (g-montag) написал 19 августа 2010 г.:
Похоже, это проблема с зашифрованными домашними каталогами. Я добавил
требуется сеанс pam_env.so
в конце /etc/pam.d/common-session и теперь ~/.pam_environment читается. В другой системе без зашифрованных домашних каталогов (также 10.04) обходной путь не нужен. Возможно, в моем случае система пытается прочитать ~/.pam_environment до того, как он будет расшифрован.
решение3
У вас есть пробел между GDK_NATIVE_WINDOWS и DEFAULT=true . Это отличается от примера, на который вы ссылались.
Пытаться:
GDK_NATIVE_WINDOWS=истина
решение4
В Debian bullseye (вероятно, еще в 2013 году) и Ubuntu до версии не ниже 14.04 (проверено в контейнере docker) ~/.pam_environment не читается через user_endir по умолчанию выключено для pam_env (см. man 7 pam_env
). Если вы хотите включить его снова:
echo 'session optional pam_env.so user_readenv=1' >> /etc/pam.d/common-session
то есть, установите для интерактивного сеанса (CLI или графический вход, например su) pam_env с user_reader на 1.
Я считаю, что он был отключен по следующим причинам:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4708" Модуль pam_env в Linux-PAM (он же pam) 1.1.2 и более ранних версиях считывает файл .pam_environment в домашнем каталоге пользователя, что может позволить локальным пользователям запускать программы с непреднамеренной средой путем выполнения программы, которая полагается на проверку PAM pam_env. "
Хотя приведенное выше описание мне не совсем понятно. Если это означает, что ~/.pam_environment позволяет изменять среду программы без ведома пользователя, то любая опция в домашней папке будет такой же (например, ~/.profile, ~/.zprofile). Помните, что ~/.profile должен быть прочитан графическими менеджерами входа... так зачем удалять ~/.pam_environment и оставлять ~/.profile?
Правильным способом было бы иметь возможность устанавливать переменные среды для каждого пользователя в /etc/security/pam_env.conf. Хотя пока не запрошено вышестоящим. Или любая опция, редактируемая только с правами администратора.