如何为GNOME会话设置环境变量?


15

在我的系统上,对于使用SDL的应用程序,我需要设置一个环境变量:

export SDL_AUDIODRIVER=alsa

使声音正常工作。如何设置GNOME会话,以便所有应用程序都可以使用此变量(因此,如果我通过Nautilus运行应用程序,或者使用DBGL,则这些应用程序可以正常运行)?

编辑:

我设置的配置文件(每次都重置我的机器)无济于事:

  • .xsession
  • .xsessionrc
  • .gnomerc
  • .bash_profile
  • .profile<-在一般情况下有效,但在发行版将变量设置为其他位置时无效。
  • /etc/profile

您确定这是环境变量吗?似乎可能是其他某种设置。您是否已在系统声音设置小程序中浏览?
codeLes

确实如此。这就是SDL找出要使用的后端的方式。我希望它只使用一个配置文件,但是SDL在使用环境变量来指示行为方面相当一致。
伯纳德


1
是的,可以在重新编译SDL或设置环境变量之间进行选择。我认为我正在做出正确的选择。:p这有效(即,在外壳中有效),这只是使GNOME为不是从外壳启动的应用程序传播变量的棘手问题。感谢您一直以来的帮助。
伯纳德

这是什么发行版?(我同意gdm的配置确实很难遵循,所以我的第一个想法就是“只看/ etc / gdm /并阅读脚本”。)在这里,.profile似乎工作得很好。(debian / testing)
Anders Eurenius,2009年

Answers:


6

可能是SDL_AUDIODRIVER变量未在某处设置。对于与启动脚本有关的问题,我使用的一种策略是放入调试回显语句,该语句很容易通过创建/删除文件来启用/禁用。您可以先添加

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

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

到.bashrc,.bash_profile,.profile和/ etc / profile,以查看其具有的值以及是否/在何处更改。


嗯,这也是我目前的想法。它设置为“脉搏”,而且必须是一套地方用的OpenSUSE。到家时,我会做一些侦探工作。
伯纳德

6

https://help.ubuntu.com/community/EnvironmentVariables讨论了四个可以设置环境变量的地方:

  • ~/.pam_environment-[…]它不是脚本文件,而是由赋值表达式组成,每行一个。[…]需要重新登录才能初始化变量。[…]
  • ~/.profile -这可能是放置环境变量分配的最佳文件,因为在启动过程桌面会话期间,DisplayManager会自动执行该文件,而从文本控制台登录时,它会由登录外壳程序自动执行。
  • ~/.bash_profile~/.bash_login-如果存在这些文件之一,则bash在作为登录shell启动时将执行该文件,而不是“〜/ .profile”。(与“〜/ .bash_login”相比,Bash更喜欢“〜/ .bash_profile”)。但是,这些文件默认情况下不会影响图形会话。
  • ~/.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中创建一个文件,该文件是一个shell脚本(.bashrc),用于设置所需的所有变量。


不幸的是,这对我不起作用。
伯纳德

您是否尝试打开gnome-terminal并确认它没有出现在env中?
Mike McQuaid

1
@Mike:它在我的.bashrc中,因此它会显示出来,但它不准确。Emacs并M-x getenv确认它没有被GUI应用程序覆盖。
伯纳德

0

您是否尝试过创建环境变量int .profile/ etc / profile

那应该起作用并且应该已经存在。与每个终端会话的.bashrc不同,它们是在登录到您的会话时启动的。


las,没有效果。
伯纳德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.