Satu hal yang salah tentang Anda adalah /etc/environmentperlu me-reboot untuk memuat ulang. Ini salah. Satu-satunya waktu file dibaca adalah saat login , ketika tumpukan PAM diaktifkan - khususnya pam_env.so, yang membaca file.
Keluar dan kembali akan menerapkan perubahan - dan pada kenyataannya Anda harus melakukan ini jika Anda ingin semua proses Anda menerima lingkungan baru . Semua "solusi" 2 lainnya hanya akan menerapkan lingkungan ke proses shell tunggal, tetapi tidak untuk apa pun yang Anda luncurkan melalui GUI termasuk jendela terminal baru. 1
Namun, jika Anda setuju dengan itu - kurangnya exportperintah dapat dikompensasi dengan set -adan set +a. Namun, ini tetap merupakan cara yang buruk, karena file tersebut tidak menggunakan penawaran. Tetapi ini seharusnya bekerja dengan baik:
while read -r env; do export "$env"; done
1 Manajer Sesi GNOME menyediakan cara untuk mengubah lingkungannya sendiri, tetapi hanya selama Initializationfase:
$ gdbus call -e -d org.gnome.SessionManager \
-o /org/gnome/SessionManager \
-m org.gnome.SessionManager.Setenv \
"FOO" "bar"
Error: GDBus.Error:org.gnome.SessionManager.NotInInitialization: Setenv
interface is only available during the Initialization phase
2 gdb bukanlah solusi, tetapi terkadang dapat digunakan. Anda harus melampirkannya pada proses yang berjalan dari manajer sesi Anda (misalnya gnome-session), manajer jendela Anda (misalnya gnome-shellatau openbox), taskbar / panel Anda jika ada (misalnya xfce4-panel), dan umumnya hal lain yang mungkin menjalankan barang. Untuk setiap proses tersebut, Anda harus melampirkannya gdbdengan PID, menjalankan putenv()fungsi menggunakan p, lalu melepaskan menggunakan q:
$ sudo gdb -p $(pidof gnome-session)
GNU gdb (GDB) 7.7.1
[...]
Attaching to process 718
[...]
0x00007fc2cefed81d in poll () from /usr/lib/libc.so.6
(gdb) p putenv("FOO=bar")
$1 = 0
(gdb) p putenv("BAZ=qux")
$2 = 0
(gdb) q
A debugging session is active.
Quit anyway? (y or n) y
Detaching from program: /usr/bin/gnome-session, process 718
Perhatikan bahwa debugger menghentikan proses, oleh karena itu Anda harus melampirkan ke compositing window manager hanya dari tty lain (konsol virtual) atau lebih dari SSH, jika tidak layar akan membeku.
Selain itu, Anda juga harus memperbarui lingkungan yang digunakan oleh dbus-daemon:
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
Untuk sistem yang lebih lama:
$ gdbus call -e -d org.freedesktop.DBus \
-o /org/freedesktop/DBus \
-m org.freedesktop.DBus.UpdateActivationEnvironment \
"{'FOO': 'bar', 'BAZ': 'qux'}"
()
for line in $( cat /etc/environment ) ; do export $line ; done, jika format file adalahkey=value.