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

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

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

export SDL_AUDIODRIVER=alsa

才能使声音正常工作。如何设置我的 GNOME 会话,以便此变量适用于所有应用程序(因此,如果我通过 Nautilus 运行应用程序,或者使用数据库管理系统,应用程序是否正常运行?

编辑:

我已经设置了配置文件(并且每次设置后都重置了我的计算机),但无济于事:

  • .xsession
  • .xsessionrc
  • .gnomerc
  • .bash_profile
  • .profile<-- 这在一般情况下有效,但当你的发行版在其他地方设置变量时则无效。
  • /etc/profile

答案1

可能是 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 查看它具有什么值以及它是否/在哪里发生变化。

答案2

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

  • ~/.pam_environment- […] 它不是脚本文件,而是由每行一个赋值表达式组成。[…] 需要重新登录才能初始化变量。[…]
  • ~/.profile- 这可能是放置环境变量分配的最佳文件,因为它会在启动过程桌面会话期间由 DisplayManager 自动执行,也会在从文本控制台登录时由登录 shell 自动执行。
  • ~/.bash_profile或者~/.bash_login- 如果其中一个文件存在,则 bash 在作为登录 shell 启动时会执行该文件而不是“~/.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

答案3

在 $HOME 中创建一个.gnomerc文件,该文件是 shell 脚本 (喜欢.bashrc) 设置您想要的所有变量。

答案4

有些答案不适用于 Gnome。其他一些答案现在可能不起作用。

用户服务环境定义

您可以(为自己)创建一个类似的文件~/.config/environment.d/*.conf并在其中定义变量。

示例(适用于所有用户)

% more /etc/environment
#
# This file is parsed by pam_env module
#
# Syntax: simple "KEY=VAL" pairs on separate lines
#

EDITOR=/usr/bin/nano

来自 man pam_env

PAM_ENV(8)                     Linux-PAM Manual                     PAM_ENV(8)

NAME
       pam_env - PAM module to set/unset environment variables

这将在登录时设置环境,更新需要注销登录。

它可以与 Gnome 配合使用,但显然更普遍地与 systemd 相关。

来自维基百科:

systemd 是一个软件套件,为 Linux 操作系统提供一系列系统组件。其主要目的是统一 Linux 发行版之间的服务配置和行为。其主要组件是“系统和服务管理器”——用于引导用户空间和管理用户进程的 init 系统。

相关内容