Làm cách nào để đặt PATH hoặc các biến môi trường khác để ứng dụng X có thể truy cập?


16

Làm cách nào tôi có thể đặt biến env để KDE nhận ra chúng?

Làm thế nào để bạn thiết lập đường dẫn trong môi trường không có vỏ (KDE)?

Không giống như hai câu hỏi trên, tôi muốn biết làm thế nào để làm điều này cho Gnome. Hoặc tốt hơn, có một phương pháp độc lập với trình quản lý cửa sổ. Đối với shell / terminal, tôi thường chỉnh sửa ~/.bashrc. Tôi có thể đặt báo cáo xuất ở đâu để các biến môi trường có sẵn cho tất cả các ứng dụng X, bất kể trình quản lý cửa sổ được sử dụng ở đâu?

Câu trả lời:


12

Các pam_env mô-đun PAM cho phép của bạn để họ ra đi hoặc trong /etc/environmenthoặc ở ~/.pam_environment, tùy thuộc vào việc bạn muốn nó cho tất cả người dùng (hệ thống rộng), hoặc chỉ sử dụng của bạn (phiên rộng).

Biến môi trường toàn hệ thống

Không nên đặt các cài đặt biến môi trường ảnh hưởng đến toàn bộ hệ thống (chứ không phải chỉ là một người dùng cụ thể) trong bất kỳ tập lệnh cấp hệ thống nào được thực thi khi hệ thống hoặc phiên máy tính để bàn được tải, nhưng vào

/etc/environment- Tập tin này đặc biệt dành cho các cài đặt biến môi trường toàn hệ thống. Nó không phải là một tập lệnh, mà là bao gồm các biểu thức gán, mỗi biểu thức. Cụ thể, tệp này lưu trữ cài đặt đường dẫn và miền địa phương trên toàn hệ thống.

Biến môi trường toàn phiên

Các cài đặt biến môi trường chỉ ảnh hưởng đến một người dùng cụ thể (chứ không phải toàn bộ hệ thống) nên được đặt thành:

~/.pam_environment- Tập tin này đặc biệt có nghĩa là để thiết lập môi trường của người dùng. Nó không phải là một tập lệnh, mà là bao gồm các biểu thức gán, mỗi biểu thức.

Lưu ý: Sử dụng .pam_environmentyêu cầu đăng nhập lại để khởi tạo các biến. Chỉ khởi động lại thiết bị đầu cuối là không đủ để có thể sử dụng các biến.

Xem thêm tại wiki của Ubuntu về Biến môi trường .


2
Vấn đề với ~/.pam_environmentgiải pháp là theo mặc định, mô-đun pam_env không đọc nó, trừ khi phân phối cấu hình nó theo cách khác. Trên Fedora 20, nó không được đọc.
Cristian Ciupitu

@CristianCiupitu là đúng. ~/.xsessionsẽ tải các biến môi trường cho các ứng dụng X. Xem unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek

@CristianCiupitu: Cảm ơn rất nhiều vì bình luận của bạn dẫn tôi đến pam_env. Tôi đã cập nhật các tệp Fedora 24 pam của mình để kích hoạt môi trường người dùng. Bây giờ tất cả các phiên Wayland của tôi có một PATH tùy chỉnh một lần nữa.
Zan Lynx

@CristianCiupitu có đúng không? Tài liệu linux-pam.org/Linux-PAM-html/sag-pam_env.html ngụ ý rằng ~ / .pam_en môi trường là tệp mặc định được đọc trừ khi có quy định khác. Xem dòng trên user_envfile=filename. Vấn đề của tôi với pam_env là biến HOME có thể không khả dụng tùy thuộc vào ứng dụng PAM. Mà giới hạn sử dụng của nó chỉ là các biến tuyệt đối.
CMCDragonkai

2
@CMCDragonkai, trang man pam_env (8) từ Fedora thường nói: " Theo mặc định, tùy chọn này bị tắt do các biến môi trường do người dùng cung cấp trong môi trường PAM có thể ảnh hưởng đến hành vi của các mô-đun tiếp theo trong ngăn xếp mà không có sự đồng ý của quản trị viên hệ thống" . Vì vậy, trong khi mô-đun PAM ngược dòng có một số cài đặt mặc định, một số phân phối ghi đè lên chúng.
Cristian Ciupitu

1

/etc/X11/Xsession.d/... Hoặc dọc theo dòng của thư mục đó, tùy thuộc vào Linux của bạn (?). Tôi đã viết một chút về nó ở đây .

Khái niệm là sau khi đăng nhập, trình quản lý hiển thị bắt đầu "Xsession" và nguồn (!) Mọi thứ trong thư mục đó theo thứ tự bảng chữ cái. Bạn chỉ có thể thêm một tập lệnh sửa đổi PATH. Xsession hoàn toàn sẽ là DE của bạn và thông thường tất cả các quy trình đều là con của Xsession đó, do đó thừa hưởng môi trường PATH.


Có tương đương mà tôi có thể đặt trong thư mục $ HOME của mình không? Giống như .Xsession?
Code-Guru

Theo Xession (5): /etc/X11/Xsession.d/40x11-common_xsessionrc Nguồn biến môi trường toàn cầu. Tập lệnh này sẽ lấy bất cứ thứ gì trong $ HOME / .xsessionrc nếu tệp có mặt. Điều này cho phép người dùng đặt các biến môi trường toàn cầu cho phiên X của họ, chẳng hạn như thông tin ngôn ngữ.
Bananguin

1

Một tiến trình kế thừa một môi trường từ tiến trình cha khởi động nó. Để thay đổi PATH hoặc các giá trị môi trường khác ở trẻ, chúng ta có thể đặt biến thành giá trị trong cha mẹ và xuất biến nếu chúng ta ở trong vỏ, sau đó bắt đầu quá trình con. Đứa trẻ cũng có thể đọc một hoặc nhiều tệp khởi tạo để thay đổi môi trường của chính nó khi nó bắt đầu.

Vì vậy, có hai câu hỏi nữa để có câu trả lời:

Cây thừa kế cha / con dẫn đến quá trình mà bạn muốn bị ảnh hưởng bởi PATH hoặc thay đổi môi trường là gì?

Những tập tin khởi tạo nào được sử dụng / đọc / có nguồn gốc bởi các quy trình có liên quan trong cây đó?

Đây là một phần của đầu ra của ps (1) để hiển thị ý của tôi về cây thừa kế:

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

Lưu ý \ _ trình tự đồ họa và số PIP / PPID (ID tiến trình và PID gốc). PID 1855 được bắt đầu bởi (một số đứa trẻ của?) 1497, được bắt đầu vào năm 1481, được bắt đầu bởi PID 1, được bắt đầu bởi quá trình tổ tiên 0.

Thực hiện theo dõi thừa kế tương tự cho quá trình bạn muốn ảnh hưởng, tìm ra các tệp khởi tạo nào có liên quan và thực hiện thay đổi thành PATH ở đâu đó trong cây đó, có thể có nội dung tương tự:

PATH=${PATH}:/usr/local/bin

Tôi có thể sử dụng psđể xác định quy trình cha của đăng nhập GUI không?
Code-Guru
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.