4

В Ubuntu переменная пути хранится в /etc /environment. Это мое (я не вносил в него никаких изменений, это системная настройка по умолчанию):

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

но когда я проверяю свою переменную PATH:

$ echo $PATH
/home/dan/bin:/home/dan/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11

Вы заметите, что /usr /games отсутствует (это было до нескольких дней назад). Мой /etc /profile не упоминает PATH. Мой ~ /.profile используется по умолчанию и имеет только:

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Это происходит только в гноме, а не в tty1-6. Этого не хватает как в терминале gnome, так и при попытке вызвать приложения из выпадающего списка приложений. Кто-нибудь знает, что может быть причиной этого?

Благодарю.

2 ответа2

4

Если ваша оболочка - bash, она не обращает внимания на /etc /environment, по крайней мере, так, как говорит man-страница и strace bash . Действительно, я не могу найти ни одной программы в списке, которая упоминает /etc /environment.

В Ubuntu я сталкивался с подобными ситуациями, когда существует 4 или более уровней косвенного обращения, указывающих на то, что вы действительно хотите. Часто мне кажется, что проще установить приблизительный, а не окончательный источник данных.

В этом случае изменение вашего личного пути в ~/.profile фактически является правильным способом сделать это, по крайней мере, с V7 Unix.

1

Никто действительно не ответил на коренную причину этой проблемы. У @msw есть правильное решение, но я хочу объяснить, что происходит.

В Ubuntu, когда вы используете приложение, которое знает pam, оно будет запускаться через список модулей, перечисленных в /etc/pam.d/*, один из этих модулей, используемых во время входа, контролирует, какие переменные среды устанавливаются. /etc/pam.d/login или /etc/pam.d/su , вероятно, являются модулями, которые вы сработали при входе в систему вашего пользователя. В этих файлах /etc/login.defs используется для определения вашей базовой среды, как показано здесь.

#
# *REQUIRED*  The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Я недостаточно глубоко изучил, где это происходит в pam, но это должно помочь прояснить ситуацию. У вас также может быть параметр, который отменяет вышеуказанное в /etc/security/pam_env.conf а также в нескольких других местах.

http://www.tuxradar.com/content/how-pam-works, если вы действительно хотите понять, как работает pam и как определить, какие программы его используют.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .