Как я устанавливаю ПУТЬ или другие переменные среды так, чтобы X приложений могли получить доступ к нему?

Ничего: существует три стандартных описания файлов, STDIN, STDOUT и STDERR. Они присвоены 0, 1, и 2 соответственно.

Что Вы видите, что существует артефакт пути ls(1) работы: для чтения содержания /proc/self/fd каталог и дисплей это, это должно открыть тот каталог.

Это означает, что получает дескриптор файла, обычно первое доступное... таким образом, 3.

Если необходимо было работать, скажем, cat на отдельной консоли и осматривают /proc/${pid}/fd для него Вы нашли бы, что только первые три были присвоены.

16
13.04.2017, 15:37
3 ответа

pam_env модуль PAM позволяет нам, Вы устанавливаете их любой в /etc/environment или в ~/.pam_environmentВ зависимости от того, хотите ли Вы это для всех пользователей (в масштабе всей системы) или просто Вашего пользователя (всей сессии).

Переменные среды в масштабе всей системы

Настройки переменной среды, которые влияют на систему в целом (скорее затем просто конкретный пользователь) не должны быть помещены ни в один из многих сценариев системного уровня, которые выполняются, когда система или настольная сессия загружаются, но в

/etc/environment - Этот файл конкретно предназначен для настроек переменной среды в масштабе всей системы. Это не файл сценария, а скорее состоит из выражений присваивания, один на строку. А именно, это хранилища файлов локаль в масштабе всей системы и настройки пути.

Переменные среды всей сессии

Настройки переменной среды, которые должны влиять просто на конкретного пользователя (скорее затем система в целом) должны быть установлены в:

~/.pam_environment - Этот файл конкретно предназначен для установки среды пользователя. Это не файл сценария, а скорее состоит из выражений присваивания, один на строку.

Примечание: Использование .pam_environment требует перевхода в систему для инициализации переменных. Перезапуск просто терминала не достаточен, чтобы смочь использовать переменные.

Посмотрите больше в Wiki Ubuntu на Переменных среды.

12
27.01.2020, 19:49
  • 1
    я установил его на том же разделе, где я установил его в прошлый раз проблема с ~/.pam_environment решение состоит в том, что по умолчанию pam_env модуль не читает его, если распределение не настраивает его иначе. На Fedora 20 это не читается, например. –  Cristian Ciupitu 13.05.2014, 12:36
  • 2
    @CristianCiupitu является правильным. ~/.xsession загрузит переменные среды для X приложений. Посмотрите unix.stackexchange.com/questions/47359/what-is-xsession-for –  Tek 10.02.2015, 03:00
  • 3
    @CristianCiupitu: Большое спасибо за Ваш комментарий, которые приводят меня к pam_env. Я обновил свои файлы Fedora 24 pam для включения пользовательской среды. Теперь мои сессии Уэйленда у всех есть пользовательский ПУТЬ снова. –  Zan Lynx 17.08.2016, 23:06
  • 4
    @CristianCiupitu то, что верен? linux-pam.org/Linux-PAM-html/sag-pam_env.html документации подразумевает, что ~/.pam_environment является файлом по умолчанию, который будет считан, если иначе не указано. Посмотрите строку на user_envfile=filename. Моя проблема с pam_env состоит в том, что ДОМАШНЯЯ переменная не может быть доступной в зависимости от приложения PAM. Который ограничивает его использование просто абсолютными переменными. –  CMCDragonkai 20.09.2016, 21:45
  • 5
    @CMCDragonkai, pam_env (8) страница справочника от Fedora раньше говорила: "По умолчанию эта опция прочь, поскольку предоставленные переменные среды пользователя в среде PAM могли влиять на поведение последующих модулей в стеке без согласия системного администратора". Таким образом, в то время как восходящий модуль PAM имеет некоторые настройки по умолчанию, некоторые дистрибутивы перезаписывают их. –  Cristian Ciupitu 21.09.2016, 15:49

/etc/X11/Xsession.d/ ... или вроде того каталога, в зависимости от Вашего Linux (?). Я записал немного на нем здесь.

Понятие - то, что после входа в систему, менеджер по оформлению запускает "Xsession" и получает (!) все в том каталоге в алфавитном порядке. Можно просто добавить сценарий, который изменяет ПУТЬ. Xsession будет untimately быть Вашим DE, и обычно все процессы являются детьми что Xsession, поэтому наследовав среду ПУТИ.

1
27.01.2020, 19:49
  • 1
    Существует ли эквивалент, который я могу установить в своем каталоге $HOME? Как.Xsession? –  Code-Guru 03.07.2013, 23:22
  • 2
    Согласно Xession (5): /etc/X11/Xsession.d/40x11-common_xsessionrc Источник глобальные переменные среды. Этот сценарий получит что-либо в $HOME/.xsessionrc, если файл будет присутствовать. Это позволяет пользователю устанавливать глобальные переменные среды для их X сессий, такие как информация о локали. –  Bananguin 04.07.2013, 11:50

Процесс наследовал среду от родительского процесса, который запускает его. Изменить ПУТЬ или другую среду оценивает в ребенке, мы можем установить переменную на значение в родителе и экспортировать переменную, если мы находимся в оболочке и затем запускаем дочерний процесс. Ребенок может также считать один или несколько файлов инициализации для изменения его собственной среды, как она запускается.

Так, существует еще два вопроса добраться до ответа:

Что родительское/дочернее наследование является деревом, которое приводит к процессу, что Вы хотите быть затронутыми ПУТЕМ или изменением среды?

Какие файлы инициализации используются/считаются/получаются соответствующими процессами в том дереве?

Вот часть вывода PS (1) для показа то, что я подразумеваю под деревом наследования:

# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf 

UID   PID  PPID USER COMMAND
  0     1     0 root /usr/lib/systemd/systemd
  0  1481     1 root /usr/sbin/gdm-binary -nodaemon
  0  1497  1481 root  \_ /usr/libexec/gdm-simple-slave ...
  0  1504  1497 root      \_ /usr/bin/Xorg :0 ...
  0  1855  1497 root      \_ gdm-session-worker ...

Отметьте \_ графические последовательности и числа PIP/PPID (Идентификатор процесса и Родитель PID). PID 1855 был запущен (некоторый ребенок?) 1497, который был запущен к 1481, который был запущен PID 1, который был запущен предком, обрабатывают 0.

Сделайте подобную трассировку наследования для процесса, на который Вы хотите влиять, выяснить, какие файлы инициализации релевантны, и вносят изменение для СОЕДИНЕНИЯ КАНАЛОМ где-нибудь в том дереве, вероятно, с чем-то подобным:

PATH=${PATH}:/usr/local/bin
1
27.01.2020, 19:49
  • 1
    Могу я использовать ps определить родительский процесс входа в систему GUI? –  Code-Guru 03.07.2013, 23:20

Теги

Похожие вопросы