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

19055
Bernard

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

export SDL_AUDIODRIVER=alsa 

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

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

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

  • .xsession
  • .xsessionrc
  • .gnomerc
  • .bash_profile
  • .profile<- Это работает в общем случае, но не тогда, когда ваш дистрибутив устанавливает переменную в другом месте.
  • /etc/profile
12
Вы уверены, что это должна быть переменная окружения? Кажется, это может быть какой-то другой вид обстановки. Вы копались в апплете системных настроек звука? codeLes 14 лет назад 0
Это действительно так. Вот как SDL выясняет, какой бэкэнд использовать. Я бы хотел, чтобы он просто использовал файл конфигурации, но SDL достаточно последовательно использует переменные окружения для определения поведения. Bernard 14 лет назад 0
Вы видели это: http://modarchive.org/forums/index.php?topic=1879.0 codeLes 14 лет назад 0
Ну да, это выбор между перекомпиляцией SDL или установкой переменной среды. Я думаю, что делаю правильный выбор. : p Это работает (т. е. в оболочке, это работает), это просто сложная проблема получения GNOME для распространения переменной для приложений, не запущенных из оболочки, которая является проблемой. Спасибо за вашу постоянную помощь. Bernard 14 лет назад 1
В каком дистрибутиве это ?! (Я согласен, что за конфигурацией для gdm действительно трудно следовать, поэтому моя первая мысль: «просто посмотрите в / etc / gdm / и прочитайте сценарии» - это большая боль.) Здесь .profile, кажется, работает просто отлично. (Debian / тестирование) Anders Eurenius 14 лет назад 0
Кроме того, вы уверены, что его там нет (и SDL игнорирует его)? Вы можете повторить это в xterm? (установить, затем повторить эхо?) Anders Eurenius 14 лет назад 0
Это действительно не там. Запустите emacs в xterm, это означает "alsa" для Mx getenv. Запустите GTK + версию Emacs, она повторяет «пульс». Я предполагаю, что ребята из SUSE (OpenSUSE 11.1) устанавливают его где-то еще. Bernard 14 лет назад 0

4 ответа на вопрос

6
hlovdal

Возможно, переменная 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, чтобы увидеть, какое значение оно имеет и если / где оно меняется.

Ммм, это тоже мои нынешние мысли. Он установлен на «импульс», и это должно быть установлено _somewhere_ OpenSUSE. Я сделаю детективную работу, когда вернусь домой. Bernard 14 лет назад 0
5
Denilson Sá Maia

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
Mike McQuaid

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

Это не работает для меня, к сожалению. Bernard 14 лет назад 0
Вы пытались открыть gnome-терминал и подтвердили, что он не отображается в env? Mike McQuaid 14 лет назад 0
@Mike: он есть в моем .bashrc, так что он появится, но будет неточным. Emacs и `Mx getenv` подтверждают, что он не переопределяется для приложений с графическим интерфейсом. Bernard 14 лет назад 1
0
codeLes

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

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

Увы, никакого эффекта. Bernard 14 лет назад 0

Похожие вопросы