Bagaimana cara mengatur PATH atau variabel lingkungan lainnya sehingga aplikasi X dapat mengaksesnya?

16

Bagaimana saya bisa mengatur variabel env sehingga KDE mengenalinya?

Bagaimana Anda mengatur jalur di lingkungan non-shell (KDE)?

Berbeda dengan dua pertanyaan di atas, saya ingin tahu bagaimana melakukan ini untuk GNOME. Atau lebih baik lagi, apakah ada metode yang tidak tergantung pada window manager. Untuk shell / terminal, saya biasanya mengedit ~/.bashrc. Di mana saya bisa menempatkan pernyataan ekspor sehingga variabel lingkungan tersedia untuk semua aplikasi X, tidak peduli manajer jendela yang digunakan?

Kode-Guru
sumber

Jawaban:

12

The pam_env membiarkan modul PAM yang Anda mengatur mereka baik dalam /etc/environmentatau di ~/.pam_environment, tergantung pada apakah Anda ingin untuk semua pengguna (lebar sistem), atau hanya pengguna Anda (sesi-lebar).

Variabel lingkungan sistem-lebar

Pengaturan variabel lingkungan yang memengaruhi sistem secara keseluruhan (alih-alih hanya pengguna tertentu) tidak boleh ditempatkan di salah satu dari banyak skrip level sistem yang dijalankan ketika sistem atau sesi desktop dimuat, tetapi ke dalam

/etc/environment- File ini secara khusus dimaksudkan untuk pengaturan variabel lingkungan sistem-lebar. Ini bukan file skrip, melainkan terdiri dari ekspresi penugasan, satu per baris. Secara khusus, file ini menyimpan pengaturan lokal dan jalur sistem.

Variabel lingkungan luas sesi

Pengaturan variabel lingkungan yang harus memengaruhi hanya pengguna tertentu (daripada sistem secara keseluruhan) harus ditetapkan ke:

~/.pam_environment- File ini secara khusus dimaksudkan untuk mengatur lingkungan pengguna. Ini bukan file skrip, melainkan terdiri dari ekspresi penugasan, satu per baris.

Catatan: Menggunakan .pam_environmentmembutuhkan login ulang untuk menginisialisasi variabel. Restart terminal saja tidak cukup untuk dapat menggunakan variabel.

Lihat lebih lanjut di wiki Ubuntu pada Variabel Lingkungan .

bahamat
sumber
2
Masalah dengan ~/.pam_environmentsolusinya adalah bahwa secara default modul pam_env tidak membacanya, kecuali jika distribusi mengkonfigurasinya. Pada Fedora 20 tidak dibaca misalnya.
Cristian Ciupitu
@CristianCiupitu benar. ~/.xsessionakan memuat variabel lingkungan untuk aplikasi X. Lihat unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek
@CristianCiupitu: Terima kasih banyak atas komentar Anda yang membawa saya ke pam_env. Saya memperbarui file pam Fedora 24 saya untuk mengaktifkan lingkungan pengguna. Sekarang semua sesi Wayland saya memiliki PATH khusus lagi.
Zan Lynx
@CristianCiupitu apakah itu benar? Dokumentasi linux-pam.org/Linux-PAM-html/sag-pam_env.html menyiratkan bahwa ~ / .pam_environment adalah file default untuk dibaca kecuali ditentukan lain. Lihat garis di user_envfile=filename. Masalah saya dengan pam_env adalah bahwa variabel HOME mungkin tidak tersedia tergantung pada aplikasi PAM. Yang membatasi penggunaannya hanya variabel absolut.
CMCDragonkai
2
@CMCDragonkai, halaman manual pam_env (8) dari Fedora mengatakan: " Secara default, opsi ini tidak aktif karena variabel lingkungan yang disediakan pengguna di lingkungan PAM dapat memengaruhi perilaku modul berikutnya dalam stack tanpa persetujuan administrator sistem" . Jadi, sementara modul PAM hulu memiliki beberapa pengaturan default, beberapa distribusi menimpa mereka.
Cristian Ciupitu
1

/etc/X11/Xsession.d/... atau di sepanjang baris direktori itu, tergantung pada Linux (?) Anda. Saya menulis sedikit di sini .

Konsepnya adalah bahwa setelah login, manajer tampilan memulai "Xsession" dan sumber (!) Semuanya dalam direktori itu dalam urutan abjad. Anda cukup menambahkan skrip yang memodifikasi PATH. Xsession akan menjadi DE Anda sebelum waktunya dan biasanya semua proses adalah anak-anak dari Xsession itu, oleh karena itu mewarisi lingkungan PATH.

Bananguin
sumber
Apakah ada padanan yang dapat saya atur di direktori $ HOME saya? Seperti .Xsession?
Code-Guru
Menurut Xession (5): /etc/X11/Xsession.d/40x11-common_xsessionrc Sumber variabel lingkungan global. Skrip ini akan sumber apa pun dalam $ HOME / .xsessionrc jika file tersebut ada. Ini memungkinkan pengguna untuk mengatur variabel lingkungan global untuk sesi X mereka, seperti informasi lokal.
Bananguin
1

Suatu proses mewarisi lingkungan dari proses induk yang memulainya. Untuk mengubah PATH atau nilai lingkungan lainnya dalam anak, kita dapat mengatur variabel ke nilai di induknya, dan mengekspor variabel jika kita berada di shell, dan kemudian memulai proses anak. Anak juga dapat membaca satu atau lebih file inisialisasi untuk mengubah lingkungannya sendiri saat dimulai.

Jadi, ada dua pertanyaan lagi untuk mendapatkan jawaban:

Apa pohon warisan orang tua / anak yang mengarah ke proses yang Anda ingin dipengaruhi oleh PATH atau perubahan lingkungan?

File inisialisasi apa yang digunakan / dibaca / bersumber dari proses yang relevan di pohon itu?

Ini adalah bagian dari output dari ps (1) untuk menunjukkan apa yang saya maksudkan dengan pohon warisan:

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

Perhatikan urutan grafik \ _ dan nomor PIP / PPID (ID Proses dan PID Induk). PID 1855 dimulai oleh (beberapa anak?) 1497, yang dimulai oleh 1481, yang dimulai oleh PID 1, yang dimulai oleh proses leluhur 0.

Lakukan penelusuran warisan serupa untuk proses yang ingin Anda pengaruhi, cari tahu file inisialisasi mana yang relevan, dan buat perubahan ke PATH di suatu tempat di pohon itu, mungkin dengan sesuatu yang mirip dengan:

PATH=${PATH}:/usr/local/bin
D McKeon
sumber
Dapatkah saya menggunakan psuntuk menentukan proses induk dari login GUI?
Code-Guru