Jak ustawić PATH lub inne zmienne środowiskowe, aby aplikacje X miały do ​​niego dostęp?

16

Jak ustawić zmienne env, aby KDE je rozpoznało?

Jak ustawić ścieżkę w środowisku innym niż shell (KDE)?

W przeciwieństwie do powyższych dwóch pytań, chcę wiedzieć, jak to zrobić dla GNOME. Lub jeszcze lepiej, czy istnieje metoda niezależna od menedżera okien. W przypadku powłoki / terminala zwykle edytuję ~/.bashrc. Gdzie mogę umieścić instrukcje eksportu, aby zmienne środowiskowe były dostępne dla wszystkich aplikacji X, bez względu na używany menedżer okien?

Code-Guru
źródło

Odpowiedzi:

12

Pam_env moduł PAM pozwala ci je ustawić albo w /etc/environmentlub w ~/.pam_environmentzależności od tego, czy chcesz go dla wszystkich użytkowników systemu (Wide), lub tylko użytkownik (session-wide).

Zmienne środowiskowe dla całego systemu

Ustawienia zmiennych środowiskowych, które wpływają na system jako całość (a nie tylko na konkretnego użytkownika), nie powinny być umieszczane w żadnym z wielu skryptów na poziomie systemu, które są wykonywane po załadowaniu systemu lub sesji pulpitu, ale w

/etc/environment- Ten plik jest przeznaczony specjalnie dla systemowych ustawień zmiennych środowiskowych. To nie jest plik skryptu, ale raczej składa się z wyrażeń przypisania, po jednym w wierszu. W szczególności plik ten przechowuje ustawienia regionalne i ustawienia ścieżki w całym systemie.

Zmienne środowiskowe dla całej sesji

Ustawienia zmiennych środowiskowych, które powinny mieć wpływ tylko na konkretnego użytkownika (a nie na system jako całość), należy ustawić na:

~/.pam_environment- Ten plik jest przeznaczony do ustawiania środowiska użytkownika. To nie jest plik skryptu, ale raczej składa się z wyrażeń przypisania, po jednym w wierszu.

Uwaga: Korzystanie .pam_environmentwymaga ponownego logowania w celu zainicjowania zmiennych. Ponowne uruchomienie tylko terminala nie jest wystarczające, aby móc korzystać ze zmiennych.

Zobacz więcej na wiki Ubuntu na temat zmiennych środowiskowych .

bahamat
źródło
2
Problem z ~/.pam_environmentrozwiązaniem polega na tym, że moduł pam_env domyślnie go nie czyta, chyba że dystrybucja skonfiguruje go inaczej. Na Fedorze 20 nie jest na przykład czytany.
Cristian Ciupitu
@CristianCiupitu ma rację. ~/.xsessionzaładuje zmienne środowiskowe dla aplikacji X. Zobacz unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek
@CristianCiupitu: Bardzo dziękuję za komentarz, który doprowadził mnie do pam_env. Zaktualizowałem moje pliki pam Fedory 24, aby włączyć środowisko użytkownika. Teraz wszystkie moje sesje Wayland znów mają niestandardową ŚCIEŻKĘ.
Zan Lynx,
@CristianCiupitu czy to prawda? Dokumentacja linux-pam.org/Linux-PAM-html/sag-pam_env.html sugeruje, że ~ / .pam_environment jest domyślnym plikiem do odczytu, chyba że określono inaczej. Zobacz linię na user_envfile=filename. Mój problem z pam_env polega na tym, że zmienna HOME może nie być dostępna w zależności od aplikacji PAM. Co ogranicza jego użycie do zmiennych bezwzględnych.
CMCDragonkai
2
@CMCDragonkai, strona podręcznika pam_env (8) z Fedory mawiała: Domyślnie ta opcja jest wyłączona, ponieważ zmienne środowiskowe dostarczone przez użytkownika w środowisku PAM mogą wpływać na zachowanie kolejnych modułów na stosie bez zgody administratora systemu” . Tak więc, chociaż moduł PAM w górę ma pewne ustawienia domyślne, niektóre dystrybucje nadpisują je.
Cristian Ciupitu
1

/etc/X11/Xsession.d/... lub wzdłuż tego katalogu, w zależności od twojego Linuxa (?). Tutaj trochę o tym napisałem .

Chodzi o to, że po zalogowaniu menedżer wyświetlania uruchamia „Xsession” i pobiera (!) Wszystko z tego katalogu w kolejności alfabetycznej. Możesz po prostu dodać skrypt, który modyfikuje ŚCIEŻKĘ. Xsession będzie ostatecznie Twoim DE i zwykle wszystkie procesy są potomkami tego Xsession, dlatego dziedziczą środowisko PATH.

Bananguin
źródło
Czy istnieje odpowiednik, który mogę ustawić w moim katalogu $ HOME? Jak .Xsession?
Code-Guru,
Według Xession (5): /etc/X11/Xsession.d/40x11-common_xsessionrc Źródło globalnych zmiennych środowiskowych. Ten skrypt będzie pobierał wszystko z $ HOME / .xsessionrc, jeśli plik jest obecny. Dzięki temu użytkownik może ustawić globalne zmienne środowiskowe dla swojej sesji X, takie jak informacje o ustawieniach regionalnych.
Bananguin,
1

Proces dziedziczy środowisko po procesie nadrzędnym, który go uruchamia. Aby zmienić PATH lub inne wartości środowiska w obiekcie potomnym, możemy ustawić zmienną na wartość w obiekcie nadrzędnym i wyeksportować zmienną, jeśli jesteśmy w powłoce, a następnie uruchomić proces potomny. Dziecko może również odczytać jeden lub więcej plików inicjujących, aby zmienić swoje środowisko podczas uruchamiania.

Tak więc są jeszcze dwa pytania, aby uzyskać odpowiedź:

Co to jest drzewo dziedziczenia nadrzędny / podrzędny, które prowadzi do procesu, na który PATH lub zmiana środowiska ma mieć wpływ?

Jakie pliki inicjujące są używane / odczytywane / pozyskiwane przez odpowiednie procesy w tym drzewie?

Oto część wyniku ps (1), aby pokazać, co rozumiem przez drzewo dziedziczenia:

# /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 ...

Zwróć uwagę na sekwencje graficzne \ _ i numery PIP / PPID (identyfikator procesu i macierzysty identyfikator PID). PID 1855 został uruchomiony przez (jakieś dziecko z?) 1497, który został uruchomiony przez 1481, który został uruchomiony przez PID 1, który został uruchomiony przez proces przodka 0.

Wykonaj podobne śledzenie dziedziczenia dla procesu, na który chcesz wpłynąć, dowiedz się, które pliki inicjujące są istotne i dokonaj zmiany na PATH gdzieś w tym drzewie, prawdopodobnie z czymś podobnym do:

PATH=${PATH}:/usr/local/bin
D McKeon
źródło
Czy mogę użyć psdo ustalenia nadrzędnego procesu logowania do GUI?
Code-Guru,