Wie stelle ich PATH oder andere Umgebungsvariablen ein, damit X-Apps darauf zugreifen können?

16

Wie kann ich env-Variablen so einstellen, dass KDE sie erkennt?

Wie legen Sie den Pfad in einer Nicht-Shell-Umgebung (KDE) fest?

Im Gegensatz zu den beiden oben genannten Fragen möchte ich wissen, wie dies für GNOME durchgeführt wird. Oder noch besser, gibt es eine Methode, die unabhängig vom Fenstermanager ist. Für die Shell / das Terminal bearbeite ich normalerweise ~/.bashrc. Wo kann ich export-Anweisungen platzieren, damit Umgebungsvariablen für alle X-Anwendungen verfügbar sind, unabhängig vom verwendeten Fenstermanager?

Code-Guru
quelle

Antworten:

12

Mit dem PAM-Modul pam_env können Sie sie entweder in /etc/environmentoder in festlegen ~/.pam_environment, je nachdem, ob Sie sie für alle Benutzer (systemweit) oder nur für Ihren Benutzer (sitzungsweit) möchten.

Systemweite Umgebungsvariablen

Einstellungen für Umgebungsvariablen, die sich auf das gesamte System (und nicht nur auf einen bestimmten Benutzer) auswirken, sollten nicht in einem der vielen Skripts auf Systemebene abgelegt werden, die ausgeführt werden, wenn das System oder die Desktopsitzung geladen werden, sondern in

/etc/environment- Diese Datei ist speziell für systemweite Einstellungen von Umgebungsvariablen gedacht. Es ist keine Skriptdatei, sondern besteht aus Zuweisungsausdrücken, einer pro Zeile. Insbesondere werden in dieser Datei die systemweiten Einstellungen für das Gebietsschema und den Pfad gespeichert.

Sitzungsweite Umgebungsvariablen

Einstellungen für Umgebungsvariablen, die nur einen bestimmten Benutzer (und nicht das gesamte System) betreffen sollen, sollten wie folgt festgelegt werden:

~/.pam_environment- Diese Datei ist speziell zum Festlegen der Benutzerumgebung vorgesehen. Es ist keine Skriptdatei, sondern besteht aus Zuweisungsausdrücken, einer pro Zeile.

Hinweis: Für die Verwendung ist .pam_environmenteine erneute Anmeldung erforderlich, um die Variablen zu initialisieren. Ein Neustart nur des Terminals reicht nicht aus, um die Variablen verwenden zu können.

Weitere Informationen finden Sie im Ubuntu-Wiki zu Umgebungsvariablen .

Bahamat
quelle
2
Das Problem bei der ~/.pam_environmentLösung ist, dass das Modul pam_env es standardmäßig nicht liest, es sei denn, die Distribution konfiguriert es anders. Auf Fedora 20 wird es beispielsweise nicht gelesen.
Cristian Ciupitu
@CristianCiupitu ist richtig. ~/.xsessionLädt Umgebungsvariablen für X-Anwendungen. Siehe unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek
@CristianCiupitu: Vielen Dank für deinen Kommentar, der mich zu pam_env geführt hat. Ich habe meine Fedora 24-Pam-Dateien aktualisiert, um die Benutzerumgebung zu aktivieren. Jetzt haben alle meine Wayland-Sessions wieder einen benutzerdefinierten PATH.
Zan Lynx
@CristianCiupitu ist das wahr? Die Dokumentation linux-pam.org/Linux-PAM-html/sag-pam_env.html impliziert, dass ~ / .pam_environment die zu lesende Standarddatei ist, sofern nicht anders angegeben. Siehe die Linie auf user_envfile=filename. Mein Problem mit pam_env ist, dass die Variable HOME je nach PAM-Anwendung möglicherweise nicht verfügbar ist. Dies beschränkt die Verwendung auf absolute Variablen.
CMCDragonkai
2
@CMCDragonkai, die pam_env (8) man - Seite von Fedora zu sagen pflegt: Standardmäßig diese Option deaktiviert ist als Benutzer bereitgestellte Umgebungsvariablen in der PAM - Umgebung Verhalten der nachfolgenden Module in dem Stapel ohne die Zustimmung des Systemverwalters beeinträchtigen könnte“ . Während das Upstream-PAM-Modul über einige Standardeinstellungen verfügt, werden diese von einigen Distributionen überschrieben.
Cristian Ciupitu
1

