Wie lege ich eine Umgebungsvariable für eine GNOME-Sitzung fest?

14

Auf meinem System muss für Apps, die SDL verwenden, eine Umgebungsvariable festgelegt werden:

export SDL_AUDIODRIVER=alsa

damit der Ton richtig funktioniert. Wie richte ich meine GNOME-Sitzung so ein, dass diese Variable für alle Anwendungen vorhanden ist (wenn ich also eine Anwendung über Nautilus ausführe oder DBGL verwende , funktionieren die Apps ordnungsgemäß)?

BEARBEITEN:

Konfigurationsdateien, die ich eingerichtet habe (und nach jedem Neustart meines Computers), haben keinen Erfolg:

  • .xsession
  • .xsessionrc
  • .gnomerc
  • .bash_profile
  • .profile<- Dies funktioniert im Allgemeinen, aber nicht, wenn Ihre Distribution die Variable an einer anderen Stelle setzt.
  • /etc/profile
Bernard
quelle
Sind Sie sicher, dass dies eine Umgebungsvariable sein muss? Es scheint, als wäre es eine andere Art von Einstellung. Haben Sie sich im Applet für System-Soundeinstellungen umgesehen?
CodeLes
Das tut es in der Tat. So ermittelt SDL, welches Backend verwendet werden soll. Ich wünschte, es würde nur eine Konfigurationsdatei verwendet, aber SDL verwendet Umgebungsvariablen ziemlich konsequent, um das Verhalten zu diktieren.
Bernard
hast du das gesehen: modarchive.org/forums/index.php?topic=1879.0
codeLes
1
Ja, es besteht die Wahl zwischen der Neukompilierung von SDL oder dem Festlegen einer Umgebungsvariablen. Ich denke, ich treffe die richtige Wahl. : p Dies funktioniert (dh in einer Shell funktioniert es), es ist nur das heikle Problem, GNOME zu veranlassen, die Variable für Apps zu verbreiten, die nicht von einer Shell gestartet wurden, die das Problem ist. Vielen Dank für Ihre weitere Hilfe.
Bernard
In welcher Distribution ist das ?! (Ich bin damit einverstanden, dass die Konfiguration für gdm sehr schwer zu befolgen ist. Mein erster Gedanke "Schau einfach in / etc / gdm / und lies die Skripte" ist sehr schmerzhaft.) Hier scheint .profile ganz gut zu funktionieren. (debian / testing)
Anders Eurenius

Antworten:

6

Es kann sein, dass die Variable SDL_AUDIODRIVER irgendwo nicht gesetzt ist. Eine Strategie, die ich bei Problemen mit Startskripten verwende, ist das Einfügen von Debug-Echo-Anweisungen, die einfach durch Erstellen / Löschen einer Datei aktiviert / deaktiviert werden können. Sie könnten mit dem Hinzufügen beginnen

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

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

Gehen Sie zu .bashrc, .bash_profile, .profile und / etc / profile, um zu sehen, welchen Wert es hat und ob / wo es sich ändert.

hlovdal
quelle
Mmm, das sind auch meine aktuellen Gedanken. Es ist auf 'pulse' eingestellt und das muss irgendwo von OpenSUSE eingestellt werden. Ich mache Detektivarbeit, wenn ich nach Hause komme.
Bernard
5

https://help.ubuntu.com/community/EnvironmentVariables beschreibt vier Stellen, an denen Umgebungsvariablen festgelegt werden können:

  • ~/.pam_environment- […] Es ist keine Skriptdatei, sondern besteht aus Zuweisungsausdrücken, einer pro Zeile. […] Erfordert eine erneute Anmeldung, um die Variablen zu initialisieren. […]
  • ~/.profile - Dies ist wahrscheinlich die beste Datei zum Platzieren von Umgebungsvariablenzuweisungen, da sie vom DisplayManager während der Desktop-Sitzung des Startvorgangs sowie von der Anmeldeshell beim Anmelden über die Textkonsole automatisch ausgeführt wird.
  • ~/.bash_profileoder ~/.bash_login- Wenn eine dieser Dateien existiert, führt bash sie aus und nicht "~ / .profile", wenn sie als Login-Shell gestartet wird. (Bash bevorzugt "~ / .bash_profile" gegenüber "~ / .bash_login"). Diese Dateien haben jedoch standardmäßig keinen Einfluss auf eine Grafiksitzung.
  • ~/.bashrc- Aufgrund der Art und Weise, wie Ubuntu derzeit die verschiedenen Skriptdateien standardmäßig einrichtet, ist dies möglicherweise der einfachste Ort, um Variablen festzulegen. Die Standardkonfiguration garantiert nahezu, dass diese Datei bei jedem Aufruf von bash sowie während der Protokollierung ausgeführt wird in die grafische Umgebung. In Bezug auf die Leistung ist dies jedoch möglicherweise nicht die beste Vorgehensweise, da hierdurch unnötig oft Werte festgelegt werden.

http://userbase.kde.org/Session_Environment_Variables/en schlägt diesen Ort für KDE vor:

KDE führt alle Skripte aus, in $HOME/.kde/envdenen der Dateiname endet .sh, und verwaltet alle von ihnen festgelegten Umgebungsvariablen. Es ist wichtig, dass alle Variablen, die Sie festlegen möchten, ebenfalls exportiert werden.

https://help.ubuntu.com/community/ComposeKey#XIM schlägt vor, ~/.gnomercoder zu ändern ~/.Xsession.

Denilson Sá Maia
quelle
1

Erstellen Sie .gnomercin Ihrem $ HOME eine Datei, die ein Shell-Skript ( wie.bashrc ) ist, das alle gewünschten Variablen festlegt.

Mike McQuaid
quelle
Das funktioniert bei mir leider nicht.
Bernard
Haben Sie versucht, gnome-terminal zu öffnen und bestätigt, dass es in env nicht angezeigt wird?
Mike McQuaid
1
@ Mike: Es ist in meiner .bashrc, so dass es angezeigt wird, aber es wäre ungenau. Emacs und M-x getenvbestätigt, dass es für GUI-Apps nicht überschrieben wird.
Bernard
0

Haben Sie versucht, die Umgebungsvariable int .profile oder / etc / profile zu erstellen ?

Das sollte funktionieren und sollte schon existieren. Im Gegensatz zu .bashrc pro Terminalsitzung werden diese beim Anmelden an Ihrer Sitzung initiiert.

codeLes
quelle
Leider keine Wirkung.
Bernard