Wie stelle ich eine Umgebungsvariable für eine GNOME-Sitzung ein?

19509
Bernard

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

export SDL_AUDIODRIVER=alsa 

um den Ton richtig zum Laufen zu bringen. Wie richte ich meine GNOME-Sitzung so ein, dass diese Variable für alle Anwendungen vorhanden ist (wenn also eine Anwendung über Nautilus ausgeführt wird oder DBGL verwendet wird, funktionieren die Apps ordnungsgemäß)?

BEARBEITEN:

Konfigurationsdateien, die ich eingestellt habe (und meinen Rechner nach jedem zurücksetzen), vergeblich:

  • .xsession
  • .xsessionrc
  • .gnomerc
  • .bash_profile
  • .profile<- Dies funktioniert im Allgemeinen, aber nicht, wenn Ihre Distribution die Variable an anderer Stelle setzt.
  • /etc/profile
12
Sind Sie sicher, dass dies eine Umgebungsvariable sein muss? Es scheint, als könnte es eine andere Art von Einstellung sein. Haben Sie im Applet "System-Soundeinstellungen" nachgesehen? codeLes vor 14 Jahren 0
Das tut es tatsächlich. So ermittelt SDL, welches Backend verwendet werden soll. Ich wünschte, es würde nur eine Konfigurationsdatei verwendet, aber SDL verwendet Umgebungsvariablen, um Verhalten zu bestimmen. Bernard vor 14 Jahren 0
Haben Sie Folgendes gesehen: http://modarchive.org/forums/index.php?topic=1879.0 codeLes vor 14 Jahren 0
Nun ja, es ist eine Wahl, SDL neu zu kompilieren oder eine Umgebungsvariable zu setzen. Ich glaube, ich habe die richtige Wahl getroffen. : p Dies funktioniert (dh, in einer Shell funktioniert es), es ist nur das heikle Problem, GNOME dazu zu bringen, die Variable für Apps zu verbreiten, die nicht von einer Shell gestartet werden, die das Problem ist. Vielen Dank für Ihre ständige Hilfe. Bernard vor 14 Jahren 1
In welcher Distribution steckt das? (Ich bin damit einverstanden, dass die Konfiguration für gdm wirklich schwer zu folgen ist, daher ist mein erster Gedanke, "in / etc / gdm / schauen und die Skripte lesen" eine Menge Schmerzen.) Hier scheint .profile gut zu funktionieren. (debian / testing) Anders Eurenius vor 14 Jahren 0
Bist du dir auch sicher, dass es nicht wirklich da ist (und SDL ignoriert es)? Kannst du es in einem Xterm wiederholen? (einstellen, dann wieder Echo?) Anders Eurenius vor 14 Jahren 0
Es ist wirklich nicht da. Führen Sie emacs in einem xterm aus, es gibt "alsa" für Mx getenv wieder. Starten Sie die GTK + -Version von emacs. Ich vermute, die SUSE-Jungs (OpenSUSE 11.1) setzen es woanders hin. Bernard vor 14 Jahren 0

4 Antworten auf die Frage

6
hlovdal

Möglicherweise wird die Variable SDL_AUDIODRIVER irgendwo nicht gesetzt. Eine Strategie, die ich bei Problemen mit Startskripten verwende, ist das Einfügen von Debug-Echo-Anweisungen, die durch das Erstellen / Löschen einer Datei einfach 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'" 

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

Mmm, das sind auch meine aktuellen Gedanken. Es ist auf 'pulse' eingestellt, und das muss von OpenSUSE _somewhere_ gesetzt werden. Ich mache Detektivarbeit, wenn ich nach Hause komme. Bernard vor 14 Jahren 0
5
Denilson Sá Maia

https://help.ubuntu.com/community/EnvironmentVariables beschreibt vier Orte, an denen wir die Umgebungsvariablen festlegen 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 Umgebungsvariablenzuordnungen, da diese während der Desktopsitzung des Startvorgangs automatisch von DisplayManager sowie von der Anmelde-Shell ausgeführt wird, wenn sich ein Benutzer über die Textkonsole anmeldet.
  • ~/.bash_profileoder ~/.bash_login- Wenn eine dieser Dateien vorhanden ist, führt bash sie statt "~ / .profile" aus, wenn sie als Login-Shell gestartet wird. (Bash wird "~ / .bash_profile" gegenüber "~ / .bash_login" bevorzugen). Diese Dateien haben jedoch standardmäßig keinen Einfluss auf eine grafische Sitzung.
  • ~/.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 beinahe, 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 das Beste, da Werte unnötig oft eingestellt werden müssen.

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

KDE führt jedes Skript aus, in dem der $HOME/.kde/envDateiname endet .sh, und behält alle von ihnen festgelegten Umgebungsvariablen bei. Es ist wichtig, dass alle Variablen, die Sie festlegen möchten, auch exportiert werden müssen.

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

1
Mike McQuaid

Erstellen Sie .gnomercin Ihrem $ HOME eine Datei, bei der es sich um ein Shellskript ( like.bashrc ) handelt, das alle gewünschten Variablen einstellt.

Das funktioniert leider nicht für mich. Bernard vor 14 Jahren 0
Haben Sie versucht, gnome-terminal zu öffnen und zu bestätigen, dass es nicht in env angezeigt wird? Mike McQuaid vor 14 Jahren 0
@ Mike: Es ist in meinem .bashrc, also würde es auftauchen, aber es wäre ungenau. Emacs und `Mx getenv` bestätigen, dass es für GUI-Apps nicht überschrieben wird. Bernard vor 14 Jahren 1
0
codeLes

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

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

Leider keine Wirkung. Bernard vor 14 Jahren 0