Como defino uma variável de ambiente para uma sessão do GNOME?

14

No meu sistema, para aplicativos que usam SDL, preciso definir uma variável ambiental:

export SDL_AUDIODRIVER=alsa

para que o som funcione corretamente. Como configuro minha sessão do GNOME para que esta variável esteja presente para todos os aplicativos (por isso, se eu executar um aplicativo pelo Nautilus ou usar DBGL , os aplicativos funcionam corretamente)?

EDITAR:

Arquivos de configuração que defini (e redefini minha máquina após cada uma) sem sucesso:

  • .xsession
  • .xsessionrc
  • .gnomerc
  • .bash_profile
  • .profile<- Isso funciona no caso geral, mas não quando sua distribuição está configurando a variável em outro lugar.
  • /etc/profile
Bernard
fonte
Tem certeza de que isso precisa ser uma variável de ambiente? Parece que pode ser algum outro tipo de configuração. Você pesquisou no applet de configurações de som do sistema?
codeLes
De fato. É assim que o SDL descobre qual back-end usar. Eu gostaria que ele usasse apenas um arquivo de configuração, mas o SDL é bastante consistente no uso de variáveis ​​ambientais para determinar o comportamento.
Bernard
você já viu isso: modarchive.org/forums/index.php?topic=1879.0
codeLes
1
Bem, sim, é uma escolha entre recompilar o SDL ou definir uma variável ambiental. Eu acho que estou fazendo a escolha certa. : p Isso funciona (ou seja, em um shell, funciona) é apenas a questão espinhosa de fazer o GNOME propagar a variável para aplicativos não iniciados a partir de um shell que é o problema. Obrigado por sua ajuda contínua.
Bernard
Em que distro é essa ?! (Eu concordo que a configuração do gdm é realmente difícil de seguir, então meu primeiro pensamento "basta olhar em / etc / gdm / e ler os scripts" é bastante trabalhoso.) Aqui, o .profile parece funcionar muito bem. (debian / testing)
Anders Eurenius em 7/08/2009

Respostas:

6

Pode ser que a variável SDL_AUDIODRIVER esteja sendo desconfigurada em algum lugar. Uma estratégia que eu uso para problemas relacionados a scripts de inicialização é colocar instruções de eco de depuração simples de ativar / desativar, criando / excluindo um arquivo. Você pode começar adicionando

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

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

para .bashrc, .bash_profile, .profile e / etc / profile para ver qual valor tem e se / onde está sendo alterado.

hlovdal
fonte
Mmm, esses são meus pensamentos atuais também. Está definido como 'pulse', e isso deve estar sendo definido em algum lugar pelo OpenSUSE. Farei algum trabalho de detetive quando chegar em casa.
Bernard
5

https://help.ubuntu.com/community/EnvironmentVariables fala sobre quatro lugares onde podemos definir as variáveis ​​de ambiente:

  • ~/.pam_environment- […] Não é um arquivo de script, mas consiste em expressões de atribuição, uma por linha. […] Requer um novo login para inicializar as variáveis. [...]
  • ~/.profile - Este é provavelmente o melhor arquivo para colocar atribuições de variáveis ​​de ambiente, pois é executado automaticamente pelo DisplayManager durante a sessão da área de trabalho do processo de inicialização, bem como pelo shell de login quando um faz logon no console de texto.
  • ~/.bash_profileou ~/.bash_login- Se um desses arquivos existir, o bash o executará em vez de "~ / .profile" quando for iniciado como um shell de logon. (O Bash prefere "~ / .bash_profile" a "~ / .bash_login"). No entanto, esses arquivos não influenciam uma sessão gráfica por padrão.
  • ~/.bashrc- Devido à maneira como o Ubuntu atualmente configura os vários arquivos de script por padrão, este pode ser o local mais fácil para definir variáveis. A configuração padrão quase garante que esse arquivo seja executado em todas as chamadas do bash e durante o logon para o ambiente gráfico. No entanto, em termos de desempenho, isso pode não ser a melhor coisa a fazer, pois fará com que os valores sejam definidos desnecessariamente várias vezes.

http://userbase.kde.org/Session_Environment_Variables/ sugere este local para o KDE:

O KDE executará qualquer script encontrado em $HOME/.kde/envcujo nome de arquivo termina .she manterá todas as variáveis ​​de ambiente definidas por eles. É importante que qualquer variável que você deseja definir também seja exportada.

https://help.ubuntu.com/community/ComposeKey#XIM sugere modificar ~/.gnomercou ~/.Xsession.

Denilson Sá Maia
fonte
1

Crie um .gnomercarquivo no seu $ HOME que seja um script de shell ( como.bashrc ) que defina todas as variáveis ​​que você deseja.

Mike McQuaid
fonte
Infelizmente, isso não está funcionando para mim.
Bernard
Você já tentou abrir o gnome-terminal e confirmou que ele não aparece no env?
6609 Mike McQuaid
1
@ Mike: está no meu .bashrc para que apareça, mas seria impreciso. Emacs e M-x getenvconfirma que não está sendo substituído por aplicativos da GUI.
226 Bernard Bernard
0

Você já tentou criar a variável de ambiente int .profile ou / etc / profile ?

Isso deve funcionar e já deve existir. Ao contrário do .bashrc, que é por sessão de terminal, eles são iniciados no login da sua sessão.

codeLes
fonte
Infelizmente, nenhum efeito.
Bernard