Як встановити PATH або інші змінні середовища, щоб X програми могли отримати доступ до нього?


16

Як я можу встановити змінні env, щоб KDE розпізнавав їх?

Як встановити шлях у середовищі без оболонки (KDE)?

На відміну від вищевказаних питань, я хочу знати, як це зробити для GNOME. Або ще краще, чи існує метод, який не залежить від менеджера вікон. Для оболонки / терміналу я зазвичай редагую ~/.bashrc. Де я можу розмістити оператори експорту, щоб змінні середовища були доступні для всіх програм X, незалежно від використовуваного менеджера вікон?

Відповіді:


12

Модуль PAM_env PAM дозволить вам встановити їх або в, /etc/environmentабо в ~/.pam_environment, залежно від того, бажаєте ви це для всіх користувачів (для системи) або просто для вашого користувача (для сеансу).

Загальносистемні змінні середовища

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

/etc/environment- Цей файл призначений спеціально для системних параметрів змінної середовища. Це не файл скриптів, а складається з виразів призначення, по одному на рядок. Зокрема, цей файл зберігає загальносистемні параметри та параметри шляху.

Змінні середовища для всієї сесії

Параметри змінної середовища, які повинні впливати на конкретного користувача (а не на систему в цілому), слід встановити в:

~/.pam_environment- Цей файл призначений спеціально для налаштування середовища користувача. Це не файл скриптів, а складається з виразів призначення, по одному на рядок.

Примітка: для використання .pam_environmentпотрібен повторний вхід для ініціалізації змінних. Перезапуск просто терміналу недостатній, щоб мати можливість використовувати змінні.

Докладніше див. У вікі-програмі Ubuntu на веб-перекладах .


2
Проблема ~/.pam_environmentрішення полягає в тому, що модуль pam_env за замовчуванням не читає його, якщо тільки розподіл не налаштовує його інше. У Fedora 20, наприклад, не читається.
Крістіан Цюпіту

@CristianCiupitu має рацію. ~/.xsessionзавантажить змінні середовища для додатків X. Див unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek

@ CristianCiupitu: Дякую за ваш коментар, який привів мене до pam_env. Я оновив свої файли пам’яті Fedora 24 пам’яті, щоб увімкнути користувальницьке середовище. Тепер мої сеанси Wayland знову мають спеціальний PATH.
Зан Лінкс

@CristianCiupitu це правда? Документація linux-pam.org/Linux-PAM-html/sag-pam_env.html означає, що ~ / .pam_environment - це файл за замовчуванням, який слід читати, якщо не вказано інше. Дивіться рядок на user_envfile=filename. Моя проблема з pam_env полягає в тому, що змінна HOME може бути недоступною в залежності від програми PAM. Що обмежує його використання лише абсолютними змінними.
CMCDragonkai

2
@CMCDragonkai, головна сторінка pam_env (8) від Fedora звикла говорити: " За замовчуванням ця опція вимкнена, оскільки змінні середовища, що надаються користувачем у середовищі PAM, можуть впливати на поведінку наступних модулів у стеку без згоди системного адміністратора" . Отже, хоча PAM-модуль висхідної течії має деякі налаштування за замовчуванням, деякі дистрибутиви замінюють їх.
Крістіан Цюпіту

1

/etc/X11/Xsession.d/... або по рядках цього каталогу, залежно від вашого Linux (?). Я трохи тут написав про це .

Концепція полягає в тому, що після входу, диспетчер дисплеїв запускає "Xsession" і виводить (!) Все в цьому каталозі в алфавітному порядку. Ви можете просто додати скрипт, який модифікує PATH. Xsession неодмінно буде вашим DE, і зазвичай всі процеси є дітьми цієї Xsession, тому успадковуючи середовище PATH.


Чи є еквівалент, який я можу встановити у своєму каталозі $ HOME? Як .Xsession?
Code-Guru

За даними Xession (5): /etc/X11/Xsession.d/40x11-common_xsessionrc Джерела глобальних змінних умов середовища. Цей скрипт буде джерелом нічого в $ HOME / .xsessionrc, якщо файл присутній. Це дозволяє користувачеві встановлювати глобальні змінні середовища для свого X сеансу, такі як інформація про локалі.
Bananguin

1

Процес успадковує середовище від батьківського процесу, який його запускає. Щоб змінити значення PATH або інших значень середовища у дитини, ми можемо встановити змінну на значення у батьківській програмі та експортувати змінну, якщо ми знаходимось у оболонці, а потім запустити дочірній процес. Також дитина може прочитати один або кілька файлів ініціалізації, щоб змінити власне середовище під час його запуску.

Отже, є ще два питання, щоб отримати відповідь:

Яке дерево успадкування батьків / дітей, яке призводить до процесу, на який ви хочете вплинути PATH або зміни середовища?

Які файли ініціалізації використовуються / читаються / отримуються за допомогою відповідних процесів у цьому дереві?

Ось частина результату 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=${PATH}:/usr/local/bin

Чи можу я використовувати psдля визначення батьківського процесу входу в графічний інтерфейс?
Code-Guru
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.