Встановити змінні середовища для gnome на wayland та bash на віртуальних терміналах (або ssh)


13

Gnome 3.22 за замовчуванням використовує wayland. Gnome на Wayland не читає ~/.profile(або ~/.bash_profileабо /etc/profile). Дивіться https://bugzilla.gnome.org/show_bug.cgi?id=736660 .

У мене налаштовані такі файли ініціалізації:

  • .bash_profileне робить нічого, крім джерела .profileі.bashrc
  • .profileвстановлює лише змінні середовища як PATHіLC_MESSAGES
  • .bashrcвстановлює деякі базові параметри та псевдоніми та змінні середовища для таких додатків, як lessі grep.

Ефект (перед Wayland) був наступним:

  • коли я графічно .profileвходив в систему, було прочитано, а змінні середовища на зразок PATHі LC_MESSAGESбули встановлені. коли я відкриваю bash всередині термінального емулятора.bashrc був прочитаний.
  • коли я .bash_profileвходив під віртуальний термінал, тоді було прочитано, що в свою чергу читає .profileі.bashrc .
  • коли я входжу за допомогою ssh, то поведінка схожа на віртуальний термінал.

У всіх випадках .profileі.bashrc читалися і моє оточення було створено.

Отже, зараз gnome 3.22 використовує Wayland, а Wayland не читає .profile . Як я можу налаштувати свої файли ініціалізації, щоб я знову мав ефекти, як описано вище?

Зауважте, що я не наполягаю на певних файлах (наприклад, .profile ) читалися. Я хочу, щоб моє оточення було налаштоване на розумний спосіб. Це означає, що я хочу зберегти конкретні параметри bash для файлів ініціалізації bash та інші параметри для інших файлів ініціалізації. Також я хотів би не копіювати налаштування в різні файли.

Я використовую аркуш Linux. Відповіді на всі дистрибуції вітаються. Пропонуючи рішення, будь ласка, опишіть побічні ефекти та переваги та недоліки.


оновлення листопада 2017 року: наскільки я розумію, розробники gnome визнали, що люди очікують, що їх конфігураційні файли оболонки для входу ( .profileа також .bash_profileу випадку з баш) отримані після входу. незалежно від тексту чи графічного входу. тому мій випадок використання, описаний вище, працює знову.

все-таки розробники gnome хочуть відійти від запуску оболонки для входу. видається, що напрямок, яким вони рухаються, - це використовувати оточуючий з systemd:

https://in.waw.pl/~zbyszek/blog/environmentd.html

Мабуть, пройде деякий час, поки всі методи входу не будуть адаптовані до середовища.

Відповіді:


7

