2

Я могу

export VAR="value"

и используйте $ VAR из терминала, пока я не закрою его.

Есть ли способ получить это поведение в оконном менеджере / графической среде? экспортировать переменную среды, которая будет использоваться всеми приложениями внутри нее, до ее закрытия?

ПРИМЕЧАНИЕ: я не спрашиваю, как сохранить переменные окружения в сеансах, я знаю о .profile, .bash_rc, .bash_login и других методах. Я просто хочу, чтобы переменная окружения была доступна в графическом окружении без перезапуска

3 ответа3

3

Fluxbox может сделать это изначально: добавьте запись CommandDialog в ваше меню или привяжите к ней ключ. Откроется текстовое поле, и вы сможете вводить команды. Среди них: export FOO=BAR:

Fluxbox 'CommandDialog в действии

Прочитайте http://fluxbox.org/help/man-fluxbox-keys.php и найдите CommandDialog.

2

Без явной поддержки в вашем WM/DE (и я не знаю ни о чем, что делает). Акира указывает в другом ответе, что Fluxbox поддерживает это. Если вы используете Fluxbox, используйте этот ответ вместо) вы можете сделать пару вещей.

Запустите ваши программы из терминала

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

export VAR="whatever"
nameOfGUIProgramExpectingVAR &
differentProgram &

Терминал тогда становится своего рода вечным боксом запуска. Это также имеет то преимущество, что может иметь несколько разных точек запуска, каждая из которых имеет разные среды для запускаемых программ.

Замените свой графический интерфейс запуска вышеописанным способом

Это может не работать для всех настольных сред. Например, если вы работаете в Ubuntu и Unity, вы можете установить переменные окружения и заменить работающий модуль запуска. Я ожидаю, что подобное можно сделать с помощью gnome-panel или KDE, но YMMV.

export PATH=$PATH:/my/custom/path
compiz --replace ccp &
disown %1

Это добавляет новую запись в путь для оболочки в терминале и всех программ, которые он запускает. Затем он запускает compiz (оконный менеджер для единицы) с «--replace», который заставляет старый выходить, а новый занимает его место. Строка disown делает ее не связанной с терминалом, так что терминал может быть закрыт без влияния на оконный менеджер. Теперь программы, запущенные Unity, теперь будут иметь новый PATH.

Обратите внимание: при этом ваши окна могут перемешиваться, но они будут работать. Все программы, которые уже запущены, будут по-прежнему использовать старую среду, но новые получат новую.

Примечание: некоторые программы пытаются быть одиночными (например, {Open, Libre} Office, firefox) и не запускайте новые экземпляры при запуске, если существующий экземпляр уже существует. Эти программы также будут продолжать использовать старую среду до тех пор, пока не будут полностью завершены, а затем запущены заново.

Примечание. Если управляющей программой вашего сеанса X является оконный менеджер, это, скорее всего, приведет к закрытию X (например, если вы запустили X с помощью xinit который compiz` ccp. Обычно это какой-то менеджер сеансов, который является контролирующим объектом. Вы должны поэкспериментировать на неважном сеансе, прежде чем попробовать это на важном сеансе!

Чтобы было ясно, вы хотите заменить только часть вашего DE, которая выполняет запуск, а не весь DE.

1

Насколько я знаю, это невозможно.

Переменные среды для сеанса X читаются так же и из тех же мест, что и переменные среды терминала, поэтому единственный вариант - отредактировать файл ~/.xsessionrc и перезапустить X.

Обычно выход из системы и повторный вход имеют такой эффект, вам не обязательно перезагружать весь компьютер.

Смотрите этот ответ AskUbuntu для более подробной информации.

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