/etc/X11/Xsession.d/... oder nach dem Vorbild dieses Verzeichnisses, abhängig von Ihrem Linux (?). Ich habe hier ein wenig darüber geschrieben .

Das Konzept ist, dass ein Display Manager nach dem Login eine "Xsession" startet und (!) Alles in diesem Verzeichnis in alphabetischer Reihenfolge erzeugt. Sie können einfach ein Skript hinzufügen, das PATH ändert. Die Xsession ist in der Regel Ihre DE und alle Prozesse sind untergeordnete Elemente dieser Xsession, sodass die PATH-Umgebung übernommen wird.

Bananguin
quelle
Gibt es eine Entsprechung, die ich in meinem $ HOME-Verzeichnis festlegen kann? Wie .Xsession?
Code-Guru
Laut Xession (5): /etc/X11/Xsession.d/40x11-common_xsessionrc Globale Umgebungsvariablen als Quelle. Dieses Skript gibt alles in $ HOME / .xsessionrc aus, wenn die Datei vorhanden ist. Auf diese Weise kann der Benutzer globale Umgebungsvariablen für seine X-Sitzung festlegen, z. B. Gebietsschemainformationen.
Bananguin
1

Ein Prozess erbt eine Umgebung von dem übergeordneten Prozess, der ihn startet. Um den PATH-Wert oder andere Umgebungswerte in einem untergeordneten Element zu ändern, können wir eine Variable auf einen Wert im übergeordneten Element festlegen und die Variable exportieren, wenn wir uns in einer Shell befinden, und dann den untergeordneten Prozess starten. Das Kind kann auch eine oder mehrere Initialisierungsdateien lesen, um beim Start seine eigene Umgebung zu ändern.

Es gibt also noch zwei weitere Fragen, um eine Antwort zu erhalten:

Was ist der übergeordnete / untergeordnete Vererbungsbaum, der zu dem Prozess führt, der von der PATH- oder Umgebungsänderung betroffen sein soll?

Welche Initialisierungsdateien werden von den relevanten Prozessen in diesem Baum verwendet / gelesen / bezogen?

Hier ist ein Teil der Ausgabe von ps (1), um zu zeigen, was ich mit einem Vererbungsbaum meine:

# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf 

UID   PID  PPID USER COMMAND
  0     1     0 root /usr/lib/systemd/systemd
  0  1481     1 root /usr/sbin/gdm-binary -nodaemon
  0  1497  1481 root  \_ /usr/libexec/gdm-simple-slave ...
  0  1504  1497 root      \_ /usr/bin/Xorg :0 ...
  0  1855  1497 root      \_ gdm-session-worker ...

Notieren Sie die Grafiksequenzen und die PIP / PPID-Nummern (Prozess-ID und übergeordnete PID). Die PID 1855 wurde von (einem Kind von?) 1497 gestartet, die von 1481 gestartet wurde, die von der PID 1 gestartet wurde, die vom Vorfahrenprozess 0 gestartet wurde.

Führen Sie eine ähnliche Vererbungsablaufverfolgung für den Prozess durch, den Sie beeinflussen möchten, finden Sie heraus, welche Initialisierungsdateien relevant sind, und nehmen Sie die Änderung in PATH irgendwo in dieser Struktur vor, wahrscheinlich mit etwas Ähnlichem wie:

PATH=${PATH}:/usr/local/bin
D McKeon
quelle
Kann ich psden übergeordneten Prozess einer GUI-Anmeldung bestimmen?
Code-Guru