Как установить переменную среды для сеанса GNOME?

15

В моей системе для приложений, использующих SDL, мне нужно установить переменную среды:

export SDL_AUDIODRIVER=alsa

чтобы звук работал правильно. Как настроить сеанс GNOME так, чтобы эта переменная присутствовала во всех приложениях (поэтому, если я запускаю приложение через Nautilus или использую DBGL , приложения работают правильно)?

РЕДАКТИРОВАТЬ:

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

  • .xsession
  • .xsessionrc
  • .gnomerc
  • .bash_profile
  • .profile<- Это работает в общем случае, но не тогда, когда ваш дистрибутив устанавливает переменную в другом месте.
  • /etc/profile
Бернард
источник
Вы уверены, что это должна быть переменная окружения? Кажется, это может быть какой-то другой вид обстановки. Вы копались в апплете системных настроек звука?
CodeLes
Это действительно так. Вот как SDL выясняет, какой бэкэнд использовать. Я бы хотел, чтобы он просто использовал файл конфигурации, но SDL довольно последовательно использует переменные окружения для определения поведения.
Бернард
Вы видели это: modarchive.org/forums/index.php?topic=1879.0
codeLes
1
Ну да, это выбор между перекомпиляцией SDL или установкой переменной среды. Я думаю, что делаю правильный выбор. : p Это работает (то есть в оболочке, это работает), это просто сложная проблема с получением GNOME для распространения переменной для приложений, не запущенных из оболочки, которая является проблемой. Спасибо за вашу постоянную помощь.
Бернард
В каком дистрибутиве это ?! (Я согласен, что за конфигурацией для gdm действительно трудно следовать, поэтому моя первая мысль: «просто посмотрите в / etc / gdm / и прочитайте сценарии» - это большая боль.) Здесь .profile, кажется, работает просто отлично. (дебиан / тестирование)
Андерс Эурениус

Ответы:

6

Возможно, переменная SDL_AUDIODRIVER где-то не установлена. Одна из стратегий, которую я использую для решения проблем, связанных со сценариями запуска, заключается в том, чтобы добавить отладочные операторы echo, которые просто включить / отключить, создав / удалив файл. Вы можете начать с добавления

debug_msg() {
        test -f $HOME/.debug && echo "$@" 1>&2
}

debug_msg "running ~/.bashrc ($0), SDL_AUDIODRIVER = '$SDL_AUDIODRIVER'"

в .bashrc, .bash_profile, .profile и / etc / profile, чтобы увидеть, какое значение оно имеет и если / где оно меняется.

hlovdal
источник
Ммм, это тоже мои нынешние мысли. Он установлен на «пульс», и это должно быть где-то установлено OpenSUSE. Я сделаю детективную работу, когда вернусь домой.
Бернард
6

https://help.ubuntu.com/community/EnvironmentVariables рассказывает о четырех местах, где мы можем установить переменные среды:

  • ~/.pam_environment- […] Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку. […] Требуется повторный вход в систему для инициализации переменных. [...]
  • ~/.profile - Это, вероятно, лучший файл для размещения назначений переменных среды, поскольку он выполняется автоматически DisplayManager во время сеанса рабочего стола при запуске, а также оболочкой входа в систему при входе из текстовой консоли.
  • ~/.bash_profileили ~/.bash_login- если один из этих файлов существует, bash выполняет его, а не "~ / .profile", когда он запускается как оболочка входа в систему. (Bash предпочтет ~ / .bash_profile "~ / .bash_login"). Однако эти файлы по умолчанию не влияют на графический сеанс.
  • ~/.bashrc- Из-за способа, которым Ubuntu в настоящее время настраивает различные файлы сценариев по умолчанию, это может быть самым простым местом для установки переменных. Конфигурация по умолчанию почти гарантирует, что этот файл будет выполняться при каждом вызове bash, а также при ведении журнала. в графической среде. Однако, с точки зрения производительности, это может быть не лучшим решением, так как это приведет к ненужной установке значений много раз.

http://userbase.kde.org/Session_Environment_Variables/en предлагает это место для KDE:

KDE выполнит любой скрипт, в $HOME/.kde/envкотором заканчивается имя файла .sh, и будет поддерживать все переменные окружения, установленные ими. Важно, чтобы любая переменная, которую вы хотите установить, также была экспортирована.

https://help.ubuntu.com/community/ComposeKey#XIM предлагает изменить ~/.gnomercили ~/.Xsession.

Денилсон Са Майя
источник
1

Создайте .gnomercфайл в вашем $ HOME, который представляет собой сценарий оболочки ( например.bashrc ), который устанавливает все переменные, которые вы хотите.

Майк Маккуэйд
источник
Это не работает для меня, к сожалению.
Бернард
Вы пытались открыть gnome-терминал и подтвердили, что он не отображается в env?
Майк МакКуэйд
1
@Mike: он в моем .bashrc, так что он будет отображаться, но он будет неточным. Emacs и M-x getenvподтверждает, что он не переопределяется для приложений с графическим интерфейсом.
Бернард
0

Вы пытались создать переменную окружения int .profile или / etc / profile ?

Это должно работать и уже должно существовать. В отличие от .bashrc, который относится к сеансу терминала, они инициируются при входе в сеанс.

codeLes
источник
Увы, никакого эффекта.
Бернард