Gnome 3.22 использует Wayland по умолчанию. Гном на Wayland не читает ~/.profile
(или ~/.bash_profile
или/etc/profile
). См. Https://bugzilla.gnome.org/show_bug.cgi?id=736660 .
Мои файлы инициализации настроены следующим образом:
.bash_profile
ничего не делает, кроме источника.profile
и.bashrc
.profile
устанавливает только переменные окружения, такие какPATH
иLC_MESSAGES
.bashrc
устанавливает некоторые специфичные для bash настройки, псевдонимы и переменные среды для таких приложений, какless
иgrep
.
Эффект (до Wayland) был следующим:
- когда я вхожу в систему графически
.profile
был прочитан и переменные среды, какPATH
иLC_MESSAGES
были установлены. когда я открываю bash внутри эмулятора терминала, тогда.bashrc
читал. - когда я вхожу под виртуальным терминалом, то
.bash_profile
читается, который в свою очередь читает.profile
и.bashrc
. - когда я захожу с помощью ssh, то поведение похоже на виртуальный терминал.
Во всех случаях .profile
и .bashrc
были прочитаны, и моя среда была создана.
Так что теперь гном 3.22 использует Wayland, а Wayland не читает .profile
. Как я могу настроить мои файлы инициализации так, чтобы у меня снова были эффекты, как описано выше?
Обратите внимание, что я не настаиваю на том, что определенные файлы (например, .profile
чтении ). Я хочу, чтобы моя среда была настроена разумным образом. Это означает, что я хочу сохранить определенные настройки Bash для файлов инициализации Bash и другие настройки для других файлов инициализации. Также я не хотел бы копировать настройки для разных файлов.
Я использую Arch Linux. Ответы на все рассылки приветствуются. При предложении обходного пути просьба также описать побочные эффекты, а также преимущества и недостатки.
Обновление ноябрь 2017: насколько я понимаю, разработчики GNOME признали, что люди ожидают, что их файлы конфигурации оболочки входа в систему ( .profile
и.bash_profile
в случае bash) получены после входа в систему. независимо от текстового или графического логина. так что мой вариант использования, изложенный выше, снова работает.
все же разработчики гномов хотят отойти от запуска оболочки входа в систему. похоже, что они идут в направлении использования environmentd из systemd:
https://in.waw.pl/~zbyszek/blog/environmentd.html
кажется, что пройдет некоторое время, пока все методы входа не будут адаптированы к среде.
источник
Это обходной путь, который я использую для той же проблемы:
Шаг 1
Создайте исходный скрипт
~/.profile
и сделайте его исполняемым. Давайте назовем это/path/to/startup.sh
. Это может выглядеть примерно так:Шаг 2
Создайте настольное приложение для запуска скрипта. Для этого вам нужно создать
.desktop
файл и поместить его в него~/.local/share/applications
(или,/usr/share/applications
если вы хотите, чтобы он работал для всех пользователей). Давайте назовем это~/.local/share/applications/startup.desktop
. Это может выглядеть примерно так:Для получения дополнительной информации о
.desktop
файлах смотрите здесь .Шаг 3
Выйти. Войдите в систему. Теперь вы сможете найти свое приложение в меню приложений.
Шаг 4
Установите это приложение в качестве приложения для запуска. Для этого я использовал Gweme Tweak Tool и добавил свое приложение в список на вкладке Startup Applications.
Вот и все! Теперь вы должны возвращать старую функциональность при каждом входе в систему. Она также сохраняет структуру файла без изменений, поэтому, когда ошибка в Wayland будет исправлена, все, что вам нужно сделать, это удалить приложение из списка запускаемых приложений, удалить два файла. и все возвращается на круги своя.
Позже редактировать
Как отмечает @Guss в комментариях, этот обходной путь не будет экспортировать переменные среды, потому что
startup.sh
он запускается в своей собственной оболочке. Таким образом, нам нужен еще один обходной путь для тех.Читая документацию GNOME, вы можете увидеть, что есть несколько альтернатив. Единственное, что я мог заставить работать, - это создать файл в
/usr/share/gdm/env.d/
и в этом файле поместить переменные для экспорта. Однако это означает, что переменные будут экспортированы для всех пользователей, поэтому я закончил так:Допустим, у нас есть два пользователя, Джон и Салли . Для каждого из них создайте файл в
/usr/share/gdm/env.d/
, давайте назовем ихstartup_john.env
иstartup_sally.env
. В этих файлах поместите переменные среды, которые будут экспортированы, когда они начнут новый сеанс GNOME.На данный момент проблема заключается в том, что оба файла будут загружены для обоих пользователей. Чтобы решить эту проблему, мы устанавливаем разрешение для каждого файла таким образом, чтобы только его владелец мог читать его содержимое.
Я согласен, что это не самое элегантное решение, но, насколько я уже проверил, похоже, что дело сделано.
источник
startup.sh
он работает в своей собственной оболочке и не экспортирует переменные среды в родительский контекст выполнения. В качестве примера, попробуйте запустить этот код в вашей оболочке:echo "a is $a"; (export a="B"); echo "a is $a"
. Согласно @Tudor, результат второго эха будет такимa is B
, который - вы увидите, когда вы запустите код - не то, что происходит.