Версія Systemd 233 (березень 2017 р.) Додала підтримку для встановлення змінних середовища в ~/.config/environment.d/*.conf. Дивіться на environment.dсторінку людини і обговорення , що призвело до функції на цьому попередньому PR і цієї останньої одиниці .


це здається дуже хорошим рішенням. я зробив швидкий тест. він працює в gnome wayland, але не працює у віртуальному терміналі. я припускаю, що це також не працюватиме для ssh. я читав сторінку чоловіка, але лише обіймав дискусії. чи маєте ви ідею, чи це також буде працювати у віртуальних терміналах та ssh?
lesmana

1
ось хороший підсумок ситуації: in.waw.pl/~zbyszek/blog/environmentd.html . останній абзац говорить про те, що підтримка віртуального терміналу (і ssh?) "може" прийти. принаймні, якщо я правильно це зрозумів.
lesmana

Що цікаво, я не розумів, що GDM мусить додати для цього спеціальну підтримку, щоб вона працювала. Чи могла бути якась домовленість, коли всі типи сеансів є дітьми єдиного процесу обслуговування користувачів, який вже проаналізував ці середовищі, і все це просто працює, без того, щоб GDM / sshd нічого про це не знали?
Джек О'Коннор

1
Для Fedora 30 це не працює для GDM / Wayland.
jonleighton

'Рішення' пропускає розумний випадок використання: якщо A, то встановіть B. Як один приклад, якщо XDG_SESSION_TYPE = wayland, тоді встановіть QT_QPA_PLATFORM = wayland.
vk5tu

5

Це вирішення, яке я використовую для тієї самої проблеми:

Крок 1

Створіть сценарій, що джерела, ~/.profileі зробіть цей сценарій виконуваним. Давайте назвемо це /path/to/startup.sh. Це могло виглядати приблизно так:

#!/bin/bash
. ~/.profile

Крок 2

Створіть настільний додаток для запуску сценарію. Для цього вам потрібно створити .desktopфайл і розмістити його ~/.local/share/applications(або /usr/share/applicationsякщо ви хочете, щоб він працював для всіх користувачів). Давайте назвемо це ~/.local/share/applications/startup.desktop. Це могло виглядати приблизно так:

[Desktop Entry]
Name=Startup
Keywords=startup
Exec=/path/to/startup.sh
Type=Application

Більше інформації про .desktopфайли дивіться тут .

Крок 3

Вийти. Увійдіть назад. Тепер ви зможете шукати свою програму в меню програм.

Крок 4

Встановіть цю програму як програму для запуску. Для цього я використав інструмент для налаштування Gnome Tweak і додав свою заявку до списку на вкладці «Запуски програм».

І це все! Тепер ви повинні мати свою стару функціональність кожного разу, коли ви входите в систему. Вона також зберігає структуру файлів неушкодженою, тому, коли помилка в Wayland виправляється, все, що вам потрібно зробити, це видалити додаток зі списку програм запуску, видаліть два файли. і все повернулося до норми.

Пізніше відредагуйте

Як в коментарях зазначає @Guss, цей спосіб вирішення не буде експортувати змінні середовища, оскільки startup.shвін працює у власній оболонці. Тому нам потрібен ще один спосіб вирішення цих питань.

Читаючи з документації GNOME, ви бачите, що існує кілька альтернатив. Єдине, що я міг би приступити до роботи, це створити файл /usr/share/gdm/env.d/і в цьому файлі розмістити змінні, які потрібно експортувати. Однак це означає, що змінні будуть експортовані для всіх користувачів, тому я закінчив це:

Скажімо, у нас є два користувачі, Джон та Салі . Для кожного з них створіть файл у /usr/share/gdm/env.d/, давайте назвемо їх startup_john.envі startup_sally.env. У цих файлах розміщують змінні середовища, які потрібно експортувати, коли вони починають новий сеанс GNOME.

$ cat startup_john.env
VAR=1
$ cat startup_sally.env
VAR=2

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

$ ls -l startup_john.env
-rw-r-----. 1 john john 4 Dec 27 15:17 startup_john.env
$ ls -l startup_sally.env
-rw-r-----. 1 sally sally 4 Dec 27 15:16 startup_sally.env

Я не погоджуюсь з цим елегантним рішенням, але, наскільки я тестував, здається, що робота виконана.


Я не перевіряв це, але він не повинен працювати, оскільки startup.shвін працює у власній оболонці і не експортує змінні середовища у батьківський контекст виконання. В якості прикладу, спробуйте запустити цей код у вашій оболонці: echo "a is $a"; (export a="B"); echo "a is $a" . За словами @Tudor, результат другого відлуння буде результатом a is B, який - ви побачите, коли запустите код - це не те, що станеться.
Гасс

Привіт @Guss, ти маєш рацію. Я цього не помічав, але тепер, коли ви це вказали, я також знайшов вирішення змінних середовищ. Відповідно оновлю відповідь.
Tudor Vișan

1
Будь ласка, я хотів би побачити, що ви придумали. Крім того, я вважаю, що ви налаштовані оптимістично, коли говорите: "коли помилка у Вейленді виправляється" - це не помилка в Wayland, а в GNOME, і GNOME люди не вважають це помилкою - це документально підтверджена поведінка: wiki .gnome.org / ініціативи / Wayland / SessionStart
Guss

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