
Ich muss eine Umgebungsvariable festlegen, um das GDK_NATIVE_WINDOWS
Problem zu behebendas Problem mit Eclipse-Schaltflächen in Ubuntu. Um die Umgebungsvariable festzulegen, habe ich die folgende Zeile hinzugefügt ~/.pam_environment
.
GDK_NATIVE_WINDOWS DEFAULT=true
Überraschenderweise wird die Umgebungsvariable nicht gesetzt, wenn ich mich echo $GDK_NATIVE_WINDOWS
in einem Terminal befinde. Alle anderen Umgebungsvariablen, die ich in aufgelistet habe, ~/.pam_environment
werden jedoch richtig gesetzt. Außerdem wird die Umgebungsvariable richtig gesetzt, wenn ich z. B. zu einem TTY wechsle Alt+Ctrl+F1
. Was ist falsch daran, diese Umgebungsvariable in zu setzen ~/.pam_environment
?
Antwort1
Halten Sie sich in der Datei ~/.pam_environment an die einfache Syntax „Schlüssel=Wert“. Kein DEFAULT, OVERRIDE, ${HOME}, nichts. Nur Schlüssel=Wert. Die Manpage, auf die Sie verlinkt haben, ist nur für pam_env.conf. Siehe „man 8 pam_env“, wo nichts anderes versprochen wird: „Dieses Modul kann eine Datei auch mit einfachen KEY=VAL-Paaren in separaten Zeilen analysieren.“.
Übrigens ist die Eingabe von etwas wie PATH=${PATH}:more/paths in ./pam_environment eine gute Möglichkeit, fast jeden Anmeldeversuch abzubrechen, da der PATH auf ${PATH}:more/paths gesetzt wird.buchstäblich(dort ist nicht viel zu finden). Zur Rettung "/bin/mv .pam_environment out_of_the_way" und erneut anmelden.
Antwort2
Wie Sie festgestellt haben, sollten Ihre Umgebungsvariablen ~/.pam_environment
wie empfohlen eingestellt werden unterhttps://help.ubuntu.com/community/EnvironmentVariables. Leichter gesagt als getan ;)
Möglicherweise sind Sie auf dieselbe Konfigurationslücke gestoßen wie ich. Unten finden Sie die Problemumgehung für verschlüsseltes Home.
Mein ~/.pam_environment
:
PATH DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK DEFAULT=${HOME}/Applications/jdk
Warum der hässliche statische Pfad? ${PATH}
würde bei mir nicht funktionieren. Ich habe meinen Login mehrmals blockiert, als ich versucht habe, das Problem zu umgehen, also bleibe ich bei der hässlichen statischen Kopie der Standardeinstellungen :)
Workaround für verschlüsselte Home-Ordner
In Ubuntu-Versionen bis einschließlichUbuntu 12.04(Precise Pangolin) Beta 2, wenn Sie ein verschlüsseltes Home-Verzeichnis verwenden, müssen Sie es ändern, /etc/pam.d/common-session
damit es geladen wird ~/.pam_environment
. Diese Lösung funktioniert anscheinend für frühere Versionen, aber ich habe sie nicht getestet.
Guenther Montag (g-montag) schrieb am 19.08.2010:
Dies scheint ein Problem mit verschlüsselten Home-Verzeichnissen zu sein. Ich habe hinzugefügt
Sitzung erforderlich pam_env.so
am Ende von /etc/pam.d/common-session und jetzt wird ~/.pam_environment gelesen. Auf einem anderen System ohne verschlüsselte Home-Verzeichnisse (auch 10.04) ist der Workaround nicht nötig. Vielleicht versucht das System in meinem Fall, ~/.pam_environment zu lesen, bevor es entschlüsselt wird.
Antwort3
Sie haben ein Leerzeichen zwischen GDK_NATIVE_WINDOWS und DEFAULT=true . Dies unterscheidet sich von dem von Ihnen verlinkten Beispiel.
Versuchen:
GDK_NATIVE_WINDOWS=true
Antwort4
In Debian Bullseye (wahrscheinlich seit etwa 2013) und Ubuntu seit mindestens 14.04 (getestet in einem Docker-Container) wird ~/.pam_environment nicht gelesen, da user_endir für pam_env standardmäßig deaktiviert ist (siehe man 7 pam_env
). Wenn Sie es wieder aktivieren möchten:
echo 'session optional pam_env.so user_readenv=1' >> /etc/pam.d/common-session
Das heißt, für eine interaktive Sitzung (CLI oder grafische Anmeldungen wie su) wird die pam_env mit user_reader auf 1 gesetzt.
Ich glaube, es wurde upstream deaktiviert, weil:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4708„Das Modul pam_env in Linux-PAM (auch bekannt als pam) 1.1.2 und früher liest die Datei .pam_environment im Home-Verzeichnis eines Benutzers, was es lokalen Benutzern ermöglichen könnte, Programme in einer unbeabsichtigten Umgebung auszuführen, indem sie ein Programm ausführen, das auf der PAM-Prüfung pam_env basiert.“
Die obige Beschreibung ist mir allerdings nicht klar. Wenn es bedeutet, dass ~/.pam_environment es dem Benutzer ermöglicht, die Programmumgebung zu ändern, ohne dass dieser davon erfährt, dann sind alle Optionen im Home-Ordner gleich (also ~/.profile, ~/.zprofile). Beachten Sie, dass ~/.profile von grafischen Anmeldemanagern gelesen werden soll ... warum also ~/.pam_environment entfernen und ~/.profile behalten?
Eine geeignete Möglichkeit wäre, die Möglichkeit zu haben, Umgebungsvariablen pro Benutzer in /etc/security/pam_env.conf festzulegen. Dies wurde jedoch noch nicht von Upstream angefordert. Oder eine Option, die nur mit Administratorrechten bearbeitet werden kann.